MS ACCESS - ładowanie danych do combobox`a poprzez zapytanie SQL w VBA.

0

Hej - mam formularz, na którym znajduje się pole "kombo". Chciałbym, aby dane do tego "kombo" były wywoływane przez kod VBA (nie przez właściwości i kreator kwerend, ponieważ później będę potrzebować VBA do wykonania kilku operacji). Kod z VBA wygląda tak jak niżej wkleiłem. I fajnie, ten kod działa - tylko dla pierwszej wartości rekordu w bazie danych (chodzi mi o pierwszy wpis). Jak to naprawić?

Dim rst As Dao.Recordset
Dim strSql As String


strSql = "SELECT KartyProjektow.KP_krotkaNazwaProjektu From KartyProjektow"
Set rst = CurrentDb.OpenRecordset(strSql)

przypisanie = rst!KP_krotkaNazwaProjektu

rst.Close
Set rst = Nothing
Kombi5.RowSource = przypisanie
1

Nie bardzo widzę sens dawania recordsetu do combo, ale jak już chcesz to combo ma właściwość recordset do której możesz przypisać pobrane dane:
https://docs.microsoft.com/en-us/office/vba/api/access.combobox.recordset

Czyli u ciebie:

'zmienna na górze modułu formularza, że by była widoczna dla wszystkich funkcji/procedur:
Dim rst As Dao.Recordset

Private Sub Form_Load()

Dim strSql As String

strSql = "SELECT KartyProjektow.KP_krotkaNazwaProjektu From KartyProjektow"
Set rst = CurrentDb.OpenRecordset(strSql)

przypisanie = rst!KP_krotkaNazwaProjektu
set Kombi5.Recodset = rst

End Sub

Sub Form_Close()
rst.Close
Set rst = Nothing
End Sub

Nie wiem, czy nie łatwiej by było po prostu ustawić to w rowsource (https://docs.microsoft.com/en-us/office/vba/api/access.combobox.rowsource)

Kombi5.RowSource =  "SELECT KartyProjektow.KP_krotkaNazwaProjektu From KartyProjektow"
0

Dlaczego Form_Close() dałeś jako osobna część, a nie w Form_Load()? Prawie każdy kod, który oglądam ma to zawarte jakby w części "ładowania".

@Panczo

1

Form_close i Form_Load to dwa osobne zdarzenia formularza...
Bo przy załadowaniu formularz tworzysz obiekt rst, przy zamknięciu sprzątasz, czyli zamykasz recordset, którego użyłeś jako "źródła" kombi5

1 użytkowników online, w tym zalogowanych: 0, gości: 1