VBAで変数を使ってアクセスの検索条件を表現する方法
- VBAを使用してAccessの検索条件を表現する際に、変数を使用する方法について教えてください。
- 具体的には、フォーム上のテキストボックスに入力されたテキストを検索ワードとして、レコードを抽出したいです。
- また、変数を使用してLike演算子の後ろの条件をまるごと表現したい場合に、パラメーターの入力画面が表示される問題に困っています。
- ベストアンサー
アクセス:like以下に変数を使って書くには?
アクセスで困っています。 フォーム上にテキストボックスを設置し, そのテキストを検索ワードとしてレコードを抽出しようとしています。 レコードソースに入力する方式です。 以下のコードはきちんと動作しました。 Dim KENword As String KENword = [Forms]![Fその1]![検索ボックス] Me.RecordSource = "select * FROM テーブル WHERE (名前 like '*" & KENword & "*') or (所属 like '*" & KENword & "*')" さらに,likeの後ろを丸ごと変数にしたいと思い,次のように書きました。 Dim KENword As String Dim KENlike As String KENword = [Forms]![Fその1]![検索ボックス] KENlike = "'*" & KENword & "*'" Me.RecordSource = "select * FROM テーブル WHERE (名前 like KENlike) or (所属 like KENlike)" しかしこうすると, パラメーターの入力 KENlike の画面が出てしまいます。 msgboxなども使って試したのですが, どこが間違っているか分からず困っています。 どう直せばよいのでしょうか。 教えていただけると助かります。
- gosui
- お礼率89% (26/29)
- Visual Basic
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>どこが間違っているか分からず困っています。 KENLikeが変数でなく文字列になってるからでしょう。 Me.RecordSource = "select * FROM テーブル WHERE (名前 like" & KENlike &") or (所属 like " & KENlike & ")"
関連するQ&A
- 置換変数とLIKE条件
SQL文で「SELECT * FROM テーブル名 WHERE 列名 LIKE = '&%'」で実行するとレコードは選択されませんとなり、変数をの入力もできません。 置換変数とLIKE条件は一緒に使えないのでしょうか?
- ベストアンサー
- Oracle
- MySQL WHERE句のLIKE検索
初心者ですみません。 MySQL WHERE句のLIKE検索で、引っかかった文字列を 除いた項目を表示させるにはどうしたらいいでしょうか。 例えば、 SELECT * from [テーブル名] where [フィールド名] like '%あ%'; として、「あ」が入っているレコードを検索し、 該当しないレコードを表示させる。 どうか教えてください。よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- Accessの絞りこみについて教えて下さい。
Access初心者です。顧客テーブルがあり、名前で絞りこみをかけたいのですが、エラーになってしまい困っています。 顧客テーブルからフォームを作り、フォームヘッダーにテキストボックスとボタンを作成しました。 絞り込みは苗字でもHITするようにし、テキストボックスには名前を入力、ボタンで絞り込みをかけるというかたちです。。 テキストボックス名は検索用、ボタンの名前は検索にしています。 そこで下記VBAコードを入力したところ、パラメータが出てきてしまい、絞り込み出来ません。 Private Sub 検索_Click() Me.RecordSource = "select * from 顧客リスト where 氏名 like ‘*" & 検索用 & "*’" End Sub どうしたらよいでしょうか? 教えて下さい。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- ACCESSの SELECT SUM
SELECT SUMを 計算させると ゼロしか 出てきません。 どこが悪いのでしょうか? 日付 出金 氏名 2012/12/10 540 安田 2012/12/10 1020 斉藤 2012/12/10 970 TOM 2012/12/11 650 池田 2012/12/11 2010 南 2012/12/12 350 林田 2012/12/12 1200 加藤 のようなテーブルがあり Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim gokei As Long Set Db = CurrentDb SQL = "SELECT Sum(出金) as gokei FROM テーブル WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) MsgBox gokei End Sub を フォームアルファに 新しく作ったコマンドボタンのクリック時に 書きました。 これを テキストの日付を変えておいて いろいろ試しても ゼロのメッセージしか出ません。 WHERE以下が 間違っていないか 試しに Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim Count As Long Set Db = CurrentDb SQL = "SELECT (出金) FROM テーブル WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) If rs.EOF Then Count = 0 Else rs.MoveLast Count = rs.RecordCount End If MsgBox Count End Sub を 実行すると ちゃんと 正しいレコード数が 表示されます。 「出金」のデータ型は 長整数になっています。 どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。 . . .
- 締切済み
- オフィス系ソフト
- LIKEを使用したレコード抽出について
OracleでLIKEを使用したレコード抽出で困っています。 あるテーブル(TAB_A)が以下のような属性だとします。 ------------- COL1 CHAR(5) COL2 CHAR(5) このとき、このテーブルに次のようにデータが格納されています。 COL1 COL2 -------------- ABC== 12345 [=]は便宜上1バイトスペースを表す このテーブルを対象として (1) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC%'; (2) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC=='; ([=]は便宜上1バイトスペースを表す) (3) SELECT * FROM TAB_A WHERE COL1 LIKE 'ABC'; というSQLを発行した場合に、いずれもレコードが抽出されてしまいます。(1)(2)の場合は当然だとは思うのですが、(3)でもレコードが抽出されることが理解できません。このようなことが起こり得るのでしょうか。
- 締切済み
- Oracle
- Access BetweenとLikeの組み合わせ方
Access2000(初心者) フォームで Between(指定日~指定日)の中でLike(チェック)を含まないレコードを検索削除したいです。 下記コードの場合 実行時エラー'3061': パラメータが少なすぎます。1を指定してください。 のエラーが出てしまいます。 どこを直せば良いでしょうか?宜しくお願いします。 CurrentDb.Execute "DELETE * FROM テーブル名 WHERE ([テーブル名].[日付] Between #2009/01/01# And #2009/02/02#) AND ((([テーブル名].[チェックボックス]) Like 'No')); "
- ベストアンサー
- Visual Basic
- access レコードソースを選択し、DoCmd.OpenFormする方法
Select Caseのフレームで、レコードソース(クエリ)を選択し、 そのソースを基にDoCmd.OpenFormする方法がわかりません。 よろしくお願いします。 ---------------------------------------------------- Dim strSource As String Dim Q1, Q2 As String Dim stDocName As String Dim フォーム1 As Form stDocName = "フォーム1" Q1 = "クエリ1" Q2 = "クエリ2" Select Case フレーム1 Case 1 strSource = Q1 Case 2 strSource = Q2 End Select 'stDocName.RecordSource = strSource '-----この文はこの位置でよいのでしょうか? DoCmd.OpenForm stDocName, acFormDS ---------------------------------------------------- クエリ1,クエリ2は基になるテーブルが違いますが、フィールドは同一にしてあります。 ですのでフォーム1には、対応するテキストボックスは用意してあります。
- ベストアンサー
- オフィス系ソフト
- AccessのクエリでvbLfのみ抽出するには
Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。
- ベストアンサー
- Access(アクセス)
- サブフォームに変数を代入し、RecordSourceの値を取得したい
サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
教えて頂いたものでうまくいきました。 素早くご回答いただき,ありがとうございます。 (困ったことに,ちょっと理屈が分かっていません。 likeの後ろに変数をそのまま書くと,文字列になってしまうのでしょうか? msgbox KENlike が動くので like KENlike でいいだろうと思ってしまいました。 更に, like" & KENlike &" をそのまま展開すると, like "'*" & KENword & "*'" となると思いますが, もともとのコードは 名前 like '*" & KENword & "*' だったので, なんか違うコードになっているような?? 的外れなこと言ってるかもしれません。。)