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

    エラーが発生するいくつかのパラメータ。このVBAコードに1を期待し、私は右のそれを入力する方法を知らない...VBAへのアクセス - Where句

    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 Is Null AND company_name =' "&Me.cmb_start_company.Column(1)&" 'AND shiped = True'の行に沿って、同じSQLコマンドを使用して同じことを行います。 ?私は文字列連結の代わりにSQLパラメータの使用を主張しますが。 –

    +0

    ありがとう、私は本当にこのコードを使用する方法を知っていませんサンプルを投稿してください?ありがとう – Pecurka

    +0

    私はVBAに精通していませんが、[何がADO.NETでCommand.Prepareを使用するためのVBA同等のものです](http://stackoverflow.com/a/1746897/1115360)助けることができます。 –

    答えて

    0

    私はすべてのAccess/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を参照してください。答えのうちの1つがここに該当します。私は私のデータベースを打つランダムアドホッククエリを好きではないので、私はおそらくthis answerQueryDefsアプローチでいいと思う:

    だろう
    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 - 私はすぐに窓で SELECT * order_tbl FROM WHERE(あるヌルinvoice_no)AND(COMPANY_NAME =」これを得たオプション2 – Vityata

    +0

    を見ますBogdanic GmbH doo ')AND(出荷= True) – Pecurka

    関連する問題