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

标签 sql excel vba ms-access-2010 ado

我有以下代码将几行 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/

相关文章:

mysql - MySQL 中表比较的多次更新

php - 如何以及在何处设置和检查 group_concat_max_len

c# - 下载 Excel 文件

excel - 无法单击 ActiveX 控件和表单控件 Excel 2010

mysql - 如何在excel中创建自定义函数来抓取mysql数据?

vba - 使用 Shell 函数运行 exe 时找不到文件错误

mysql - 自动 MySQL 数据类型转换

mysql - 没有特定条目时如何选择条目?

vba - 在 VBA 中对行进行分组

java - 在另一个程序(VB 或 Java)之间传递 SAS 宏变量