アクセス2007 フォームでフィルタ抽出した全フィールドの書き換え
アクセスメニュー(リボン?)にある「フィルタの実行」で抽出されたデータがあるフォームです。
フィールドの値を一気に変更するスベを知らなく現在下記のようにしています。
For d = 1 To Me.Recordset.RecordCount
DoCmd.GoToRecord acDataForm, Me.Name, acGoTo, d
Me![目的のフィールド] = ”テスト”
Next
これでもできるのですが、いまいち納得しません。
もっと、スマートな方法はないですか?
抽出にはアクセスメニュー(リボン?)を使っています。
No.1
- 回答日時:
アクセス2007を触ってたことが無いので、リボンのどこかがわからないけど。
オブジェクト[クエリ]で、更新クエリを作成するのはどうでしょう?
フィルタ条件を指定して、「レコードの更新」にテストを書く。
フィルタ条件が都度異なるなら、画面からの入力も可能。
この回答への補足
申しわけありません。
良く理解できません。
SQL等の知識はほとんど無くて。
>リボンのどこかがわからないけど
アクセス本体のメニューの「フィルタの実行」(データの抽出)です。
「UPDATE」みたいなもので一括更新したいのですが・・・
No.2
- 回答日時:
データーベースを多少なりとも扱うのであれば、クエリ(SQL)の知識は必須と考えます。
既に回答がありますが、お望みのことは更新クエリでできます。
テーブル:data
条件:「条件」フィールドが"かくかくしかじか"
書き換え:[目的のフィールド ]= "テスト"
を実行する更新クエリは
UPDATE [date] SET [date].目的のフィールド = "テスト" WHERE (((date.条件)="かくかくしかじか"));
要するに UPDATE ですね。
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件位なので待ってられます。
今後もよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) テキストボックスの値をテーブルに入力したい 2 2022/06/28 12:08
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Excel(エクセル) エクセルでフィルタ後、考えている場所に値コピーができない。 1 2022/05/02 21:01
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Accessフォームで複数条件でフィールドの値を表示する方法 4 2022/07/21 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
ACCESSで、フォームで抽出した...
-
クエリ実行結果0件の場合のフ...
-
アクセスのフォームに連番を表...
-
クエリーの結果をフォームに表...
-
フォームからクエリの抽出期間...
-
ACCESS2000 抽出されたレコー...
-
ACCESS2007 マクロ クエリのパ...
-
ACCESS クエリのデザインビュ...
-
Access サブフォームでの選択行...
-
エクセルで、抽出したデータだ...
-
AccessのWHERE句において、変数...
-
X-Ripperというフリーウェアに...
-
Accessのサブフォームから値を...
-
Accessでデータを更新したらそ...
-
スクロールバーをVBAで操作したい
-
access別のテーブルを参照して...
-
ACCESS 複数のフォームから同一...
-
実行エラー'424' ????
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
ACCESSで、EXCELのような、sumi...
-
Accessクエリの抽出条件にフォ...
-
クエリ実行結果0件の場合のフ...
-
ACCESS2003のグループ化のエラ...
-
クエリーの結果をフォームに表...
-
ACCESS フォームで抽出したデー...
-
サブフォームを利用したクエリ...
-
ACCESS2007 マクロ クエリのパ...
-
access クエリでIIF文で抽出条...
-
VarChar型をINT型に変換するには
-
ADOレコードセットのコピー
-
アクセスのフォームに連番を表...
-
ACCESSで、フォームで抽出した...
-
ACCESS クエリのデザインビュ...
-
Accessで月ごとのレポートを出...
-
Accessでフィルタの実行アクシ...
-
AccessのフォームをExcelに出力
-
フォームからクエリの抽出期間...
おすすめ情報