2014-05-20 3 views
0

SQL Server INSERT 쿼리에 문제가 있습니다.VBA Excel SQL Server INSERT 쿼리

먼저, 여기에 내가 달성하기 위해 노력하고있는 작업은 다음과 같습니다

나는이 MS SQL Server에 수출하고자하는 엑셀 워크 시트의 제품 목록을 가지고있다.

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

이 사람이 나를 도와 드릴까요 : 나는라는 오류가

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 

: 여기

내가 노력 코드입니다?

PS 내가 VBA 코멘트가 "//"로 수행하지만, " '"여기에 읽기 덜 쉽게 코드를하지 알고 그래서 내가 명명 된 매개 변수가 작동합니다 생각하지 않습니다

+0

나는 약간 엉망이다. 코드에서 P1Date에 대한 참조가 없다는 것이 확실합니까? –

+0

긴 샷이지만 날짜는 종종 예약어입니다. 다른 것을 사용하거나 매개 변수 이름으로 사용할 때마다 []로 묶으십시오. – Rory

+0

@AnthonyHorne 내 생각 엔 그 "?" "? Date"에서 "@ P1"마녀를위한 스위치를 얻는 것은 매개 변수 번호 1이 될 것이고 나머지는 "@ P1Date"결과로 스쿼시를 얻게 될 것입니다. 그러나 이것을 교정하는 방법이나 이유는 모르겠습니다. – Sebastien

답변

2

을 그들을 전환 . 다음을 사용하여 시도하십시오 :

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

그리고 나중에 추가하는 매개 변수의 순서가 올바른지 확인하십시오. ;)