三流君 ken3のmemo置き場

メモ置き場、保管庫として利用。まとまっていませんがヨロシク

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)


広告:


[記事一覧、バックナンバーを見る]

Accessの名簿データをExcelへ 1208修正・追加 3.2 チェックボックスの値が変わったら、FLG更新のSQLを実行する

1208修正・追加 3.2 チェックボックスの値が変わったら、FLG更新のSQLを実行する

チェックボックスの値が変わったら、FLG更新のSQLを実行する

もう一つの方法として、

□ALL印刷FLG
チェックボックスを1つ作成して、ヘッダーに配置します。
チェックボックスの値が変化したら(外す・付ける)、
更新のSQLを走らせる、そんな処理を作ってみたいと思います。

ア.タイミングと値の確認

まずは、タイミングを知りたいので、
フォームにチェックボックスを配置したら、
更新後の処理でテストしてみます。


Private Sub ALL印刷FLG_AfterUpdate()
    If Me.ALL印刷FLG Then
        MsgBox "on"
    Else
        MsgBox "off"
    End If
End Sub

イ.SQL文の確認 SQLピューで確認する

実行したいSQL文を確認するには(直接書ける人は必要ないのですが)
一番簡単なのが、クエリーで作成後にSQLピューを見る方法です。

SQLピュー↑で簡単に確認することができます

UPDATE 社員テーブル SET 社員テーブル.印刷FLG = Yes;

ウ.SQLの実行コマンドを調べる

次に、SQLの実行コマンドを調べたいので、
マクロでSQLの実行を1つ作り、
作成後に 名前を付けて保存 モジュール を選択してコードを作成します。

すると、下記のようなモジュールが作成されます。

'------------------------------------------------------------
' マクロ1
'
'------------------------------------------------------------
Function マクロ1()
On Error GoTo マクロ1_Err

    DoCmd.RunSQL "UPDATE 社員テーブル ", -1


マクロ1_Exit:
    Exit Function

マクロ1_Err:
    MsgBox Error$
    Resume マクロ1_Exit

End Function

ここから、DoCmd.RunSQL "SQL文"SQLを実行するVBAと知ることができます。

エ.チェックボックスのON/OffでSQL文を実行させる

やっとパーツがそろったので、チェックボックスの値が変化したら、
テーブルの印刷フラグを全て更新するSQL文を走らせたいと思います。

いきなり完成した形を書くとこんな感じです。

Private Sub ALL印刷FLG_AfterUpdate()
    
    Me.Refresh   '編集中のFLGを強制的に更新する
    DoCmd.SetWarnings False  '警告メッセージをOFFにする
    If Me.ALL印刷FLG Then    'フラグの状態によって発行するSQLを変化させる
        DoCmd.RunSQL "UPDATE 社員テーブル SET 社員テーブル.印刷FLG = Yes;", -1
    Else
        DoCmd.RunSQL "UPDATE 社員テーブル SET 社員テーブル.印刷FLG = No;", -1
    End If
    Me.Requery  '再描画を兼ねて、再クエリーでフォームデータをキレイにする

End Sub

↑さらっと、書いてるけど、いつものようにハマってます。
↓こんな感じでハマりながら、たどりつきました。

[試行錯誤の動画]を入れる。

http://www.youtube.com/watch?v=X2rUiWnLB6A

Me.Refresh が無かったら
Me.Refresh の強制更新が無かったら、

データの競合
このレコードは他のユーザーによって変更されています。[レコードの保存] を選択すると他のユーザーによる変更を無視し、自分が行った変更を反映します。

と、メッセージが表示されます。その後、

実行時エラー3197:
他のユーザーが同じデータに対して同時に変更を試みているので、プロセスが停止しました。

なんて感じになったりします。

Me.Refreshで更新してから、SQLが走ればメッセージがでません(正常に処理できます)

DoCmd.SetWarnings False が無かったら
DoCmd.SetWarnings False の警告無視が無かったら

レコードが更新されます。と親切なメッセージが表示されます。

Me.Requery が無かったら
Me.Requery が無かったら、
データが更新されているのに、
画面がそのままだったりして・・・・


たった数行のプログラムを書くのに三流プログラマーらしくハマってしまった(笑)

今回の問い合わせ2009-12-08の分は
http://ken3hitori.g.hatena.ne.jp/bbs/2/28?mode=tree
のツリーを見てください。

全体の開発の流れを見るには
http://ken3hitori.g.hatena.ne.jp/bbs/2?mode=tree
のツリーを見てください。

サンプルファイルは
Test20091208.zip 直
を保存して使ってみてください。

※少し種類が違うけど、続きは http://d.hatena.ne.jp/ken3memo/20091221/1261369986 を見てください。




三流君へ メッセージを送る

全ての質問に答えることはできませんが、
ダメもとで、気軽に質問、感想、メッセージを送ってくださいね・・・

感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)
例:[XXXXさんへ回答例]←みたいに回答していたり...


Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)