- ベストアンサー
accessの検索で・・・
お世話になっております。 今、OfficeXPで、Accessを使ってデータベースを作っています。 そこで、フィルタについて教えていただけないでしょうか(TへT) まずは、こんな感じでVBAを書いてみたのですが・・・ Private Sub kensaku_Click() Dim rsql1 As String Dim rsql2 As String Dim keys As String keys = InputBox("キーワードを入力してください", "キーワード検索") If keys = "" Then Exit Sub End If rsql1 = "select tel from master where dairi_code = keys" rsql2 = "select tel2 from master where contact_tel = keys" If rsql1 <> "" Then Me.Filter = "tel = '" & keys & "'" Me.FilterOn = True DoCmd.OpenForm "form_tel", acNormal, , "[tel] = '#" & key & "#'", acFormEdit, acDialog ElseIf rsql2 <> "" Then Me.Filter = "tel2 = '" & keys & "'" Me.FilterOn = True DoCmd.OpenForm "form_tel2", acNormal, , "[tel2] = '#" & key & "#'", acFormEdit, acDialog Else: MsgBox "該当するデータはありません", vbOKOnly End If End Sub と、いう感じです。 したいことは、2つのそれぞれのテーブルに検索をかけ、一致したのがあったらそれに対応するフォームを開くと言う感じにしたいです。 ロジック的に穴がありすぎると思いますが、どうかよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 まず、keysはテーブルのどのフィールドに対する検索キーワードなんですか。 rsql1では[dairi_code]なのに、フィルタでは[tel]になっているし。(rsql2でも同じ) それから、OpenFormの中にいきなり"key"というのが出てきますが、これは、"keys"とは違うのでしょうか。 また、keyは"#"で括っているので日付のようですが、どういうことでしょうか。 あと、フォームを開くときにフィルタをかける場合は、OpenFormメソッドの第3引数にフィルタ式を設定出来るので、Filterプロパティを使用する必要はありません。2重になります。 あと、ある検索条件に一致するデータの個数を数える関数に、DCount関数があります。 上記のようにどのフィールドで検索したいのかいまいちわからないので、だいたいで書くと次のようになります。 Dim Count1 As Long Dim Count2 As Long Dim keys As String keys = InputBox("キーワードを入力してください", "キーワード検索") If keys = "" Then Exit Sub End If Count1 = DCount("tel", "master", "dairi_code = '" & keys & "'") Count2 = DCount("tel2", "master", "contact_tel = '" & keys & "'") If Count1 <> 0 Then DoCmd.OpenForm "form_tel", acNormal, , "dairi_code = '" & keys & "'", acFormEdit, acDialog ElseIf Count2 <> 0 Then DoCmd.OpenForm "form_tel2", acNormal, , "contact_tel = '" & keys & "'", acFormEdit, acDialog Else MsgBox "該当するデータはありません", vbOKOnly End If とにかく、どのフィールドを検索したいのかをはっきりさせて下さい。 では。
その他の回答 (1)
- oka123
- ベストアンサー率31% (69/219)
こんにちわ 根本的原因かどうかは わかりませんが >If rsql1 <> "" Then の命令文は If IsNull(rsql1) Then としたほうがいいと思います If rsql1 <> "" Then というようなNULL検出構文はなぜかうまく働かない という経験が私にはあります また >If keys = "" Then > Exit Sub >End If のところも If IsNull(keys) Then Exit Sub End If としたほうがいいと思います
お礼
ありがとうございます。 できました(^^ DCountを使うのですね(^^; これからも何かございましたらよろしくお願いいたしますm(_ _)m
補足
なんか、ごちゃごちゃしてしまい申し訳ございません。 私がしたいことは、「keys」というところに検索したいキーワードを入力して、2つの別テーブルに検索をかけてみるということです。 ですので、「dairi_code」と「conact_tel」はそれぞれ、「tel」と「tel2」となります。 なにせ、会社でのデータベースなので直に載せてしまうのはまずいとおもいかえたのですが・・・・汗 でも、早いご回答ありがとうございます。 早速修正してチャレンジしてみます。 また何かございましたらよろしくお願いいたします。