やりたい事は、選択したら対象レコードのflagフィールドだけに「1」が代入され、他のレコードのフィールドは「0」になるという動作をさせたいだけのシンプルな事です。
Accessのデザインモードで、チェックボックスやラジオボタンというパーツがありますが、今一つ欲しい機能ができなかったので自分でコードを書いてみました。
複数選択不可にするには?
ちょっとラジオボタンの使い方が分からなかったので、チェックボックスで動作確認をすることにしました。
実際にチェックを入れると、flagフィールドに「-1」が代入されるようです。
チェックを外すと、「0」が代入されました。
この状態ですと、
ココがポイント
複数選択が可能な状態
です。
では、複数選択させたくない場合は?
ココがポイント
他のレコードのflagフィールドの値を「0」にする
だけですね。
チェックボックスを使わないでやる
もちろん、チェックボックスを使った複数選択不可も、これから下記に書くような事をすれば可能になりますが、ボタンを大きくしたかったので、「設定」というボタンをクリックしたら、他のレコードのflagフィールドを「0」にしてから、対象レコードflagに「1」が入力されるというコードを作成してみました。
Private Sub txt_set_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command Dim SQL As String On Error GoTo ErrRtn Set cn = CurrentProject.Connection Set cmd = New ADODB.Command cmd.ActiveConnection = cn cn.BeginTrans SQL = "UPDATE dbo_fba SET dbo_fba.flag = 0 WHERE '*' " cmd.CommandText = SQL cmd.Execute cn.CommitTrans Set cmd = Nothing cn.close: Set cn = Nothing ExitErrRtn: flag = 1 DoCmd.ShowAllRecords Exit Sub ErrRtn: MsgBox "失敗しました。再度実行してください。: " & Err.Description cn.RollbackTrans Set cmd = Nothing cn.close: Set cn = Nothing End End Sub
選択されたことを分かりやすく表示
人間が選択する作業なので、flagフィールドに「0」とか「1」とかを見て判断するのは親切ではありません。
そこで、もっとわかりやすく表示させるために、
ココがおすすめ
非連結のテキストボックスを使ってわかりやすく表示機能を実装
しました。
非連結のテキストボックスを設置したら、コントロールには、
=”設定中”
というように、表示させたい文字を入れます。
また、選択されてない時には、何も表示させたくないので、枠線も透明にしました。
次に、条件付き書式設定にて、flagの内容によって背景となじませて表示無にする場合と、赤背景に白文字で目立つようにする設定をしました。
これで、設定ボタンをクリックした時のレコードだけ「設定中」と表示されることになりました。
あとは、flagのテキストボックスを非表示にしておけば、人間からすれば、「0」か「1」かは関係なくなりますね。