gpt4 book ai didi

sql - ADO参数查询正在将相同的数据插入到每一行中

转载 作者:行者123 更新时间:2023-12-03 02:48:14 26 4
gpt4 key购买 nike

我有以下代码将几行 Excel 数据输入到 Microsoft Access 数据库中。代码似乎正在运行,并且数据正在写入数据库。唯一的问题是,只有第一行数据被输入了好几次!

foo

这是我的代码:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com