- ベストアンサー
DAOのrs.Filter =の使い方
Q_CCというクエリーのフィールドにIDがあります。 あるフォームのボタンのイベントプロシージャに Set db = CurrentDb() Set rs = db.OpenRecordset("Q_CC", dbOpenDynaset) rs.Filter = "ID = 'Me.メールID'" としましたけど、フィルターが働いてくれません。 " と ' の使い方がまずいと思います。 私のフォームに「メールID」というものが関連づけられていて、 このメールIDという値はMe.メールIDで求められますが、 このメールIDと同じ値のQ_CCのIDで、Q_CCにフィルタかけたい のです。 rs.Filter = "ID =" + Me.メールID としたらエラーです。 よろしくお願いします。
- hiroi
- お礼率89% (223/248)
- オフィス系ソフト
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
多分、 ID=" & Nz(Me.ID, 0) としていないことが原因です。 が、素直に、Where節を書いても事足りるのでは・・・。 Private Sub コマンド0_Click() Dim dbsCurrent As dao.Database Dim rstTest As dao.Recordset Dim strQuerySQL As String strQuerySQL = "SELECT * FROM A_Query WHERE ID=" & Nz(Me.ID, 0) Set dbsCurrent = CurrentDb Set rstTest = dbsCurrent.OpenRecordset(strQuerySQL) With rstTest Do Until .EOF Debug.Print .Fields(0) .MoveNext Loop End With rstTest.Close dbsCurrent.Close End Sub
その他の回答 (1)
- bonaron
- ベストアンサー率64% (482/745)
IDフィールドがテキスト型なら rs.Filter = "ID = '" & Me.メールID & "'" 数値型なら rs.Filter = "ID =" & Me.メールID この場合は、Me.メールID のNULL チェックが必要です。 ただし、自分が作る場合は No1さんの方法にします。 Filter にカーソルをあて、F1キーを押して ヘルプを表示すると、その理由が書かれています。
お礼
bonaronさん 早速の回答ありがとうございます。 NULLチェックですね。ヘルプをよく読んでおきます。 すみませんでした。
関連するQ&A
- ACCESS どこがおかしいのか?
ACCESSで。クエリからフォームを作成し、検索フォームを作成しようとしています。 AND条件とOR条件を作り検索(抽出)を行いたいのですが、何が間違っているのか、 検索をかけるとすべて「登録がありません」になってしまいます。 どこが間違っているのか、もしくは代替案を教えていただけますでしょうか。 以下は記述した、VBAコードです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim stFil As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Autoweb", dbOpenDynaset) 'オプションボタンで条件を選択 If 検索条件 = 1 Then rs.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else rs.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If Set rs = rs.OpenRecordset Set Me.Recordset = rs If rs.EOF = True Then MsgBox "登録がありません" Else Me.ID = rs!ID Me.案件名 = rs!案件名 Me.タイトル = rs!タイトル Me.本文 = rs!本文 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub よろしくお願いします。
- 締切済み
- オフィス系ソフト
- DAOでレコード数を取得したい(ACESSVBA)
レコードの行数は複数あるのに --------------------------------------------------------- Sub あ() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_test", dbOpenDynaset) MsgBox rs.RecordCount Set rs = Nothing Set db = Nothing End Sub --------------------------------------------------------- これでレコード数を取得しようとすると1がかえるのですが なぜレコードの行数を取得できないのでしょうか?
- ベストアンサー
- その他MS Office製品
- DAO3.6のFilterプロパティの使用方法
Windows95,Excel2000でDAO3.6のFilterプロパティを使用しようと 思います。 Filterプロパティの設定方法とOpenrecordsetのパラメータについて 教えて下さい。 RS.Filter = 抽出条件 Set TB8 = RS.OpenRecordSet() でいいのでしょうか? 宜しく御願いします。
- 締切済み
- オフィス系ソフト
- VBAのコード
参考書に従って次のようなコードを書きました。 Private Sub previewButton_Click() Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Q_ラベル印刷", dbOpenDynaset)* if me!......................以下略 *印のところで「パラメーターが少なすぎます。1を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。
- 締切済み
- その他MS Office製品
- SQLSERVERからデータを取得する方法
SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。
- ベストアンサー
- Visual Basic
- accessからsqlserverにアップサイジングしましたが,テーブ
accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?
- ベストアンサー
- SQL Server
- アクセスVBA 変数での抽出条件の書きかた
顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub
- 締切済み
- オフィス系ソフト
- AccessのフォームでAND検索
Accessで今、土地物件を検索するものを作っています。 物件はテーブルに200件くらいあります。 そのテーブルのフィールドに「土地面積(坪)」と「価格」いう名前のフィールドがあるのですが、この2つは【○○~○○】という具合にフォームでボタンを押せば範囲検索が出来るようになっています。 だけど、OR条件になってしまいます。 出来れば、それをAND条件で検索できる様にしたいのです。 ソースは今このようになっています↓↓ テキスト:「tubo1」「tubo2」「kakaku1」「kakaku2」 Private Sub コマンド55_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("物件情報", dbOpenDynaset) If tubo1 <> "" Then If tubo2 <> "" Then rs.Filter = "[土地面積(坪)] >=" & tubo1 & " And [土地面積(坪)] <=" & tubo2 Else rs.Filter = "[土地面積(坪)] =" & tubo1 End If If kin1 <> "" Then If kin2 <> "" Then rs.Filter = "[価格] >=" & kakaku1 & " And [価格] <=" & kakaku2 Else rs.Filter = "[価格] =" & kakaku1 End If End If End If Set rs = rs.OpenRecordset Set Me.Recordset = rs Me.Requery Set rs = Nothing Set db = Nothing End Sub です。宜しくお願い致します。 ちなみにAccess2007です。
- ベストアンサー
- オフィス系ソフト
- ACCESS2000でテーブルをVBAからテーブルを読み込む方法
ACCESS2000を使っています。 以下の指定をした場合、「ユーザ定義型は定義されていません」のメッセージが出て、コンパイルが通りません。 なにかインストールや設定が必要なのでしょうか? Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル名", dbopendynaset) ヘルプ等を自分なりに参照してみたのですが、わかりません。教えてください。
- ベストアンサー
- オフィス系ソフト
- dbOpenTableとdbOpenDynaset
Access2003 で開発をしています。 サブフォームで選択行のある項目の値を取得したいのですが、 下記ロジック(1)で正しく動作するアプリAと、動作しないアプリBが出てきました。 動作しないアプリは、他の行の値を取ってきてしまいます。 【ロジック(1)】 Set db = CurrentDb Set rs = db.OpenRecordset("サブフォーム用テーブル", dbOpenTable) Cnt = 1 If rs.BOF = True And rs.EOF = True Then Else Do Until Cnt = Forms![メイン]![サブフォーム].Form.CurrentRecord rs.MoveNext Cnt = Cnt + 1 Loop MsgBox ("項目1の値:" & rs![項目1]) End If 色々調べたところ、正しく動かないアプリでは、ロジックを下記(2)のように変更したら、 正しく動きました。 【ロジック(2)】 Set rs = db.OpenRecordset("サブフォーム用テーブル", dbOpenDynaset) MsgBox ("項目1の値:" & rs.Fields("項目1").Value) こちらのロジックの方が簡単なのもありますが、 テーブルをopenする際、dbOpenTable と dbOpenDynaset がありますが、 サブフォームのレコードを扱う際には、dbOpenDynaset にするべきなのでしょうか。 ロジック(1)で正しく動作していると思われるアプリAは、現在稼動中のため、 ロジックに間違いがなければそのままにしたいのですが、 ロジック(1)の dbOpenDynaset だと間違いで不具合が起きる可能性があるのでしょうか? ご教授いただければ幸いです。 よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
s_huskyさん 早速の回答ありがとうございます。 Nzでしたか。気づきませんでした。ありがとう。 また、この例文もありがとうございます。 使ってみます。 本日は、この結果を報告できませんが、明日に報告させて頂きます。よろしくお願いします。
補足
遅くなりました。検証してみました。 本当に、わざわざフィルターしなくてもWhere節にしたらいいという意味がよく分かりました。それと、Nz関数で解決出来ました。ありがとうございます。 助かりました。