- ベストアンサー
データベースから複数の条件を指定して抽出するには
VB初心者です。よろしくお願いします。 今、座席予約システムを作っています。その際、複数の条件を指定して、その条件に合うIDを抽出しようとしていますが、うまくいきません。具体的には、テーブル:[T-映画]の中にある、フィールド:[映画名]とフィールド:[時間帯]がそれぞれ一致したときに、同じテーブルにあるフィールド[映画ID]のデータを抽出するという処理です。 コードは次の通りです。 Private Sub Command1_Click() Dim db As ADODB.Connection Dim rst3 As ADODB.Recordset Set db = New ADODB.Connection db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source =データベースへのパス\zaseki.mdb" db.Open Set rst3 = New ADODB.Recordset rst3.Open "[T_映画]", db, adOpenKeyset, adLockReadOnly With rst3 .Filter = "映画名= ' " & Module1.mojiB & " ' " ☆☆ If .RecordCount = 0 Then MsgBox "その映画は登録されていません" Else rst3.Filter = "時間帯 =' " & Module1.mojiC & " ' " If rst3.RecordCount = 0 Then MsgBox "その映画は登録されていません" Else Module1.eigaID = rst3.Fields("映画ID") End If End If End With rst3.Close db.Close Set db = Nothing Set rst3 = Nothing End Sub ☆☆の部分で映画名があるにも関わらずカウントしてくれません。 変数Module1.mojiB には、String型の映画名が Module1.mojiC には、String型の時間帯がそれぞれ入っています。 フィールド[映画名]、[時間帯]の型はテキスト型です。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ID 映画名 時間帯 1 ローマの休日 10-12 2 ローマの休日 13-15 3 エデンの東 10-12 4 エデンの東 13-15 ? DBLookup("ID", "[T-映画]", "映画名='ローマの休日' AND 時間帯='13-15'") 2 Private Sub コマンド4_Click() Dim lngID As Long lngID = DBLookup("ID", "[T-映画]", "映画名='ローマの休日' AND 時間帯='13-15'") If lngID > 0 Then MsgBox "ID=" & ID Else MsgBox "Not found!" End If End Sub SELECT文を用いれば簡単かと思います。 バグの検証は、他の回答者の方に任せます。 Public Function DBLookup(ByVal strField As String, _ ByVal strTable As String, _ Optional ByVal strWhere As String = "", _ Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup Dim DataValue Dim strQuerySQL As String Dim rst As ADODB.Recordset Set rst = New ADODB.Recordset strQuerySQL = "SELECT " & strField & " FROM " & strTable If Len(strWhere) > 0 Then strQuerySQL = strQuerySQL & " WHERE " & strWhere End If With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then .MoveFirst DataValue = .Fields(0) End If End With Exit_DBLookup: On Error Resume Next rst.Close Set rst = Nothing DBLookup = Nz(DataValue, ReturnValue) Exit Function Err_DBLookup: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBLookup End Function
その他の回答 (2)
余計なおせっかいかもしれませんが、 実際にこのようなものを作ろうと考えておられるなら、 1、映画名を検索し、 2、該当映画タイトルを選び、 3、上映時間をリストなどに表示させ 4、該当時間を選ぶ としたほうが便利ですし、作るのも楽なような気がします。
お礼
回答ありがとうございます。 参考にさせていただきます。
- driverII
- ベストアンサー率27% (248/913)
通常、参考リンクの下のほうにあるSQLでのレコードセットの取得を使うと思います。 「SELECT * FROM 生徒名簿 WHERE クラス = 'TS'」 の部分が 「SELECT [映画ID] FROM [T_映画] WHERE [映画名] = '対象' AND [時間帯] = '対象'」 になります。 質問のコードでやる場合には、 http://www.accessclub.jp/ado/21.html のあいまい検索でチャレンジしてみてください。 ついでにこの場合Withは使わないほうが良いのでは^^
お礼
早々の回答ありがとうございました。 あいまい検索を試してみましたが駄目でした。以前、ファイルオープンする際にSQLを使用したところうまくいかなかったので、今の方法で開発を進めていきたいのですが。 何かよい方法がありましたら、教えてください。 あつかましい質問で申し訳ありません。
お礼
回答ありがとうございます。 コードまで書いていただきありがとうございます。 VB初心者なので、しっかりとコードの意味が理解できずにいます。 自作関数DBLookupをFunctionで定義し、それをコマンド4_Click() で実行しているというところまではわかるのですが、Function内でのコードがよく理解できません。実際にコードをコピーし実行したところ DBLookup = Nz(DataValue, ReturnValue)の Nz の部分でコンパイルエラーが出てしまいます。(内容はSubまたはFunctionが定義されていません とのことです。) 回答していただいたうえで恐縮ですが、質問のコードを基に(SQLを使わずに)開発を進めていきたいと思っています。 その上で何かアドバイスがありましたら、回答よろしくお願いします。