三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

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

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

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

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

[試行錯誤の動画]を入れる。
www.youtube.com
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 が無かったら、
データが更新されているのに、
画面がそのままだったりして・・・・

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

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

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



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