2016-10-13 8 views
1

私は(c1という名前の)テキストボックスとボタンを持つフォームを持つAccessデータベースを持っています。ボタンをクリックすると、情報がテキストボックス値でフィルタリングされたデータシートフォームが開きます。クエリに複数の値を持つテキストボックスにアクセス

ボタンVBAは次のようになります。

c1.Value = Replace(c1.Value, ",", " Or ") 
DoCmd.OpenForm ("dsForm") 

データシートの後ろのクエリがデザインビューで次のようなものになります。

Field:  Name1 | Name2 
Criteria:   | Like [Forms]![Menu]![c1].[value] 

をこれには、私はこの後の結果をエクスポートすることができています優れたクエリ。

私の問題は、テキストボックスに値を入力し、コンマで区切ります。後でカンマで区切りますなぜ1つのテキストボックスでこれをやっているのかというと、私が検索したい値がたくさんあるからです。

これは、テキストボックスに1つの値を入力すると機能しますが、2つの値を入力すると機能しません。私はかなりクエリが完全なステートメントを文字列として取っていると確信しています。たとえば110,220と入力すると「110」や「220」のようになりますが、クエリでは「110または220」のようになります。

フィールドを文字列または数字に設定してみました。 vbaのクエリの基準をどのように操作するのですか?

Sub y() 
a = "a,b,c,d" 

'Split into 1d Array 
b = Split(a, ",", , vbTextCompare) 

For c = 0 To UBound(b) 
    Debug.Print b(c) 
Next c 

End Sub 

あなたはのDebug.Printループのように配列をループすることができますし、個別にそれぞれの値を使用します。

答えて

0

実は私の第一の方法は、このような配列に値を読んで、ひどいものでした。

1

ORの代わりにINステートメントを使用してSQL文字列を作成し、OpenArgsイベントを使用してメインフォームからデータシートフォームにデータを渡すことをお勧めします。

メインフォームのボタンのコード

Dim sql as String 

sql = "Select * From [table name] Where Name2 IN (" & c1 & ")" 
DoCmd.OpenForm "dsForm", acFormDS, , , , , sql 

データシートフォーム(dsForm)コード - Form_Loadイベントを使用します。

Private Sub Form_Load() 
    Me.RecordSource = Me.OpenArgs 
End Sub 

カンマを使用できます。 OpenArgsイベントを使用すると、あるフォームから別のフォームに値を渡すことができます。

+1

なぜ "sql =" WHERE Name2を( "&c1&") "'にしてから 'DoCmd.openform" dsform "、acformDS、sql'を使ってSQLステートメントを置くことができませんでしたすべきだ。次に、あなたはopenargsを渡す必要はありませんし、他の形式のレコードソースステートメントを使用する必要はありません。 – geeFlo

+0

@geeFloあなたは正しいです、それは状況にさらに適しています。適切な言葉遣いは "WHERE"予約語なしで行われます。 'sql = Name2 in( "&c1&") "' –

関連する問題