подключение к базе данных доступа и запись в таблицу - PullRequest
0 голосов
/ 13 сентября 2010

У меня есть лист счета 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 Ответ

1 голос
/ 13 сентября 2010

Мне кажется, проблема в том, что вы пытаетесь получить значения ячеек 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;"
...