2016-02-09 121 views
0

我正在製作一個程序,在該程序中,我必須在嘗試將值保存在另一個表中之前檢查另一個表中的某些列值。兩個表都在SQL中。使用MSSql時運行時錯誤'91'

我盡我所能自己做,但我得到突出顯示的行附近的錯誤。

rs.open(insert into testreport_tb1...

Private Sub Command1_Click() 
Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim BrdSrNo As String 
Dim Result As Boolean 
Dim machineName As String 

machineName = Environ("computername") 
' Ready objects for use. 
Set cn = New ADODB.Connection 
Set rs = New ADODB.Recordset 
BrdSrNo = BoardSrNo.Text 
Result = False 
' Connect. 
cn.Open "{Here I give the connection string}" 
' Fetch a recordset. 
rs.Open "select * from testreport_tb1 where board_SrNo = '" & BrdSrNo & "' order by test_DateTime desc", cn, adOpenStatic, adLockReadOnly 
' Display value, and total recordcount. 
MsgBox rs.Fields(3) 
MsgBox rs.Fields(8) 
'MsgBox rs.RecordCount 
stage_Status = rs.Fields(3) 
stage_Id = rs.Fields(8) 
rs.Close 
cn.Close 

If stage_Status = "C" Then 
If stage_Id = "True" Then 
rs.Open "insert into testreport_tb1 values('" & BrdSrNo & "',3,GETDATE(),'" & Result & "',NULL,'" & machineName & "',' KO ','A','D')", cn, adOpenDynamic, adLockBatchOptimistic 
MsgBox "saved" 
End If 
End If 
' Close and release objects. 
rs.Close 
cn.Close 
Set rs = Nothing 
Set cn = Nothing 

End Sub 
+0

爲什麼在失敗的行中有<! - language:lang-js - > ***'? – Sebas

+0

我試圖突出顯示錯誤行,雖然張貼..多數民衆贊成在它.. @Sebas – suvi

+0

這是一段時間,我還沒有做任何VB ...但我很奇怪,你使用插入語句的記錄集。我認爲你需要使用'cn.Execute sql,,adCmdText','sql'作爲你的查詢。 – Sebas

回答

2

至於我記得,你可以不執行DML statements,(插入,更新或刪除)時使用rs.Open,但只有當你正在執行SELECT語句。

此外,您需要使用ADODB.Command並設置參數而不是連接字符串來創建插入語句,否則它是sql injection攻擊的開門。

它已經自從上次我和ADODB工作了很長一段時間,但你插入的代碼應該是這個樣子:

If stage_Status = "C" And stage_Id = "True" Then 
    Dim cmd as new ADODB.Command 
    cmd.CommandText = "insert into testreport_tb1 values(?, 3, GETDATE(), ?, NULL, ?, ' KO ', 'A', 'D')" 

    cmd.ActiveConnection = cn 

    Set param = cmd.CreateParameter(, adVarChar, adParamInput) 
    param.Value = BrdSrNo 
    cmd.Parameters.Append param 

    Set param = cmd.CreateParameter(, adVarChar, adParamInput) 
    param.Value = Result 
    cmd.Parameters.Append param 

    Set param = cmd.CreateParameter(, adVarChar, adParamInput) 
    param.Value = machineName 
    cmd.Parameters.Append param 

    cmd.Execute 

    MsgBox "saved" 
End If 

注:寫的代碼直接在這裏,和我寫道,自從使用ADODB已經很長時間了,所以代碼中可能會出現錯誤。但是,這是使用ADODB執行插入語句的正確方法。

+0

感謝您的回覆.. @Zohar Peled但是,當運行該程序,似乎它不進入If循環..它沒有被執行..我該怎麼做.. – suvi

+1

如果它不進去if那麼它不應該在你的代碼中做到這一點。我在if中所做的所有事情都將2條語句合併爲1 ...調試代碼,並查看stage_status和stage_id中的值。 –