2010-09-13 44 views
0

我有一張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

我認爲問題在於你想要在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;" 
+0

因此,在我現有的代碼中,我會把這個嗎?對不起,我對此有點新。 – Lars 2010-09-13 20:13:44

+0

嘗試更改我的答案的第一部分中的sql語句 - 如果該方法有效,那麼參數化查詢的代碼將替換代碼中的「sql =」和「con.Execute」行。 – Tmdean 2010-09-13 20:30:42

+0

第一部分工作,但後來我得到一個錯誤說操作必須使用可更新的查詢 – Lars 2010-09-13 20:39:37