【问题标题】:connecting to access data base and write to table连接访问数据库并写入表
【发布时间】:2010-09-13 19:34:38
【问题描述】:

我有一张 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)”;输入的参数太少。 我不确定这是什么。 有什么想法或建议吗?非常感谢!

【问题讨论】:

    标签: ms-access excel database-connection vba


    【解决方案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;"
    

    【讨论】:

    • 那么我应该把它放在我现有代码的什么地方?抱歉,我对此有点陌生。
    • 尝试使用我的答案第一部分中的语句更改 sql 语句 - 如果可行,则参数化查询的代码将替换“sql =”和“con.Execute”行你的代码。
    • 第一部分工作,但后来我收到一个错误,说操作必须使用可更新查询
    • 插入参数化查询后,出现以下错误:Provider cannot derived parameter information and SetParamerterInfo has not been called
    • 尝试在连接字符串中使用 Jet 驱动程序。
    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多