2014-07-25 72 views
0

我试图打开一个使用SQL字符串的记录集。运行时错误3061“参数太少”。任何帮助,将不胜感激。使用变量设置rst

Dim stAppName As String 
Dim stURL As String 
Dim rst As Recordset 
Dim dbs As Database 
Dim stringToSearch As Integer 
Dim strSQL As String 

Set dbs = CurrentDb 


stringToSearch = InputBox("What is your route #?", "Enter route #: ") 


strSQL = "SELECT ESRP.* FROM ESRP WHERE ESRP.Route=stringToSearch" 

Set rst = dbs.OpenRecordset(strSQL) 
+0

变量超出引号,但这是一个非常糟糕的主意。看看参数,例如http://stackoverflow.com/questions/4631552/ms-access-query-reuse-supplying-query-parameters-using-vba/4631570#4631570,但你会发现很多例子。 – Fionnuala

+0

谢谢,应该已经意识到了。我有一个虽然不是循环的EOF,并收集变量为谷歌地图建立一个URL。我的司机现在(我有最后一块拼图)输入一个路线号码,并获得行车路线,停下来,为整个路线。 – user3443424

回答

0

请按照以下方式更改strSQL的代码行,正如Fionnuala所建议的,您需要在引号外使用变量。

假设路由字段是文本数据类型,我们需要把单引号字符串,如果它的数量没有单引号的日期把#改为单引号

strSQL = "SELECT ESRP.* FROM ESRP WHERE ESRP.Route='" & stringToSearch & "'" 
0

这是一个小样本中,也许它可以帮助你

Public Function fn_SQL_dbOpenRecordset(Optional vsql As String = "") As Recordset 

    Dim dbs  As DAO.Database 

    Dim rs As Recordset 
    On Error GoTo END_CODE 

    'Set the database 
    Set dbs = CurrentDb 
    Set rs = dbs.OpenRecordset(vsql, dbOpenForwardOnly) 'you can use: dbOpenDynamic; dbOpenSnapshot; dbOpenTable 

    Set fn_SQL_dbOpenRecordset = rs 

    Exit Function 

END_CODE: 
    Set fn_SQL_dbOpenRecordset = Nothing 
End Function 


Public Sub Program_Test() 

    On Error GoTo ERROR_SUB 
    Dim rs As Recordset 
    Dim sName As String 


    sName = "Joe" 
    sName = "'" & sName & "'" 'WARNING: BE CAREFUL WITH SQL INJECTION !!! Google it 

    Set rs = fn_SQL_dbOpenRecordset("select * from table1 d where PersonName = " & sName) 

    Dim i As Long 
    i = 0 

    While Not rs.EOF 
     Debug.Print rs(0).Value & " - " & rs(1).Value 
     rs.MoveNext 
    Wend 

ERROR_SUB: 

    On Error Resume Next 
    If Not rs Is Nothing Then rs.Close 
    Set rs = Nothing 
End Sub