2017-05-04 13 views
1

こんにちは皆さんは、別のコンボボックスが選択されているときにソートするComboBoxを取得するのに問題があります。 私は正しいSQL構文を持っていると思うが、私はそれを実行するvbaを得ることができない。現在、vbaは会社に関係なくレコードセット内のすべての州を返します。他のComboBox、VBAからComboBoxを読み込んでソートする

Private Sub CboCountry_Click() 
Set db = CurrentDb 
Dim SQLStr As String 

Set RsState = db.OpenRecordset("T2States", dbOpenSnapshot, dbSeeChanges) 

'populates combobox with recordset, that is defined by the country input from the form 

RsState.MoveFirst 
Do While Not RsState.EOF 
    Me.CboState.RowSource = Me.CboState.RowSource & RsState("StateID") & ";" & RsState("State") & ";" 
    RsState.MoveNext 
Loop 

これは正しいSQL文字列だと思いますが、問題なく動作するようになっています。

'SQLStr = "SELECT T2States.StateID, T2States.States, T2States.CountryID" & _ 
      " FROM T2States GROUP BY T2States.StatesID" & _ 
      " WHERE T2States.CountryID = """ & Me.CboCountry.Value & """" 

ご協力いただければ幸いです。

編集#1 SQLStrをOpenrecordsetに置き換えたときにポップアップするエラーは、実行時エラー '3078'です。Microsoft Accessデータベースエンジンは、入力テーブルまたはクエリ 'SQLStr'を見つけることができません。それが存在し、その名前が正しく綴られていることを確認してください。 国がCboCountryのコンボボックスから選択されたときに何が起こるはずですが、それはCountryID

でレコードをソートすることによってCboStateコンボボックスをロードしますされ、私たちは
1を見てみましょう

Private Sub Form_Load() 

Set db = CurrentDb 
Set RsCompany = db.OpenRecordset("T1Company", dbOpenDynaset, dbSeeChanges) 
Set RsCountry = db.OpenRecordset("T2Countries", dbOpenSnapshot, dbSeeChanges) 
Set RsAddress = db.OpenRecordset("T1Addresses", dbOpenDynaset, dbSeeChanges) 
Set RsAddressType = db.OpenRecordset("T2AddressType", dbOpenSnapshot, dbSeeChanges) 
Set RsCompanyAddress = db.OpenRecordset("T3Company_Address", dbOpenDynaset, dbSeeChanges) 

Me.CboCountry = Null 
Me.TxtAddress1 = Null 
Me.TxtAddress2 = Null 
Me.TxtAddress3 = Null 
Me.TxtCity = Null 
Me.CboAddressType = Null 
Me.CboCountry = Null 
Me.CboState = Null 
Me.TxtPostalCode = Null 
Me.TxtCompanyID = Null 
Me.TxtLegalName = Null 
Me.TxtNickname = Null 
Me.TxtAddressID = Null 

    RsCountry.MoveFirst 
    Do While Not RsCountry.EOF 
     Me.CboCountry.RowSource = Me.CboCountry.RowSource & RsCountry("CountryID") & ";" & RsCountry("Country") & ";" 
     RsCountry.MoveNext 
    Loop 

    RsAddressType.MoveFirst 
    Do While Not RsAddressType.EOF 
     Me.CboAddressType.RowSource = Me.CboAddressType.RowSource & RsAddressType("AddressTypeID") & ";" & RsAddressType("AddressType") & ";" 
     RsAddressType.MoveNext 
    Loop 
Me.TxtLegalName.SetFocus 

End Sub 



Private Sub CboCountry_Click() 
Set db = CurrentDb 
Dim SQLStr As String 

'SQLStr = "SELECT T2States.StateID, T2States.State, T2States.CountryID" & _ 
      " FROM T2States" & _ 
      " WHERE T2States.CountryID = """ & Me.CboCountry.Value & """" 

Set RsState = db.OpenRecordset("T2States", dbOpenDynaset, dbSeeChanges) 

    'populates combobox with recordset, that is defined by the country input from the form 

    RsState.MoveFirst 
    Do While Not RsState.EOF 
     Me.CboState.RowSource = Me.CboState.RowSource & RsState("StateID") & ";" & RsState("State") & ";" 
     RsState.MoveNext 
    Loop 

End Sub 

答えて

0


両方のコード部分については下記をご覧ください - あなたは

Having T2States.States, T2States.CountryID 


2 - エラーで追加それに存在するとき、列名に余分な「S」:

GROUP BY T2States.StatesID 


3つのコードをすべて入れておきます。


よろしく

+1

CboCountryが初期化されたフォームロードでEdit#1が該当するコードを参照してください.CboStateをロードするコンボボックスからCountryを選択すると、実行時エラーが発生します。 –

0

は、この1つは、行ソースの種類は、「値」から「テーブル/クエリ」に戻って変更する必要がありました[データ]タブの下のプロパティシートでクイックフィックスであることが判明しました。

これを説明できるVBAがありますが、その行ソースを変更するだけで簡単でした。

私はコンボボックスがバインドされておらず、それらをVBAレコードセットでバインドしていたので、rowsourceが値リストでなければなりません。それがロードされるたびにリストを書いています。

私はレコードセットを生成するためにSQLを使い始めましたが、VBAにあったとしてもプロパティをTable/Queryに戻す必要がありました。

ありがとうございました。

関連する問題