
やりたい事は、選択したら対象レコードの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」かは関係なくなりますね。


