ADODB Excel SQL оператор для записи в следующую доступную строку
В настоящее время я могу читать и обновлять данные в моей электронной таблице Excel, используя соединение ADODB в моем VBScript. Это работает гладко, и я понимаю, как манипулировать различными столбцами и различными строками с тем, что я хочу.
Моя проблема в том, что теперь мне нужно ввести новую строку данных. Как он узнает, где его разместить? Код, который я использовал, всегда дает какую-то точку отсчета: пример:
rs.Open "Update [links$] Set [F" & arrLocals(i) & "]= '" & arrChangeData(i) & "' Where [F2] = '" & arrFormID(j) & "'", cn, adOpenStatic, adLockOptimistic
в соответствии с этим, это в значительной степени означает что-то делать с этой строкой, пока вы работаете с arrFormID(j)
соответствующий столбец F2
, Но, если вы хотите новую строку, я не знаю, что есть, чтобы соответствовать?
2 ответа
Вам нужно использовать insert
заявление. Операторы SQL, такие как insert
, delete
, а также update
обычно не рассматриваются как операторы, возвращающие строки, поэтому обычно имеет смысл использовать Connection
сам объект для выполнения операции, а не Recordset
, Например:
Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Open "<your Excel connection string>"
cn.Execute "update [links$] set ... where ..."
cn.Execute "insert into [links$] values (...)"
cn.Execute "delete from [links$] where ..."
cn.Close
Самый основной insert
оператор просто предоставляет значения для каждого столбца в вашей таблице / рабочей таблице, в той же последовательности столбцы появляются:
cn.Execute "insert into [links$] values ('col1value','col2value','col3value')"
Еще один способ сделать это - использовать интерфейс RecordSet, например:
Option Explicit
Const adCmdTable = 2
Const adLockBatchOptimistic = 4
Const adLockOptimistic = 3
dim ado, rs
set ado = CreateObject("ADODB.Connection")
set rs = CreateObject("ADODB.RecordSet")
ado.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=example.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
ado.Open
'ado.Execute "DROP TABLE Sheet1"
ado.Execute "CREATE TABLE Sheet1 (ID int, name VARCHAR)"
rs.Open "Sheet1", ado, , adLockOptimistic, adCmdTable
dim i
for i = 0 to 4
' create a new record, populate the fields then update the data source
rs.AddNew
rs.Fields("ID").Value = i
rs.Fields("name").Value = "Dave"
rs.Update
next 'i
' also showing populating a dictionary to pass to update() instead
' of inserting into the record's fields directly
rs.AddNew
dim dict
set dict = CreateObject("Scripting.Dictionary")
dict("ID") = 99
dict("name") = "Geoff"
rs.Update dict.Keys(), dict.Items()
rs.Close
ado.Close
Дает тебе
ID | название ---------- 0 | Дейв 1 | Дейв 2 | Дейв 3 | Дейв 4 | Дейв 99 | Geoff