Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1299 / 2272 ツリー ←次へ | 前へ→

【7821】非連結フォームにテーブルの値を表示させるには mho 06/5/15(月) 16:21 質問[未読]
【7823】Re:非連結フォームにテーブルの値を表示さ... 小僧 06/5/15(月) 20:44 発言[未読]
【7824】Re:非連結フォームにテーブルの値を表示さ... mho 06/5/16(火) 0:25 発言[未読]
【7827】Re:非連結フォームにテーブルの値を表示さ... 小僧 06/5/16(火) 14:30 回答[未読]
【7828】Re:非連結フォームにテーブルの値を表示さ... mho 06/5/16(火) 23:46 お礼[未読]

【7821】非連結フォームにテーブルの値を表示させ...
質問  mho  - 06/5/15(月) 16:21 -

引用なし
パスワード
   初めて投稿します。よろしくお願いします。

さて、表題の件について質問します。
非連結フォーム(frm1000_入力chk)にチェックボックスがあり、ADO接続でチェックを入れることにより、テーブル(tbl1100_入力check)にyes/noが入ります。
次回、非連結フォームを開くとき特定レコードのチェックボックス値が表示されるようにしたいのです。


テーブル名 tbl1100_入力check
 フィールド名 grade(byt),class(byte),tuki(byte),chk(bln) 
フォーム名 frm1000_入力(tbl1100_入力chkとは非連結)

'--------------------------------------------------ここから
Private Sub 月入力_AfterUpdate()
  DoCmd.Requery

  Dim db As New ADODB.Connection
  Dim rs As New ADODB.Recordset
  Dim bytRet1 As Byte
  Dim bytRet2 As Byte
  Dim bytRet3 As Byte
  Dim blnRet4 As Boolean
  
  Set db = CurrentProject.AccessConnection
  rs.Open "tbl1100_入力check", db, adOpenKeyset, adLockOptimistic
   
  bytRet1 = Forms!frm0000_menu!年入力 '別フォームで入力済みです
  bytRet2 = Forms!frm0000_menu!組入力 '別フォームで入力済みです
  bytRet3 = Forms!frm1000_入力!月入力 'frm1000_入力で入力します
  
  rs.Filter = "(Grade = " & bytRet1 & ") And (Class = " & bytRet2 & ") And (tuki = " & bytRet3 & ")"
  
  Do Until rs.EOF
    
    Me.cmdCHK = chk '<==このあたりがよくわかってません。
    rs.MoveNext
  Loop
  
  rs.Close: Set rs = Nothing
  db.Close: Set db = Nothing

End Sub
'--------------------------------------------------ここまで

【7823】Re:非連結フォームにテーブルの値を表示さ...
発言  小僧  - 06/5/15(月) 20:44 -

引用なし
パスワード
   ▼mho さん:
こんばんは。

>非連結フォームを開くとき特定レコードのチェックボックス値が
>表示されるようにしたいのです。

mhoさんが行いたい事が当方には良く解らないのですが、

>  Do Until rs.EOF
>    
>    Me.cmdCHK = chk '<==このあたりがよくわかってません。
>    rs.MoveNext
>  Loop

Loop をさせている、という事は複数レコードを検索していると思われるのですが、
対象のチェックボックスは一つなのでしょうか?

非連結のフォームである事を前提にすると、
複数のチェックボックスの値を変えるのであれば
当然複数のチェックボックスの名前が必要になってくると思われるのですが…。

【7824】Re:非連結フォームにテーブルの値を表示さ...
発言  mho  - 06/5/16(火) 0:25 -

引用なし
パスワード
   小僧さん

早速ご回答ありがとうございます。
説明不足でわかりづらく大変申し訳ありません。
もう少し詳しくご説明申し上げます。

>mhoさんが行いたい事が当方には良く解らないのですが、
>
>>  Do Until rs.EOF
>>    
>>    Me.cmdCHK = chk '<==このあたりがよくわかってません。
>>    rs.MoveNext
>>  Loop
>
>Loop をさせている、という事は複数レコードを検索していると思われるのですが、
>対象のチェックボックスは一つなのでしょうか?
>非連結のフォームである事を前提にすると、
>複数のチェックボックスの値を変えるのであれば
>当然複数のチェックボックスの名前が必要になってくると思われるのですが…。

はい、Loopをかけている対象は、複数レコードあります。

tbl1100_入力cheak というテーブルに
grade(byt),class(byte),tuki(byte),chk(bln)のフィールド名と型が用意してあり、値はgrade が1〜3、classが1〜9、tukiが1〜12で3つのキーを主キーとする、複合キーを利用し一意としています。レコード数は増減せず、chkの値だけが変化できるテーブルです。参考までに下記のようなものです。

grade class tuki  chk
 1   1  1  yes/no
 1   2  1  yes/no
 1   3  1  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 1   9  1  yes/no
 1   1  2  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 1   9  2  yes/no
 1   9  3  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 1   9  12  yes/no
 2   1  1  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 2   9  12  yes/no
 3   1  1  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 3   9  12  yes/no

このテーブルとは別にAテーブルとBテーブルが用意してあり、2つのテーブルは
code(一意)で関連づけられXクエリが作られています。

Aテーブル
code grade class  num name
1101  1   1   1 aaaa
1102  1   1   2 bbbb
1103  1   1   3 cccc
 ・  ・   ・   ・  ・
 ・  ・   ・   ・  ・
1140  1   1   40
1201  1   2   1
1202  1   2   2
1203  1   2   3
 ・  ・   ・   ・
 ・  ・   ・   ・
1240  1   2   40
1301  1   3   1
 ・  ・   ・   ・
 ・  ・   ・   ・
1940  1   9   40
2101  2   1   1
 ・  ・   ・   ・
 ・  ・   ・   ・
2940  2   9   40
3101  3   1   1
 ・  ・   ・   ・
 ・  ・   ・   ・
3940  3   9   40

Bテーブル
code tuki etc
1001  1
1001  2
1001  3
 ・  ・ 
 ・  ・
1001 12
1002  1
1002  2
 ・  ・ 
 ・  ・
1002 12
1003  1
 ・  ・ 
 ・  ・
3940 12

Xクエリは下記のように構成されています。
code grade        class       tuki        name etc
   非連結αフォーム.a  非連結αフォーム.b 非連結βフォーム.y

非連結αフォームを開き、a、bのコンボボックスからgradeとclassを選択し、コマンドボタンから非連結βフォームに移ります。βフォームではyをコンボボックスから選択しafterupdateをかけて name etc を参照、入力できるようにしてあります。
このとき、βフォームの中にcmdCHKという名前のboolenを1カ所だけ用意しておき、 grade & class & tuki に当たるテーブル(tbl1100_入力check)のyes/noにADO接続でチェックを入れられるようにしてあります。

このあとは最初の質問と同じですが、
次回、非連結フォームを開くとき特定レコード(grade & class & tuki に当たる)のチェックボックス値が表示されるようにしたいのです。

説明や設計があまりうまくなく、わかりづらくなっていますが、この設計で作りたいものですから、ご回答のほどよろしくお願いいたします。

【7827】Re:非連結フォームにテーブルの値を表示さ...
回答  小僧  - 06/5/16(火) 14:30 -

引用なし
パスワード
   ▼mho さん:
こんにちは。

>はい、Loopをかけている対象は、複数レコードあります。
>grade(byt),class(byte),tuki(byte),chk(bln)のフィールド名と型が
>用意してあり、値はgrade が1〜3、classが1〜9、tukiが1〜12で
>3つのキーを主キーとする、

主キーであるのであれば、
grage class tuki chk
1   1   1  yes
1   1   1  yes
1   1   1  no

の様な事はないんですよね?

grade と class と tuki でフィルタを掛けているのですから
結果は0件ないし1件ではないのでしょうか。


ADO に拘るのであれば、

Private Sub y_AfterUpdate()  
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim strSQL As String
  
  strSQL = "SELECT chk FROM tbl1100_入力check " _
      & "WHERE grade=" & Forms![α]![a] & " AND " _
         & "class=" & Forms![α]![b] & " AND " _
         & "tuki =" & Me.y

  Set CN = CurrentProject.Connection
  Set RS = CN.Execute(strSQL)
    Me.cmdCHK = RS![chk]
  RS.Close
  Set RS = Nothing
  CN.Close
  Set CN = Nothing
  
End Sub


特に拘らないのであれば


Private Sub y_AfterUpdate()

  Me.cmdCHK = DLookup("chk", "tbl1100_入力check", _
            "grade=" & Forms![α]![a] & " AND " _
           & "class=" & Forms![α]![b] & " AND " _
           & "tuki =" & Me.y)

EndSub

こんな感じでしょうかね…

(tbl1100_入力checkに該当データがなかった場合は考慮しておりません)

【7828】Re:非連結フォームにテーブルの値を表示さ...
お礼  mho  - 06/5/16(火) 23:46 -

引用なし
パスワード
   ▼小僧さん:
こんばんは、

>主キーであるのであれば、
>grage class tuki chk
>1   1   1  yes
>1   1   1  yes
>1   1   1  no
>
>の様な事はないんですよね?
>grade と class と tuki でフィルタを掛けているのですから
>結果は0件ないし1件ではないのでしょうか。

はい、0件ないし1件です。


>ADO に拘るのであれば、
>
>Private Sub y_AfterUpdate()  
>Dim CN As ADODB.Connection
>Dim RS As ADODB.Recordset
>Dim strSQL As String
>  
>  strSQL = "SELECT chk FROM tbl1100_入力check " _
>      & "WHERE grade=" & Forms![α]![a] & " AND " _
>         & "class=" & Forms![α]![b] & " AND " _
>         & "tuki =" & Me.y
>
>  Set CN = CurrentProject.Connection
>  Set RS = CN.Execute(strSQL)
>    Me.cmdCHK = RS![chk]
>  RS.Close
>  Set RS = Nothing
>  CN.Close
>  Set CN = Nothing
>  
>End Sub
>
>
>特に拘らないのであれば
>
>
>Private Sub y_AfterUpdate()
>
>  Me.cmdCHK = DLookup("chk", "tbl1100_入力check", _
>            "grade=" & Forms![α]![a] & " AND " _
>           & "class=" & Forms![α]![b] & " AND " _
>           & "tuki =" & Me.y)
>
>EndSub
>
>こんな感じでしょうかね…
>
>(tbl1100_入力checkに該当データがなかった場合は考慮しておりません)

ADO、DLOOKUPを早速使わせていただき、希望通りのものができました。
大変早い回答で、とてもボランティアとは思えない、親切で満足しています。
ありがとうございました。

1299 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078226
(SS)C-BOARD v3.8 is Free