连接到访问数据库并写入表

时间:2010-09-13 19:34:39

标签: excel ms-access excel-vba database-connection vba

我有一张Excel发票表,我想将发票中的信息写入Access文件中的表格。我的以下代码是:

Private Sub Button66_Click()
Dim con As New ADODB.Connection
Dim connectionString As String

Dim sql As String

connectionString = "DBQ=c:\Users\Public\Public Desktop\InvoiceRecords.mdb; Driver={Microsoft Access Driver (*.mdb)};"

con.Open connectionString

sql = "insert into Invoices (Customer, Address) values(G6, G7)"

con.Execute sql

MsgBox "Values entered", vbInformation

con.Close

Set con = Nothing

End Sub

然而,当我运行它时,我得到一个运行时错误'-2147217904(80040e10)';参数太少。 我不确定这是什么。 任何想法或建议?非常感谢!

1 个答案:

答案 0 :(得分:1)

我认为问题是你试图在INSERT查询中获取单元格G6和G7的值。您需要将它们连接到插入查询中。

sql = "insert into Invoices (Customer, Address) " & _
    "values('" & Range("G6") & "', '" & Range("G7") & "')"

以这种方式构建sql命令会使您容易受到SQL注入攻击。更好的选择是使用参数化查询。

Dim cmdInsert As New ADODB.Command
With cmdInsert
    .Prepared = True
    .CommandType = adCmdText
    .CommandText = "INSERT INTO Invoices (Customer, Address) VALUES (?, ?)"
    Set .ActiveConnection = con
End With

cmdInsert.Parameters(0).Value = Range("G6").Value
cmdInsert.Parameters(1).Value = Range("G7").Value
cmdInsert.Execute

您还应该使用Jet驱动程序来连接,而不是使用ODBC驱动程序。改为使用此连接字符串。

"Provider=Microsoft.Jet.OLEDB.4.0;Data source=c:\Users\Public\Public Desktop\InvoiceRecords.mdb;"