2017-05-04 164 views
1

嗨每個人我都遇到麻煩,當另一個組合框被選中時,要排序組合框。 我認爲我有正確的SQL語法,但我似乎不能讓vba運行它;目前vba會返回記錄集中的所有狀態,而不考慮公司。從另一個組合框,VBA填充和排序組合框

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組合框

請參閱下面的兩個部分代碼

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


讓我們來看看
1 - 確保你與

Having T2States.States, T2States.CountryID 


2 - 錯誤附加在它存在的,額外的「中列名:

GROUP BY T2States.StatesID 


3把所有的代碼,我會檢查你與你想念。


問候

+1

請參閱編輯#1,這些是適用的代碼,在表單加載CboCountry被初始化後,一旦從組合框中選擇Country,它應該加載CboState,但是我得到運行時錯誤。 –

0

這一次竟然是在數據選項卡下的屬性錶速戰速決,行來源類型必須從一個「值」改回「表/查詢」。

有VBA可以解釋這一點,但它只是一個簡單的改變行來源。

混淆的原因,如果有幫助的話,稍微介紹一下背景是,我所有的組合框都是未綁定的,我用VBA記錄集綁定了它們,所以行源必須是值列表 - 實質上VBA每次加載時都要寫清單。

當我開始使用SQL生成記錄集時,即使它在VBA中,我也必須將屬性更改回Table/Query。

謝謝。