No23807.フォームでフィルタをかけてから解除した際にフィルタ実行前のレコードを表示させる方法?
| タイトル | : フォームでフィルタをかけてから解除した際にフィルタ実行前のレコードを表示させる方法? |
| 記事No | : 23807 |
| 投稿日 | : 2004/08/20(Fri) 17:05 |
| 投稿者 | : 中山 |
OS:WinXP Access Version:2003
はじめまして。 今回、掲題の件で悩んでおりいろいろ調べたのですが解決出来ず困っています・・・。 うまく説明出来ないのですが、フォーム上に1つのコントロール(テキストボックス) のデータを元にフィルターをかけるトグルボタン(押した時にボタンがへっこんで名前 が変わるようにしている為)を配置してあります。 フォームは単票形式であるレコードを表示している時にフィルター実行のボタンを押すと、 同じ店番のもののみを表示するようなフィルターをかけて、もう一度押すと解除して 全レコードを表示するようにしているのですが、 解除した時に、フィルターをかける前に表示していたレコードに戻るようにしたいのです。
現在は、先頭のレコードに戻ってしまっています。
レコードセットなどを使うのかなぁと思い、いろいろ調べたのですが、 基本的なことが理解出来ていないため、前に進めずに悩んでおります。
初歩的なことなのかもしれませんが、どなたかご教授頂けますでしょうか?
〜 記述しているコード 〜 Private Sub 店番_Click() Static sblnStartStatus As Boolean
If Not sblnStartStatus Then sblnStartStatus = True Me.店番.Caption = "絞込み解除" Me.Filter = "店舗ID =[Forms]![受付データ]![店舗ID]" Me.FilterOn = True
Else sblnStartStatus = False Me.店番.Caption = "店舗ID 絞込み" Me.FilterOn = False End If
End Sub
以上、宜しくお願いいたします。
|
| タイトル | : Re: フォームでフィルタをかけてから解除した際にフィルタ実行前のレコードを表示させる方法? |
| 記事No | : 23812 |
| 投稿日 | : 2004/08/20(Fri) 17:33 |
| 投稿者 | : Tkwan |
宣言部で Private retId As Variant
Private Sub 店番_Click() Static sblnStartStatus As Boolean
If Not sblnStartStatus Then retID = Me.Bookmark sblnStartStatus = True Me.店番.Caption = "絞込み解除" Me.Filter = "店舗ID =[Forms]![受付データ]![店舗ID]" Me.FilterOn = True Else sblnStartStatus = False Me.店番.Caption = "店舗ID 絞込み" Me.FilterOn = False Me.Bookmark = retID End If End Sub
では?
|
| タイトル | : Re^2: フォームでフィルタをかけてから解除した際にフィルタ実行前のレコードを表示させる方法? |
| 記事No | : 23817 |
| 投稿日 | : 2004/08/20(Fri) 17:52 |
| 投稿者 | : 中山 |
早速のご回答ありがとうございます。
試してみたのですが、フィルター解除をすると、
実行時エラー '3159':
ブックマークが正しくありません。
が出て、先頭レコードに戻ります・・・。
ブックマークについても調べていろいろ試してみましたが、 うまくいかないようです。
うまくいく方法はあるのでしょうか?
|
| タイトル | : Re^3: フォームでフィルタをかけてから解除した際にフィルタ実行前のレコードを表示させる方法? |
| 記事No | : 23828 |
| 投稿日 | : 2004/08/20(Fri) 21:06 |
| 投稿者 | : Tkwan |
> 試してみたのですが、フィルター解除をすると、 > 実行時エラー '3159': > ブックマークが正しくありません。 > が出て、先頭レコードに戻ります・・・。
Filterプロパティをいじると、Bookmarkプロパティも変わるみたいですね。 フォームのレコードソースの主キーフィールド名が 「ID(数値型)」 と仮定します。
Private Sub 店番_Click() Static sblnStartStatus As Boolean Static retID As Long Dim rs As DAO.Recordset
If sblnStartStatus = False Then retID = Me!ID Me.店番.Caption = "絞込み解除" Me.Filter = "店舗ID = " & [Forms]![受付データ]![店舗ID] Me.FilterOn = True Else Me.店番.Caption = "店舗ID 絞込み" Me.FilterOn = False Set rs = Me.RecordsetClone rs.FindFirst "ID = " & retID If rs.NoMatch Then Else Me.Bookmark = rs.Bookmark rs.Close: Set rs = NoThing End If End If sblnStartStatus = (sblnStartStatus = False) End Sub
でOKです。
|
| タイトル | : Re^4: フォームでフィルタをかけてから解除した際にフィルタ実行前のレコードを表示させる方法? |
| 記事No | : 23835 |
| 投稿日 | : 2004/08/21(Sat) 06:07 |
| 投稿者 | : 中山 |
出来ました! ありがとうございました。
コードを下記のように一部変更して正常に思った通りの動作となりました。
Private Sub 店番_Click() Static sblnStartStatus As Boolean Static retID As Long Dim rs As DAO.Recordset
If sblnStartStatus = False Then retID = Me!ID Me.店番.Caption = "絞込み解除" Me.Filter = "店舗ID = [Forms]![受付データ]![店舗ID]" ← ここを修正 Me.FilterOn = True Else Me.店番.Caption = "店舗ID 絞込み" Me.FilterOn = False Set rs = Me.RecordsetClone rs.FindFirst "ID = " & retID If rs.NoMatch Then Else Me.Bookmark = rs.Bookmark rs.Close: Set rs = Nothing End If End If sblnStartStatus = (sblnStartStatus = False) End Sub
どのような処理なのか、きちんと理解出来ていない部分もありますが、 理解できるよう調べてみようと思います。
大変、助かりました。 どうもありがとうございます。
|
| タイトル | : 間違っていますよ。 |
| 記事No | : 23889 |
| 投稿日 | : 2004/08/23(Mon) 12:21 |
| 投稿者 | : Tkwan |
> Me.Filter = "店舗ID = [Forms]![受付データ]![店舗ID]" ← ここを修正
↑この書き方は間違いです。修正の必要はありません。
たまたま店舗IDが数値型なのでうまく行っていますが、テキスト型のフィールドの場合は、 この書き方では、絶対に抽出はされません。
|
| タイトル | : Re: 間違っていますよ。 |
| 記事No | : 23915 |
| 投稿日 | : 2004/08/23(Mon) 14:53 |
| 投稿者 | : 中山 |
解決済みとした内容のフォローまでしてくださいましてありがとうございます。
早速、試してみましたが、 同じ処理をしているボタンが3つあり、いずれもテーブルのデータ型は「テキスト型」です。
Me.Filter = "店舗ID = " & [Forms]![受付データ]![店舗ID]
上記のコードの場合は下記のエラーで抽出がされません。
実行時エラー '2001': 直前の操作はキャンセルされました。
Me.Filter = "店舗ID = " & "[Forms]![受付データ]![店舗ID]"
上記のようにしたところうまくいくようです。
データ型は元々、”数値型”ではなく”テキスト型”のため、データ型を変えての検証は しておりませんが、どこが間違っているのでしょうか?
結果的にはお力をお借りして期待していた事が出来ているのでいいのですが、 今後の為にも少し突っ込んで勉強したいと思います。
「'」と「"」の使い方もいまいちきちんと理解していないようで・・・。
ぜひとも、教えて頂いた方法でうまくいかずちょこっと書き換えるとうまくいく理由について、 ご教授下さい。
お手数をおかけしますが、宜しくお願いします。
|
| タイトル | : Re^2: 間違っていますよ。 |
| 記事No | : 23930 |
| 投稿日 | : 2004/08/23(Mon) 15:51 |
| 投稿者 | : Tkwan |
フォームのFilterプロパティに設定する場合、 Me.Filter = "店舗ID = [Forms]![受付データ]![店舗ID]" とすると、 1.フォームのFilterプロパティに 店舗ID = [Forms]![受付データ]![店舗ID] が設定される。
2.[Forms]![受付データ]![店舗ID]を参照しに行く。
という動きのようです。 したがって中山さんの書き方で、数値型でもテキスト型でもレコードの抽出は 実行されるようです。すみません。
しかしながら、文法的には間違っていますので、SQL文の場合やレコードセットに Filterプロパティを設定する場合などは正しく抽出されないと思います。
正しい記述の仕方は、 テキスト型の場合 Me.Filter = "店舗ID ='" & [Forms]![受付データ]![店舗ID] & "'" 数値型の場合は Me.Filter = "店舗ID =" & [Forms]![受付データ]![店舗ID] です。
|
| タイトル | : Re^3: 間違っていますよ。 |
| 記事No | : 23934 |
| 投稿日 | : 2004/08/23(Mon) 16:10 |
| 投稿者 | : 中山 |
度々、ご丁寧な解説をありがとうございます。 > しかしながら、文法的には間違っていますので、SQL文の場合やレコードセットに > Filterプロパティを設定する場合などは正しく抽出されないと思います。 この部分をきちんと理解出来るよう勉強しようと思います。
今の所、正しく動いているのでよしとしますが、念のため、 > Me.Filter = "店舗ID ='" & [Forms]![受付データ]![店舗ID] & "'" 上記のように書き換えておきました。
まだまた、”文法的には”と言う部分を勉強しなくてならない事を痛感致しました。
わたしで修正してうまく動いたと言うのも、正直なところ偶然の産物のようなもので・・・。
今回は、大変お世話になりました。
これで、改めて「解決済み」と言うことで・・・。
どうもありがとうございました。 また機会がありましたら、宜しくお願い致します。
|
このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

|