
アクセス2007 フォームでフィルタ抽出した全フィールドの書き換え
アクセスメニュー(リボン?)にある「フィルタの実行」で抽出されたデータがあるフォームです。
フィールドの値を一気に変更するスベを知らなく現在下記のようにしています。
For d = 1 To Me.Recordset.RecordCount
DoCmd.GoToRecord acDataForm, Me.Name, acGoTo, d
Me![目的のフィールド] = ”テスト”
Next
これでもできるのですが、いまいち納得しません。
もっと、スマートな方法はないですか?
抽出にはアクセスメニュー(リボン?)を使っています。
No.3ベストアンサー
- 回答日時:
動くのならそのままでも良いような気がしますが。
メニュー等をいじって抽出条件を設定した場合、
条件文は Me.Filter に設定されるようです。(使って見た感じでは)
UPDATE する際の WHERE 部分は、フォームに設定したレコードソース内の条件と
Me.Filter の条件を加味した作りにする必要があると思います。
例えば、レコードソース内の条件に 品番 = '0001' があり、
メニュー操作等で [工場ID] が 3と5だけ、の条件を設定すると Me.Filter の中身は
"[フォーム名].[工場ID] In (3,5)"
とか
[フォーム名] のところは、レコードソースに
テーブル「TblA」と記述していれば [TblA] に
クエリ「Q_XXX」と記述して入れば [Q_XXX] に
SELECT ・・・・ と記述していれば [フォーム名] とかに置き換わるようです(?)が。
詳細はわかりません。嘘かも知れません。資料を探してみてください。
条件設定後、For のところで止めて、Me.Filter を覗いてみてください。
で、UPDATE で条件指定する時には、
品番 = '0001' AND [工場ID] In (3,5)
などに加工しないといけないような気がします。
条件の参照先にフォームのコントロールを指定していたら、ますます複雑になるのでしょうか。
表示している中での変更と思うので、表示しているレコード分回る処理の方が楽なような気がします。
(件数にもよるとは思いますが、後は処理時間との兼ね合いになると思います)
DoCmd を使わない方法は以下の様になるのでしょうか。
If (Me.Dirty = False) Then
If (Me.Recordset.RecordCount > 0) Then
Me.Painting = False
With Me.Recordset
.MoveFirst
While (Not .EOF)
.Edit
.Fields("目的のフィールド") = "テスト"
.Update
.MoveNext
Wend
End With
Me.Requery
Me.Painting = True
End If
End If
レコードが編集中ならやらない。
くるくる回って処理している時は画面表示を抑止する。
おかしなところはドンドン修正してください。
後は、メニュー側のフィルタを操作させないようにして、フォームにフィルタ指定/設定用のコントロールを配置すると、条件作成は若干楽になるのでしょうか。
>条件文は Me.Filter に設定されるようです
はい、なのです。
FilterOnがTrueでもFlaseでもFilter文は残ったままですし、「フィルタの実行」を連続クリックすると、1回目がTrue2回目もTrue3回目からFalseと交互にでした。
メニュー側のフィルタを使用するので、使用者によりどんな条件文が入るのか予想できず、そこからWHERE文に直すのに苦労してました。
>フォームにフィルタ指定/設定用のコントロールを配置すると・・・
なるべく楽しようしていますので、現在予定はありません。
>動くのならそのままでも良いような気がしますが
はい、このままにします。
でも、ご回答にあった「コード」。とてもいいです。
回転時間がない分かなり速くなりました。
そっくりそのまま使わせて頂きます。
>Me.Painting = False
こんなのあるとは、知りませんでした。
ご指導ありがとうございました。
No.4
- 回答日時:
#3です
> >動くのならそのままでも良いような気がしますが
> はい、このままにします。
動くという意味の中には、苦もなく応答が待てる、ということも含まれます。
> でも、ご回答にあった「コード」。とてもいいです。
> 回転時間がない分かなり速くなりました。
While 部分でレコード数分1つ1つ処理しています。
.MoveFirst で先頭に移動し、レコードを更新したら、.MoveNext で次のレコードに。
最後を処理するまで繰り返します。
はい、ありがとうございます。
このテーブルのレコード数は多くて2000件位なので待ってられます。
今後もよろしくお願い致します。

No.2
- 回答日時:
データーベースを多少なりとも扱うのであれば、クエリ(SQL)の知識は必須と考えます。
既に回答がありますが、お望みのことは更新クエリでできます。
テーブル:data
条件:「条件」フィールドが"かくかくしかじか"
書き換え:[目的のフィールド ]= "テスト"
を実行する更新クエリは
UPDATE [date] SET [date].目的のフィールド = "テスト" WHERE (((date.条件)="かくかくしかじか"));
要するに UPDATE ですね。
No.1
- 回答日時:
アクセス2007を触ってたことが無いので、リボンのどこかがわからないけど。
オブジェクト[クエリ]で、更新クエリを作成するのはどうでしょう?
フィルタ条件を指定して、「レコードの更新」にテストを書く。
フィルタ条件が都度異なるなら、画面からの入力も可能。
この回答への補足
申しわけありません。
良く理解できません。
SQL等の知識はほとんど無くて。
>リボンのどこかがわからないけど
アクセス本体のメニューの「フィルタの実行」(データの抽出)です。
「UPDATE」みたいなもので一括更新したいのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
クエリ実行結果0件の場合のフ...
-
ACCESSで、フォームで抽出した...
-
ACCESSで、EXCELのような、sumi...
-
ACCESS フォームで抽出したデー...
-
Accessでフィルタの実行アクシ...
-
サブフォームを利用したクエリ...
-
access クエリでIIF文で抽出条...
-
ADOレコードセットのコピー
-
Access2016埋め込みマクロでの...
-
エクセルで、抽出したデータだ...
-
Access サブフォームでの選択行...
-
Access 複数フォームを...
-
access サブフォームにリストを...
-
入力した値をコンボボックスに...
-
サブフォームでのダブルクリッ...
-
未審査請求包袋抽出表作成とは...
-
前のレコードの値を自動で入れたい
-
PDFファイル/抽出許可され...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
クエリ実行結果0件の場合のフ...
-
AccessでIDを入力したら他の項...
-
ACCESS2007 マクロ クエリのパ...
-
ACCESSで、EXCELのような、sumi...
-
Accessでフィルタの実行アクシ...
-
アクセスのフォームに連番を表...
-
クエリーの結果をフォームに表...
-
サブフォームを利用したクエリ...
-
VarChar型をINT型に変換するには
-
ACCESS フォームで抽出したデー...
-
ACCESS2003のグループ化のエラ...
-
アクセスのパラメータクエリを...
-
Access 抽出したフォームをフ...
-
ACCESSのレポートにフォームの...
-
Accessのフォームで・・・
-
accessでパラメータをフォーム...
-
アクセスで期間を指定しての抽...
-
【Access2000】レコードの抽出方法
-
ACCESS97でデータ管理をしたい
おすすめ情報