database
  • vba
  • where
  • access
  • 2016-11-09 153 views 0 likes 
    0

    我得到错误几个参数。预计1.此VBA代码,我不知道如何正确进入它...访问VBA - 哪里条款

    Dim rs_invoice As DAO.Recordset 
    Set rs_invoice = CurrentDb.OpenRecordset("SELECT * FROM order_tbl WHERE invoice_no Is Null AND company_name='" _ 
    & Me.cmb_start_company.Column(1) & "' AND shiped=" & "True") 
    
    
    If Not (rs_invoice.EOF And rs_invoice.BOF) Then 
        rs_invoice.MoveFirst 
        Do Until rs_invoice.EOF = True 
         rs_invoice.Edit 
         rs_invoice!invoice_no = invoice_number 
         rs_invoice.Update 
    
         rs_invoice.MoveNext 
        Loop 
    Else 
        'No records 
    End If 
    
    'Finish 
    
    
    rs_invoice.Close 'Close the recordset 
    Set rs_invoice = Nothing 'Clean up 
    

    感谢

    +0

    未能进行你用'UPDATE order_tbl SET invoice_no =“&invoice_number&”WHERE invoice_no是Null AND company_name ='“&Me.cmb_start_company.Column(1)&”'AND shiped = True'行来做同样的事情。 ?尽管我主张使用SQL参数而不是字符串连接。 –

    +0

    谢谢,但我真的不知道如何使用此代码你可以发布样品吗?谢谢 – Pecurka

    +0

    我对VBA不熟悉,但它看起来像[在ADO.NET中使用Command.Prepare的VBA相当于什么](http://stackoverflow.com/a/1746897/1115360)可以帮助您。 –

    回答

    0

    我不是那么熟悉接入/ DAO,但你串联参数值补充到您的查询。使用ADO命令文本会是这个样子,而不是:

    Const sql As String = "SELECT * FROM order_tbl WHERE invoice_no Is Null AND company_name = ? AND shiped = True" 
    

    ?是一个参数值的占位符;而不是直接致电OpenRecordset(sql),您需要制作一个Command并添加一个合适的Parameter

    似乎DAO处理这个有点不同,请参阅Parameterized queries in Access - 当然其中一个答案适用于此。因为我不喜欢随机即席查询撞击着我的数据库,我可能会与QueryDefs办法去this answer

    Dim qdf As Querydef 
    Dim rst As Recordset 
    
    'then we'll open up the query: 
    Set qdf = CurrentDB.QueryDefs(qryname) 
    
    'Now we'll assign values to the query using the parameters option: 
    qdf.Parameters(0) = qryStartDate 
    qdf.Parameters(1) = qryEndDate 
    
    'Now we'll convert the querydef to a recordset and run it 
    Set rst = qdf.OpenRecordset 
    

    这将是:

    Dim query As QueryDef 
    Set query = CurrentDB.QueryDefs("TheQuery") 
    
    query.Parameters(0) = Me.cmb_start_company.Column(1) 
    
    Dim result As Recordset 
    Set result = query.OpenRecordset 
    
    +0

    刚刚意识到,我不知道错误消息是如何说预计参数*,因为它是一个即席查询。尽管如此,一种不同的,更强大的方法不会伤害。 –

    +0

    我用新的查询完成了它。感谢所有:) – Pecurka

    1

    只是猜测。你可以试试这个:

    "SELECT * FROM order_tbl WHERE (invoice_no Is Null) AND (company_name='" _ 
    & Me.cmb_start_company.Column(1) & "')AND (shiped=" & "True") 
    

    选项2:

    dim str_test as string 
    str_test =  "SELECT * FROM order_tbl WHERE (invoice_no Is Null) AND (company_name='" & Me.cmb_start_company.Column(1) & "')AND (shiped=" & "True") 
    
    debug.print str_test 
    

    你在即时窗口中得到什么?

    选项3:

    "SELECT * FROM order_tbl WHERE (invoice_no Is Null) AND (company_name='" _ 
        & Me.cmb_start_company.Column(1) & "')AND (shiped=True)" 
    

    选项4: 然后用样品这里,它应该工作。 https://msdn.microsoft.com/en-us/library/bb243786(v=office.12).aspx也许吧。只要确保你设定记录同样的方式:

    Dim dbsNorthwind As DAO.Database 
    Dim rstProducts As DAO.Recordset 
    Dim strSQL As String 
    
    Set dbsNorthwind = CurrentDb 
    strSQL = "SELECT * FROM Products WHERE Discontinued = No " & _ 
         "ORDER BY ProductName" 
    Set rstProducts = dbsNorthwind.OpenRecordset(strSQL) 
    
    +0

    我现在已经测试和我有同样的错误:/ – Pecurka

    +0

    @Pecurka - 见选项2 – Vityata

    +0

    我立即窗口 SELECT * FROM order_tbl WHERE(invoice_no IS NULL)得到这个AND(COMPANY_NAME =” Bogdanic GmbH doo')AND(shiped = True) – Pecurka

    相关问题