MS Access - automatyczne uzupełnianie pól w formularzu.

0

Szukam jakiś rad dla mnie - nie potrzebuję gotowego rozwiązania, lecz rozwiązanie doradcze - podobny przypadek, samouczek na youtube lub prosty przykład.

Przygotowałem tabelę z trzema polami (ID, zadanie, data zadania). Dodatkowo przygotowałem formularz, który jest widoczny na załączonym zdjęciu.
Mam zapytanie, które wygląda tak:

SELECT task, taskDate FROM ex_table;

Zwraca ono następujące wyniki:

1, RED, 01.01.1900
2, BLUE, 02.01.1900
3, YELLOW, 01.11.1900
4, WHITE, 01.01.1911

Jak napisać pętle, która będzie działać w następujący sposób: każda kolejna linia wynikowa trafia do kolejnego wolnego pola na formularzu (w moim przypadku RED oraz 01.01.1900 powinno trafić do pól oznaczonych '1' - ID tutaj sobie darujemy, kolejne wyniki czyli BLUE w polach oznaczonych 2 itd.). W obecnym rozwiązaniu pola oznaczone numerkami 5 i 6 będą widoczne na formularzu, ale będą po prostu puste.

Pytam o pętle, ponieważ zapytanie raz zwraca 5 wyników, a innym razem 12, a czasami nawet 20.

PS. Pętla (zapytanie) nie zwróci więcej niż 20 rekordów, statycznych pól na formularzu będzie właśnie 20.

1

Pętla w ten deseń:

Public Function FillFields()

Dim counter
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT task, taskDate FROM ex_table")

counter = 1
If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst
    Do Until rs.EOF = True

        task[counter].value = rs!task           
        date[counter].value = rs!taskDate 

       counter = counter +1

        rs.MoveNext
    Loop
Else
    MsgBox "There are no records in the recordset."
End If

Tą część "task[counter]" musisz wygooglać albo nawet lepiej poszukać tu ... jestem na 90% pewien, że chyba @Panczo pokazywał jak użyć dynamicznie zbudowanej nazwy pola (nawet czasami nie Tobie właśnie o tym mówił ? ) .
Oczywiście chodzi o to żebyś miał pola na formularzu nazwane w rodzaj task1, task2, task3 (i odpowiednio dla date)

2

Nie wiem po czym rozpoznajesz do jakiej kontrolki ma trafić konkretny task, ale jak pisal @BlackBad to w pętli możesz przypisywać:

Public Function FillFields()

Dim ctrlName as String
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT task, taskDate FROM ex_table")

If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst
    Do Until rs.EOF = True

       ' tutaj trzeba umiescić nazwę kontrolki do zmiennej ctrlName
       ctrlName = "nazwa tekst boxa do ktorego wstawiamy wartośc"

       me.controls(ctrlName).Value = rs!taskDate 

        rs.MoveNext
    Loop
Else
    MsgBox "There are no records in the recordset."
End If

Na marginesie napisze tylko, że skoro tych wczytywanych wlasciwości jest dynamiczba ilość, to uzyj podformularza aby je pokazać, bo jak dojdzie Ci 21 to nie bedziesz musial przebudowywać formularz i zmieniać kodu

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