konto usunięte

Temat: Wybieranie danych - wielowariantowe

Witam,

Załóżmy (dla sporego uproszczenia), że w bazie są 2 tabele:
- samochody
oraz
- awarie

Na polu formularza są dwa elementy, do których zaczytywane są dane z w/w tabel, tzn.:
- pole kombi - w którym pokazywane są samochody
- pole listy - w którym są awarie (pole listy z możliwością wielokrotnego wyboru)

I teraz:
Użytkownik chce mieć możliwość, aby zaznaczyć sobie za pomocą myszki w formantce pole listy, kilka (dowolnych) awarii (np. awaria5, awaria1 , awaria10, awaria7) oraz w polu kombi jakiś jeden samochód.
Następnie chce (użytkownik), aby w raporcie pokazało właśnie te zaznaczone awarie jakie miał samochód na przestrzeni np. roku czasu.
Zaznaczam, że mają to być zupełnie różne awarie oraz ich dowolna ilość (np. pokaż awarie 1, 3, 5 dla auta X albo pokaż awarie 6, 2, 8, 4 dla auta X).
Jak to najprościej zrobić ?
Jak mam podać kryteria wyszukiwania w kwerendzie przy założeniu, że mogą to być dowolne awarie w dowolnej ilości ... ?

Pozdrawiam

Temat: Wybieranie danych - wielowariantowe

Dzień dobry,

W bardzo dużym uproszczeniu.

Generalnie potrzebujesz tabeli wiele-do-wielu.
Przy założeniu, że masz:
1. Tabele Samochody (ID_samochodu, Nazwa, etc, etc)
2. Tabele Rodzaje_Awarii (ID_Awarii, Nazwa_Awarii)

Wystarczy dodać tylko jeszcze jedną tabelę, która będzie przechowywać dane o przypisaniu, o strukturze: ID_Samochodu, ID_Awarii, Data_Zgloszenia

Jeżeli chodzi o zapisywanie danych.

1. Potrzebna jest funkcja do zapisywania rekordu
 Pubic Function ZapiszAwarie (Byref ID_samochodu as long, ByRef ID_Awarii as long) as boolean
on error goto err_Blad
dim rs as dao.recordset

set rs =currentdb.openrecordset("tblPrzypisanieAwarii", dbopendynaset, dbseechanges)
'Wypadałoby wprowadzic jakąs weryfikację tutaj
with rs
.addnew
![ID_Samochodu]=ID_Samochodu
![ID_Awarii]=ID_Awarii
![Data_Zgloszenia]=Now
.Update
.close
end with

ZapiszAwarie=true

err_Blad:

if not rs is nothing then
set rs=nothing
end if

koniec:
on error goto 0
end function

2.Potrzebujesz kodu (pętli), która zapisze ci tyle razy rekord ile jest w zaznaczeniu w polu listy. Oczywiście procedura odnosi sie do formularza w którym chcesz robić przypisanie.
sub ZapiszWskazania()
dim x
'Pole listy z awariami nazywa sie lstListaAwarii
'Pole kombi z samochodem nazywa sie cboSamochod
'ID dla rekordów pola kombi i pola listy jest w pierwszej kolumnie

DoCmd.Echo False
for each x in me.lstListaAwarii.itemsselected
if not ZapiszAwarie (clng(me.cboSamochod.column(0)),clng(me.lstListaAwarii.itemdata(x))) then
msgbox "Niezapisana awaria"
else
Me.lstListaAwarii.Selected(x) = False
end if
next x

DoCmd.Echo true
end sub

Nie zapominaj że lista musi mieć zrobiony wielokrotny wybór (nie ważnie czy prosty czy złożony).

Raportowanie
Wystarczy zrobić sobie jakąś prostą kwerendę, która ograniczy Ci rekordy do wskazanego zakresu.

Edit:
https://1drv.ms/u/s!AttmjDiVAHWDtQJUk4L6ApAp52wW?e=tfn9pf
x musi byc Variant'em
Pozdrawiam.Ten post został edytowany przez Autora dnia 20.01.21 o godzinie 18:57

Następna dyskusja:

zawezenie zakresu danych w ...




Wyślij zaproszenie do