繁体   English   中英

VBA Excel SQL Server INSERT查询

[英]VBA Excel SQL Server INSERT query

我在使用SQL Server INSERT查询时遇到问题。

首先,这是我想要实现的目标:

我有一个excel工作表中的产品列表,我想导出到MS SQL Server。

这是我试过的代码:

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim Client As String

Set cn = New ADODB.Connection
Set cmd = New ADODB.Command

//Worksheets("Config").cells(1, "B").Value contains the connection string
cn.Open Worksheets("Config").Cells(1, "B").Value

cmd.ActiveConnection = cn
cmd.CommandType = adCmdText

If Worksheets("Configuration").Cells(2, "B").Value = 1 Then
    cmd.CommandText = "SELECT * FROM Cardex WHERE NbCardex = ?"
ElseIf Worksheets("Configuration").Cells(2, "B").Value = 0 Then
    cmd.CommandText = "SELECT * FROM Cardex WHERE Name = ?"
End If

cmd.Prepared = True
cmd.Parameters.Append cmd.CreateParameter("Client", adVarChar, adParamInput, 250, 
                                 UCase(Worksheets("Exporter").Cells(2, "B").Value))

Set rs = cmd.Execute

If Not rs.EOF Then
    Client = rs.Fields("NoCardex").Value
End If

rs.Close

//The code work until it reach this point, The next lines I am not sure what is wrong
//Hell I'm not even sure what i am doing.
//Problem is, nothing is added into the table
Dim cell As Range
For Each cell In Worksheets("Exporter").Range("Liste")
  If cell.Row > 4 And Not cell.Value = vbNullString Then
    Set cmd = New ADODB.Command

    cmd.ActiveConnection = cn
     cmd.CommandType = adCmdText
     cmd.CommandText = "INSERT INTO NewTable(Dte, NbTr, NbClient, NbTr2, NbLine, NbProd, 
                         Desc, Qty, Cost, Prc, FlImp, FLDone) 
                        VALUES(?Date, ?Trans, ?Client, ?Projet, ?Ligne, ?Prod, ?Desc, 
                         ?Qte, ?Cout, ?Vend, ?Imp, 0)"
     cmd.Prepared = True

     cmd.Parameters.Append cmd.CreateParameter("Date", adVarChar, adParamInput, 8, Worksheets("Exporter").Cells(1, "E").Value)
     cmd.Parameters.Append cmd.CreateParameter("Trans", adVarChar, adParamInput, 15, Worksheets("Exporter").Cells(1, "B").Value)
     cmd.Parameters.Append cmd.CreateParameter("Client", adVarChar, adParamInput, 15, Client)
        cmd.Parameters.Append cmd.CreateParameter("Projet", adVarChar, adParamInput, 20, Worksheets("Exporter").Cells(2, "E").Value)

     cmd.Parameters.Append cmd.CreateParameter("Ligne", adInteger, adParamInput, , (cell.Row - 4))
     cmd.Parameters.Append cmd.CreateParameter("Prod", adVarChar, adParamInput, 30, cell.Value)
     cmd.Parameters.Append cmd.CreateParameter("Desc", adVarChar, adParamInput, 8000, Worksheets("Exporter").Cells(cell.Row, "B").Value)
     cmd.Parameters.Append cmd.CreateParameter("Qte", adCurrency, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "C").Value)
     cmd.Parameters.Append cmd.CreateParameter("Cout", adCurrency, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "D").Value)
     cmd.Parameters.Append cmd.CreateParameter("Vend", adCurrency, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "E").Value)
     cmd.Parameters.Append cmd.CreateParameter("Imp", adSmallInt, adParamInput, , Worksheets("Exporter").Cells(cell.Row, "F").Value)

     cmd.Execute()
  End If
Next

cn.Close

我收到一条错误消息:

Execution error '-2147217900 (80040e14)':
The Scalar variable "@P1Date" must be declare.

谁能帮我?

PS我知道VBA评论没有用“//”完成,但是“'”使代码在这里不那么容易阅读所以我把它们换掉了

我不认为命名参数会起作用。 尝试使用:

cmd.CommandText = "INSERT INTO NewTable(Dte, NbTr, NbClient, NbTr2, NbLine, NbProd, 
                     Desc, Qty, Cost, Prc, FlImp, FLDone) 
                    VALUES(?, ?, ?, ?, ?, ?, ?, 
                     ?, ?, ?, ?, 0)"

并确保您稍后追加的参数顺序正确。 ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM