我有以下代码将几行 Excel 数据输入到 Microsoft Access 数据库中。代码似乎正在运行,并且数据正在写入数据库。唯一的问题是,只有第一行数据被输入了好几次!
这是我的代码:
Sub AddToDB()
Dim adoConn As ADODB.Connection
Dim adoComm As ADODB.Command
Dim RecordRow As Long
Dim TheProduct As String, TheQuantity As String, ThePrice As Double
Dim Location As String, TheTime As Date, SaleNumber As Integer
Set adoConn = GetConnectionTWO
Set adoComm = New ADODB.Command
Lastrow = Sold.Cells(Rows.Count, 1).End(xlUp).Row
Location = Frontsheet.Range("M3").Value
With adoComm
Set .ActiveConnection = adoConn
For RecordRow = 2 To Lastrow
SaleNumber = Sold.Cells(RecordRow, 1).Value
TheTime = Sold.Cells(RecordRow, 5).Value
TheProduct = Sold.Cells(RecordRow, 2).Value
TheQuantity = Sold.Cells(RecordRow, 3).Value
ThePrice = Sold.Cells(RecordRow, 4).Value
.CommandText = "INSERT INTO Sales([SaleNo],[Time],[Location],[Product],[Quantity],[Price]) " & _
"VALUES(?,?,?,?,?,?)"
.Parameters.Append adoComm.CreateParameter(Type:=adInteger, Value:=SaleNumber)
.Parameters.Append adoComm.CreateParameter(Type:=adDate, Value:=TheTime)
.Parameters.Append adoComm.CreateParameter(Type:=adVarWChar, Size:=255, Value:=Location)
.Parameters.Append adoComm.CreateParameter(Type:=adVarWChar, Size:=255, Value:=TheProduct)
.Parameters.Append adoComm.CreateParameter(Type:=adVarWChar, Size:=255, Value:=TheQuantity)
.Parameters.Append adoComm.CreateParameter(Type:=adDouble, Value:=ThePrice)
.Execute
Next RecordRow
End With
adoConn.Close
End Sub
Function GetConnectionTWO() As ADODB.Connection
Set GetConnectionTWO = New ADODB.Connection
GetConnectionTWO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathToDatabaseTWO & ";"
End Function
Function PathToDatabaseTWO() As String
PathToDatabaseTWO = ThisWorkbook.Path & "\" & "kimpostwo.accdb"
End Function
我认为我的“For - Next”循环会移动到下一行,当我在 Excel VBA 编辑器中单步执行代码时,我可以看到数据发生变化。
我尝试在 .parameter.append 行之前和之后移动 .commandtext 行,但仍然没有变化。
我对使用 ADO 非常陌生,希望能得到有关我需要做什么的指示。
最佳答案
不要在 for 循环中一次又一次地添加所有参数,而是尝试仅创建一次命名参数并仅在调用 Excecute() 之前更改其值。 “SaleNumber”示例:
With adoComm
Set .ActiveConnection = adoConn
.CommandText = "INSERT INTO Sales([SaleNo]) VALUES(?)"
.Parameters.Append adoComm.CreateParameter("SaleNumber", Type:=adInteger)
For RecordRow = 2 To Lastrow
SaleNumber = Sold.Cells(RecordRow, 1).Value
.Parameters("SaleNumber").Value = SaleNumber
.Execute
Next RecordRow
End With
关于sql - ADO参数查询正在将相同的数据插入到每一行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23456382/