Access VBA質問箱 IV

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

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


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

【3836】コンボボックスの設定について Kirin 04/11/10(水) 17:55 質問[未読]
【3838】Re:コンボボックスの設定について クロ 04/11/11(木) 11:46 発言[未読]
【3839】Re:コンボボックスの設定について Kirin 04/11/11(木) 13:09 発言[未読]
【3840】Re:コンボボックスの設定について クロ 04/11/11(木) 13:15 回答[未読]
【3844】Re:コンボボックスの設定について Kirin 04/11/11(木) 17:49 質問[未読]
【3846】Re:コンボボックスの設定について クロ 04/11/12(金) 8:41 回答[未読]

【3836】コンボボックスの設定について
質問  Kirin  - 04/11/10(水) 17:55 -

引用なし
パスワード
   今、顧客データベースを作成しています。
個人情報を蓄積する「tbl個人情報」と、検索の為の「frm検索」フォームと、入力の為の「frm情報入力」フォームが、メインとなっています。
これ以外に、「tbl年賀」テーブルと「tbl担当者」テーブルを持っていて、下のようなリレーションで結ばれています。

[tbl個人情報]]テーブル([顧客ID]が主キー)
[顧客ID][顧客名][顧客住所][・・・etc]

[tbl担当者]テーブル([担当ID]が主キー)
[担当ID][名前]

[tbl年賀]テーブル([発送ID]が主キー)
[発送ID][顧客ID][担当ID][発送年]
⇒[担当ID][tbl年賀]と、[担当ID][tbl担当者]はりレーション
 [顧客ID][tbl年賀]と、[顧客ID][tbl個人情報]はりレーションを結び、[tbl年賀]を作る時にルックアップウィザードを使いました。

今、[frm検索」で、[tbl年賀]から、[担当]と[発送年]をコンボボックスにし、例えば「04年に担当Aさんが発送したリスト」を[tbl個人情報]から取り出して、
[frm個人情報表示]フォームに表示させたいと思っています。

ここで、[担当]コンボボックスのプロパティの「データ」/「値集合ソース」に、
SELECT [tbl担当].[担当ID], [tbl担当].[担当] FROM [tbl担当]
とすると、コンボの値には、確かに担当の名前が表示され、選ぶことはできますが、最終的に抽出をするSQLを作った時に、何の関係もなくなってしまいそうです。

[frm検索]フォームには、最終的に選んだ条件を表示させる為の「cmd表示」コマンドボタンを置き、イベントプロシージャで以下のSQLを書きましたが、
動作させると「パラメータ」値を聞いてきてエラーになり、欲しい値が抽出されません。
下に、書いてみた文をペーストしてみます。

コンボの設定と、SQLの書き方が間違っていると思うのですが、どう間違っているのか、どう直したらいいのかが全く分かりません。
長くなってしまって申し訳ありませんが、宜しくお願い致します。
-------------------------------------------------------------
Private Sub cmd表示_Click()
On Error GoTo Err_cmd表示_Click

 Dim stDocName As String
 Dim strSQL As String
 Dim strWhere As String
 
 stDocName = "frm個人情報リスト"
 
 strSQL = "select * from tbl個人情報"
 
 strWhere = ""
  
 If Not IsNull(Me.担当) Then
 strWhere = strWhere & " and 担当 = " & Me.担当
 End If
 
 If Not IsNull(Me.年) Then
 strWhere = strWhere & " and 年 = " & Me.年
 End If
 
 If Me.Check = True Then
 strWhere = strWhere & " and Check = True "
 End If
 
 If strWhere <> "" Then
 
 strWhere = Mid(strWhere, 6)
 
 If DCount("*", "[tbl個人情報]", strWhere) = 0 Then
  MsgBox ("該当データはありません。")
  Exit Sub
 End If
 
 strSQL = strSQL & " WHERE(( " & strWhere & " ));"
 
 End If
 
 DoCmd.Echo False, "個人情報リスト準備中・・・"
 
 DoCmd.OpenForm stDocName, , , , acFormReadOnly
 DoCmd.SelectObject acForm, stDocName
 DoCmd.Minimize
 
 Forms(stDocName).RecordSource = strSQL
 DoCmd.SelectObject acForm, stDocName
 DoCmd.Maximize
 
 DoCmd.Echo True
 
Exit_cmd表示_Click:
 Exit Sub
 -----------------------------------------------------------------------

Err_cmd表示_Click:
 MsgBox Err.Description
 Resume Exit_cmd表示_Click
 
 End Sub

【3838】Re:コンボボックスの設定について
発言  クロ  - 04/11/11(木) 11:46 -

引用なし
パスワード
   [担当]コンボボックスのプロパティで「連結列」が何かと
[tbl個人情報]]テーブルにある担当関係のフィールドは
「担当(氏名/テキスト型)」「担当ID(数値型)」の何れか
を教えてください。

【3839】Re:コンボボックスの設定について
発言  Kirin  - 04/11/11(木) 13:09 -

引用なし
パスワード
   ▼クロ さん:
有難うございます。

>[担当]コンボボックスのプロパティで「連結列」が何か
⇒連結列は1です。
>[tbl個人情報]]テーブルにある担当関係のフィールドは
⇒「担当ID(数値型)」で設定しています。

各テーブルのリレーションを、どう生かせば欲しい条件が出てくるのかが分からず、四苦八苦しております。
どうぞ宜しくお願い致します。

【3840】Re:コンボボックスの設定について
回答  クロ  - 04/11/11(木) 13:15 -

引用なし
パスワード
   >>[担当]コンボボックスのプロパティで「連結列」が何か
>⇒連結列は1です。

この通りならMe.担当(コンボボックス)に表示されているものが
担当者名でも1列目を引いてくるので...

<<省略>>
If Not IsNull(Me.担当) Then
 strWhere = strWhere & " and 担当 = " & Me.担当
End If
<<省略>>

の部分は

strWhere = strWhere & " and 担当ID = " & Me.担当

では?

【3844】Re:コンボボックスの設定について
質問  Kirin  - 04/11/11(木) 17:49 -

引用なし
パスワード
   ▼クロ さん:
回答、有難うございます。

>strWhere = strWhere & " and 担当ID = " & Me.担当
に直したところ、[tbl個人情報]上の[担当]フィールドを条件に検索ができるようになりました。

ですが、今行ないたいのは、
[tbl個人情報]上の[担当]から顧客リストをひっぱってくるのではなく、
[tbl年賀]上での[担当]フィールドから、例えば「04年にA担当が年賀状を出した顧客のリスト」をひっぱってきたいと思っています。
この場合、[tbl年賀]上の[担当]は、また別に[tbl年賀担当者]とでもして、担当者リストを作った方が良いのでしょうか?
ですが、ひっぱってくる顧客の個人情報は[tbl個人情報]に入っています。

今の[tbl年賀]の組み立てを再度記載します。
-------------------------------------------------------------
[tbl年賀]テーブル([発送ID]が主キー)
[発送ID][顧客ID][担当ID][発送年]
⇒[担当ID][tbl年賀]と、[担当ID][tbl担当者]はりレーション
 [顧客ID][tbl年賀]と、[顧客ID][tbl個人情報]はりレーションを結び、[tbl年賀]を作る時にルックアップウィザードを使いました。
--------------------------------------------------------------
何度も申し訳ございませんが、どうぞ宜しくお願い致します。

【3846】Re:コンボボックスの設定について
回答  クロ  - 04/11/12(金) 8:41 -

引用なし
パスワード
   抽出されるリストにどのフィールドが必要なのか分かりませんが、
取りあえずSQLはこんな感じでいいのでしょうか?
※「年」フィールドはないので「発送年」としてます。
※Checkフィールドはどのテーブルにあるのか分からないので省略
 してます。

 Dim stDocName As String
 Dim strSQL As String
 Dim strWhere As String
 
 stDocName = "frm個人情報リスト"
 
 strSQL = "SELECT tbl年賀.顧客ID," & _
        " tbl個人情報.顧客名," & _
        " tbl個人情報.顧客住所," & _
        " tbl年賀.担当ID" & _
        ", tbl年賀.発送年" & _
        " FROM tbl年賀 LEFT JOIN tbl個人情報" & _
        " ON tbl年賀.顧客ID = tbl個人情報.顧客ID"

 strWhere = ""
  
 If Not IsNull(Me.担当) Then
 strWhere = strWhere & " and tbl年賀.担当ID = " & Me.担当
 End If
 
 If Not IsNull(Me.年) Then
 strWhere = strWhere & " and tbl年賀.発送年 = " & Me.年
 End If
 
 <<省略>>

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