2016-09-21 7 views
0

UIと呼ばれるフォームを作成しようとしていますが、ユーザーはコンボボックスの「cmbFilter」から次元パラメータを選択し、テキストボックスに+/- "txtTererance"。リストから部品番号を選択した後、これはそのパラメータの対応関係範囲内の類似部品番号の結果を返すべきです。表のフィールド名は次元パラメータであり、フォームロードコードのコンボボックスに対する.AddItemです。SQLクエリーのフィールドセレクタとしてフォームコントロールを使用する

例。部品番号1のODは5なので、検索パラメータとして「OD」を選択し、公差を+/- 1に設定します。結果にはODが6の部品#2が表示されますが、OD#7の部品#3は表示されません。

enter image description here

私は、クエリにlistboxs行ソースを設定しているが、 は関係なく、私はこのコードの構文に変更するものを私が操作や構文エラーを取得していません。だから私はフォームコントロールの権利を参照していないと私は仮定、または私のロジックは正しくないですか?

次のコードは、アクセス時にSQLデザインビューで疲れました。私はまた、アクセス、まだVBA運でSQLコードを記述しようとしてい

SELECT Part_Matrix.Part_Number, Part_Matrix.Customer, Part_Matrix.Large_OD, Part_Matrix.Vent_Opening, & _ 
    Part_Matrix.BPT, Part_Matrix.MFT, Part_Matrix.PD, Part_Matrix.Hat_ID, Part_Matrix.Microfinish, & _ 
    Part_Matrix.Turn_Operations, Part_Matrix.Stud_Holes, Part_Matrix.SH_Dimensions, Part_Matrix.Manufacturer_Holes, & _ 
    Part_Matrix.MH_Dimensions, Part_Matrix.Other_Holes, Part_Matrix.Other_Dimension 
    FROM Part_Matrix 
    WHERE [Forms]![UI]![cmbFilter] 
    BETWEEN (((SELECT [Forms]![UI]![cmbFilter] FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) - [Forms]![UI]![txtTolerance]) 
    AND ((SELECT [Forms]![UI]![cmbFilter] FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) + [Forms]![UI]![txtTolerance])) 
ORDER BY [Forms]![UI]![cmbFilter] DESC; 

SQLは、以下のコードは、私は上記のようにその今同じロジックを知っている、単純なテキストでした。

Private Sub btnSearch_Click() 
Dim SQL As String 
If txtTolerance = "" Then 
    MsgBox ("No Tolerance Entered") 
    Exit Sub 
ElseIf cmbFilter = "" Then 
    MsgBox ("No Filter Criteria Entered") 
    Exit Sub 
Else 

    SQL = "SELECT Part_Matrix.[Part_Number], " & Me.cmbFilter & " " & _ 
    "FROM Part_Matrix" & _ 
    "ORDER BY " & Me.cmbFilter & " DESC;" 

    Debug.Print SQL 
    DoCmd.RunSQL SQL 
    lbFilterResults.RowSource = SQL 
    lbFilterResults.Requery 
End If 
End Sub 
+0

'... FROM Part_MatrixORDER BY ...'あなたのクエリの単語の間にスペースを入れておく必要があります。 –

+0

あなたはvbaで話していますか?またはクエリですか? – holi4683

+0

あなたのVBAのあなたのSQL変数の値:あなたはPart_MatrixとORDERの間にスペースを入れていません –

答えて

2

あなたはBETWEEN文で希望の値を返す代わりにSELECTのにDLookupを使用して、これを試してみてください。私は、dlookupはコンボボックスで選択したフィールドの値を返すべきだと考えています。また、同じフォームからコードを実行していると仮定してフォーム "UI"を削除するように簡略化しました。これがうまくいくかどうか私に教えてください。

intTarget = dlookup(me!CmbFilter, "PartMatrix", "Part_Number = " & me!LbSelected) 
intLower = intTarget - me!txtTolerance 
intUpper = intTarget + me!txtTolerance 

    strSQL = "SELECT * FROM Part_Matrix WHERE " & me!cmbFilter & " " & _ 
      "BETWEEN " & intLower & " AND " & intUpper 
+0

私はこれがどこに行こうとしているのですが、「クエリの式で構文エラー(演算子が見つかりません)」[Part_Number] = 01.N221.10' 01.N221.10がlbSelectedです – holi4683

+0

ああ、 'intTarget = DLookup (フォーム![UI]!cmbFilter、 "Part_Matrix"、 "Part_Matrix.Part_Number = '"&Me!lbSelected.Value& "'") 'あなたは最初と最後に '&' '"を忘れてしまいました。ご協力ありがとうございました! – holi4683

+0

ああ恐ろしい文字列と数字のID。それはうまくいってうれしい。 – geeFlo

0

BETWEENステートメントでは、表の[Large_OD]フィールドを参照し、 'S'フォームは参照しません。

すなわち

WHERE Large_OD 
    BETWEEN (((SELECT Large_OD FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) - [Forms]![UI]![txtTolerance]) 
    AND ((SELECT Large_OD FROM Part_Matrix WHERE Part_Number = [Forms]![UI]![lbSelected]) + [Forms]![UI]![txtTolerance])) 
ORDER BY " & Me.cmbFilter & " DESC; 
+0

ありがとうtechspider。このようなコードをブロックする方法を知らなかった。 – geeFlo

+0

ユーザは検索パラメータを変更しますが、必ずしもLarge_ODとは限りません。ポイントは、フィールド名がコンボボックスで選択されたのは、検索パラメータWHERE "選択された検索パラメータ"です。私が与えた例はLarge_ODでした。 Small_OD、BPT、13種類のオプションがあります。 – holi4683

+0

私は今それを得ると思います。私が今投稿した私の他の答えを見てください。 – geeFlo

関連する問題