2010-09-13 1 views
0

У меня есть лист счёта excel, и я хочу записать информацию из счета-фактуры в таблицу в файле доступа. Мой следующий код:подключение к базе данных доступа и запись в таблицу

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

Я думаю, проблема в том, что вы пытаетесь получить значения ячеек G6 и G7 в запросе INSERT. Вместо этого вам нужно связать их с вашим вставным запросом.

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

+0

Попробуйте изменить инструкцию sql с первой частью моей части ответа - если это сработает, тогда код для параметризованного запроса заменит строки «sql =» и «con.Execute» из вашего кода. – Tmdean

+0

первая часть сработала, но потом я получил сообщение об ошибке: операция должна использовать обновляемый запрос – Lars