2011-03-14 69 views
0
Dim adoconn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 

Private Sub Form_Load() 
Dim str As String 
Set adoconn = Nothing 
Text2.Text = Form4.List2.Text 
adoconn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database1.mdb;Persist Security Info=False" 
str = "select * from dept where DEPT =" & Form4.List2.Text 
rs.Open str, adoconn, adOpenDynamic, adLockPessimistic 
Text1.Text = rs(2) 
End Sub 

rs.open聲明有什麼問題??? 它以完美的形式爲我工作。 但它以另一種形式給出運行時錯誤:沒有爲一個或多個參數給出值...VB6 recordset.open沒有給出一個或多個參數錯誤的值

+0

你確定'Form4.List2.Text'有完成查詢的值嗎? – Xint0 2011-03-14 08:20:45

+0

表單引用是否正確? – ramu 2011-03-14 08:48:02

+0

是的...它正確的我從列表框中獲得的值在form4 – user658427 2011-03-14 09:37:56

回答

1

問題幾乎肯定是Form4.List2.Text的值。

說的值是單個字母a。然後,動態SQL是

SELECT * 
    FROM dept 
WHERE DEPT = a; 

假設有表dept沒有列名爲a然後訪問(噴氣機,ACE,等等)只會把它作爲一個參數和,因爲您提供的沒有價值去與參數,您會收到錯誤消息,「沒有給出一個或多個必需參數的值」。

當您遇到動態SQL的某些問題(更別提其他人(如WHERE子句中的SQL注入))時,請考慮創建數據庫PROCEDURE,其中使用ADO Command對象在VBA代碼中執行強類型參數例如假設DEPTINTEGER:要被執行一次

SQL代碼(在ANSI-92 Query Mode):

CREATE PROCEDURE GetDept 
(
arg_dept INTEGER 
) 
AS 
SELECT * 
    FROM DEPT 
WHERE dept = arg_dept; 

VBA代碼:

Private Sub Form_Load() 
    Text2.Text = Form4.List2.Text 

    Dim cat As Object 
    Set cat = CreateObject("ADOX.Catalog") 
    cat.ActiveConnection = _ 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database1.mdb;Persist Security Info=False" 

    Dim cmd 
    Set cmd = cat.Procedures("GetDept").Command 

    cmd.Parameters(0).Value = List2.Text ' <--- test for type mismatch here ' 

    Set rs = cmd.Execute 

    Text1.Text = rs(2) 
End Sub 

其他考慮因素與列名的列表替換SELECT *,引用記錄集字段按名稱(而不是序號)和處理零行的記錄集。

+0

在我的情況下,值不是單個字母。 – user658427 2011-03-14 11:59:07

+0

問題不是那個值是單個或多個字母。問題是你選擇的語句不知道那個值比較的是字符串值。一些撇號可能會有所幫助,但它們會使SQL語句注入攻擊的聲明氾濫。 – Arvo 2011-03-14 12:23:46

+0

但仍然沒有解決...... :( – user658427 2011-03-14 15:48:41

0

我有這個錯誤,它基本上的含義是,您傳遞給Access數據庫的SQL中存在語法錯誤,這意味着Access無法識別傳遞給它的一個或多個參數。詳情請見http://support.microsoft.com/kb/303134

錯誤的最可能出現位置是您傳遞「Form4.List2.Text」的附加字符串。最簡單的方法是在Access中直接運行查詢,您應該看到一個「輸入參數值」對話框出現,這基本上意味着訪問不會識別傳遞給它的一個或多個字段/值名稱。訪問似乎有改變字段名稱外觀的習慣以找出不謹慎的例如公司/部門在表格視圖中顯示的實際上是公司或部門,因爲查詢方面。

希望這會有所幫助。

相關問題