0

我有一个程序可以删除我的 Access2010 数据库中任何早于某个日期的数据,然后压缩数据库。程序的删除部分工作正常,但是当我尝试在之后立即压缩它时出现错误“无效参数” 。这是我的代码的样子:

    'Deleting anything older than chosen before databse is compacted.
    Dim DateA As Date = Date.Now
    Dim DateB As String
    Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Forte\Fortedb.accdb"
    Dim ParentCNN = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Forte\Fortedb.accdb"
    Dim CloneCNN = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Forte\Temp.accdb"
    Dim cnn As New OleDbConnection(ConnString)
    Dim sql As String

    'Formatting the date to make it 7 days into the past.
    DateB = Format(DateA.AddDays(ApplicationPropertiesWindow.DeleteFilebox.SelectedIndex + 1), "MM/dd/yy")
    cnn.Open()

    'Delete everything from b_forte where proddate is less than date - chosen time.    
    sql = "DELETE * FROM b_forte WHERE ProdDate < #" & DateB & "#"

    Dim Command = New OleDb.OleDbCommand(sql, cnn)
    Command.ExecuteNonQuery()
    cnn.Close()
    'Compacting the databse
    Try

        Dim JrO As New JRO.JetEngine

        cnn.Open()
        JrO.CompactDatabase(ParentCNN, CloneCNN)
        If System.IO.File.Exists("C:\Forte\Temp.accdb") Then
            System.IO.File.Delete("C:\Forte\Fortedb.accdb")
            Rename("C:\Forte\Temp.accdb", "C:\Forte\Fortedb.accdb")
            Logging("Database compacted.")
            cnn.Close()
        End If

    Catch ex As Exception
        MainTextBox.AppendText(Environment.NewLine & "Database Compression Failure :" & vbCr & ex.Message)
    End Try

我正在使用 vb.net 2010 并在数据库上没有密码访问 2010。

4

2 回答 2

1

的参数CompactDatabase只是路径和文件名,而不是连接信息。

BTW VB.NET 不区分大小写,所以我不会重用 JRO:

Dim JrO As New JRO.JetEngine

它可能会按原样工作,但稍后阅读会令人困惑,并且可能会在某个阶段引起冲突。

于 2013-07-05T17:01:11.607 回答
0

我从@Andy G 发现这是来自CompactDatabase. 我必须在我的代码中更改的信息位于:CloneCNN。该字符串是"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Forte\Temp.accdb" 和修复我添加到末尾的无效参数错误消息。;Jet OLEDB:Engine Type=5CloneCNN

于 2013-07-05T17:29:59.427 回答