2017-06-26 1 views
0

私はMS Accessを初めて使い、基本的なCRMシステムを開発しています。すべてはこれまでのところうまくいっていますが、私の頭が頭に浮かんでいるのは非常に単純な問題です...私はVBSを理解して、一般的にAccessの周りを歩いていますが、どちらの分野の専門家でもありません。アンバウンドコンボボックスを作成するのが難しい


アンバウンドコンボボックスをテーブルの他の値に基づいて特定の値に自動的に設定するにはどうすればよいですか?

私は、従業員の情報を編集するためのフォームを持っています。これには、従業員の部門と支店を入力するためのコンボボックスが含まれています。約10つの部門があり、それぞれに約5つの支店があります。

ブランチコンボボックスは、ブランチIDをtblEmployeeテーブルに保存します。これは、tblBranchテーブルのキーとして機能します。また、tblBranchテーブルにはBranchIDとDivisionIDがあり、DivisionIDはtblDivisionテーブルのキーとして使用されます。基本的にはDivision IDとDivisionNameだけです。

今のところ、Division comboboxはバインドされていません。これは、ユーザーがBranchesコンボボックスを絞り込むことができるためです。ディビジョンコンボボックスをクリックすると、このようにメニューがカスケードされますが、フォームを開くとディビジョンコンボボックスが空白になります(したがって、ブランチコンボボックスも空白になります) )。

ディビジョンコンボボックスの外観を作成してBranchIDが特定の従業員のものであることを確認してから、関連部門に事前設定しますか?

私はバインディングとイベントの両方でこれをやってみましたが、正しく動作するようにはできませんでした。

ありがとうございます!


ありがとう!嬉しいことに、私は一般的に正しい道を歩いていました。しかし、まだ動作していないのですが、私はYourEmployeeIDFieldを理解していないためだと思います。

Private Sub cboDivision_Enter() 
    Dim sql_ As String 
    sql_ = "SELECT d.Division " & _ 
      "FROM tblDivision d INNER JOIN (tblBranch b INNER JOIN tblEmployee e ON b.BranchID = e.BranchID) ON d.DivisionID = b.DivisionID " & _ 
      "WHERE e.EmployeeID=" & Me.txtEmployeeID 

    Me.cboDivision.RowSource = sql_ 
End Sub 

私は物事が誤って除外取得されていないことを確認するためにコンボボックスの選択基準を削除し、次のよう

私のコードです。

私はEmployeeID、e.EmployeeID、txtEmployeeID(フォームのフィールド)、およびMe.txtEmployeeIDを使用してみましたが、大したことはありませんでした。

RowSourceのアプローチを少し調べた後、私は正確に何が欲しいのか説明できなかったのだろうか? (または私はちょうど誤解している)コンボボックスcboDivisionには、tblDivision.Divisionが設定されています。これは必要なものです。しかし、それはバインドされていないので、レコードが自分のフォームにロードされると、cboDivisionは空白になります。バインドされたcboBranchコンボボックスに関連付けられたディビジョンを表示したい(ただし、cboDivisionをクリックすると、選択できるディビジョンの完全なリストが表示されます)。


次のように私が使用しているボタンのコードは、(それが簡略化されたSQLですが、同じ結果があなたのコードで発生)である:

Private Sub Command240_Click() 
    'Me.cboDivision.Value = 8 
    Dim sqlStr As String 
    sqlStr = "SELECT d.DivisionID" & _ 
      "FROM tblDivision d INNER JOIN tblBranch b ON b.DivisionID = d.DivisionID)" & _ 
      "WHERE b.BranchID=" & BranchID 

    Me.cboDivision.Value = sqlStr 

    MsgBox ("You clicked me.") 
End Sub 

コメントアウト「Me.cboDivision。Value = 8 "を指定すると、cboDivisionコンボボックスにDivisionID 8に関連付けられた除算が表示されますが、現在のコードでボタンをクリックすると、コンボボックスが次のように更新されます。" SELECT d.DivisionIDFROM tblDivision d INNER JOIN tblBranch B ON b.DivisionID = d.DivisionID)WHERE b.BranchID = 45"

(一部が最低限で作動されるように端部で45、レコードの正しいBranchIDである)。

+0

依存コンボボックスのRowSourceプロパティを設定するには、おそらくVBAを使用する必要があります。あなたの試みたコードを投稿してください。 – June7

+0

フィルタリングされた結果を特定のIDに取得するには、SQLに何らかのIDを指定する必要があります。フォームがバインドされている場合は 'Me!EmployeeID'を試してください。ここで' EmployeeID'はIDを保持するフィールドの名前です。 –

+0

私は今働くことの面を持っています。私は実際に何をすべきかは、cboDivisionの価値を設定することだと思います。私は、トラブルシューティングのためだけにボタンを使ってテストしています。 「Me.cboDivision.Value = 18」を使用するだけで正常に機能し、DivisionID番号18に関連付けられた部門が表示されました。しかし、私がボタンイベントで任意のSQLコードを使用しようとすると、表示される値はSQLコードです... SQLクエリへの応答ではありません。 –

答えて

0

RowSourceコンボボックスのプロパティを変更して、選択したEmployeeIDに基づいて正しい部門情報を設定する必要があります。

これはt彼コントロールのイベントを入力します。

Private Sub YourComboBoxName_Enter() 
    Dim sql_ As String 
     sql_ = "SELECT d.DivisionName " & _ 
       "FROM tblDivision d INNER JOIN (tblBranch b INNER JOIN tblEmployee e ON b.BranchID = e.BranchID) ON d.DivisionID = b.DivisionID " & _ 
       "WHERE e.EmployeeID=" & YourEmployeeIDField 

    Me.YourComboBoxName.RowSource = sql_ 
End Sub 


ComboBoxコントロールの値集合タイプは、Table/Queryに設定する必要があります。

+0

ありがとうKostas。元の質問をより詳細に更新しました。 –

0

私は何をしたいのか分かりました...私はそれを正しく説明しなかったかもしれません。私は、現在のレコードを変更するとき

Private Sub Form_Current() 
    Me.cboDivision.Value = DLookup("DivisionID", "tblBranch", "BranchID=" & BranchID) 
    Me.cboMinistry.Value = DLookup("MinistryID", "tblDivision", "DivisionID=" & Me.cboDivision) 
End Sub 

だから、それはBranchIDのバインドされた値に基づいて結合していないコンボボックスを更新します。次のように私は必要なものを行うためのコードでした。

あなたのご協力ありがとうございます。

関連する問題