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

Odpowiedz Nowy wątek
2019-06-05 20:12
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.

Pozostało 580 znaków

2019-06-06 07:51
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)

Pozostało 580 znaków

2019-06-06 10:54
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

O to to "me.controls(ctrlName).Value = rs!taskDate " mi właśnie chodziło ;) Co do "jakiej kontrolki jaki task" to chyba po tym ID co ma też w tabeli czyli w sumie można zbudować nazwę po tym ID. Ale, że OP chciał tylko nakierowania to niech już dalej kombinuje ;) - BlackBad 2019-06-06 11:01
@BlackBad: jak widzę id na bazie to raczej cięzko mi sobie wyobrazić bez zlozonego klucza, ze to może być rozwiazanie do znalezienia kontrolki ;) - Panczo 2019-06-06 11:32

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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