Mam problem z kwerenda aktualizacją! Otóż pod czas jej uruchamiania wyskakuje
komunikat
„Operacja musi wykorzystać kwerendę, która można aktualizować.”?! Po
czym kwerenda nic nie robi.
Ponieważ jestem początkującym mogłem gdzieś popełnić głupi błąd w
konstruowaniu bazy i dla dlatego pojawiają się problemy. W takim razie opisze
co dokładnie ma robić moja kwerenda i w jakim „środowisku działa”.
Otóż jest baza danych, która ma wyświetlać statystyki przejechanych kilometrów
pomiędzy
kolejnymi tankowaniami. Dane przechowywane są w tabelach „Kierowcy”
oraz „Stan”, która jest zbudowana następująco:
Idtankowania|Idkierowcy| Data |Stan licznika|Ilość przejechanych km na baku
1 | 1 | 19.02.02 | 20 | 20
2 | 1 | 19.03.02 | 100 | 80
3 | 1 | 19.04.04| 200 |
Chodzi o to aby Access automatycznie odejmował ostatni rekord od
rzedostatniego (a konkretnie ostatni „Stan licznika” od przedostatniego) i
zapisywał
wynik w komórce „Ilość przejechanych kilometrów na jednym baku” w
ostatnim rekordzie. Na przykład: [Stan licznika] z drugiego rekordu odejmujemy
od [Stanu licznika] z pierwszego rekordu. Otrzymujemy wynik 80 a następnie
zapisujemy go w [Ilość przejechanych kilometrów na jednym baku] drugiego
rekordu.
Jak to zrobić w przypadku gdy mam wielu kierowców?
Ja rozwiązałem to tworząc 5 kwerend! Może nie jest to zbyt eleganckie ale do
pewnego momentu spełnia swoją rolę:
1. Kwerenda 1
Wyświetla Idkierowcy oraz stan licznika przy ostatnim tankowaniu. W naszym
przypadku było by to :
Idkierowcy | Stan licznika
1 | 200
2. Kwerenda 2
Wyświetla ostatni uzupełniony rekord „Ilość przejechanych
kilometrów na jednym baku”. W naszym przypadku było by to:
Idkierowcy | Stan licznika | Ilość przejechanych kilometrów na jednym baku
1 | 100 | 80
3. Kwerenda 3
Jest
bardzo podobna do kwerendy 2 (wyświetla „Stan licznika” z ostatniego
zupełnionego rekordu „Ilość przejechanych kilometrów na jednym baku”, czyli :
Idkierowcy | Stan licznika
1 | 100
4. Kwerenda 4
Wyświetla
różnicę pomiędzy ostatnim rekordem „Stan licznika” a przedostatnim
rekordem (kolumny „Stan
licznika”) oraz „Idkierowcy” i „Date” (te ostatnie
kolumny są po aby kwerenda aktualizującą wiedziała gdzie wpisać). W naszym
przypadku będzie to:
Idkierowcy | Data | Różnica
1 | 19.04.04 | 100
5. Kwerenda aktualizująca
Która ma
za zadanie zaktualizować tabelę „Stan”. To znaczy wpisać w ostatnie
puste pole
„Ilość przejechanych kilometrów na jednym baku” wartość liczbową z
pola „Różnica” Kwerendy 4.
Ufff ..... to już koniec!!! Czy w moim postępowaniu jest coć co może być
przeszkodą do wykowania kwerendy aktualizującej?!!
Z góry dziękuję za pomoc
--
============= P o l N E W S ==============
archiwum i przeszukiwanie newsów
http://www.polnews.pl
Czy aby nie jakas funkcja agregujaca?
Czy pola wiazace tabele sa zindeksowane?
Bo to dwa podstawowe warunki, by kwerenda byla aktualizowalna (tzn
kwerenda nie moze nic agregowac i polaczenie kwerend musi odbywac sie na
zindeksowanych polach).
Mozna to obejsc tworzac nowa tabele lub dodajac rekordy - tu juz nie ma
wymagania, by kwerenda zrodlowa byla aktualizowalna.
W ogole dosyc ciekawe zagadnienie, jak to rozwiazac elegancko -
tzn w uproszczeniu - dwa pola - data i licznik i trzeba skonstruowac
odjecie licznika od licznika dla daty poprzedniej.
Bo tak naprwde to nie widze powodu zebys musial wpisywac roznice do
tabeli, mozna wszak dynamicznie uzyskiwac, ale faketm jest ze tak moze
byc latwiej do pozniejszego obrabiania.
ps.
slon4> Po polskiemu to powinny byc dwie tablice jako kryteria czy tez
slon4> jako dane do zmian lub dane zmieniane.
Oj, po polskiemu - nic nie rozumiem.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
A zagadnienie naprawde wydaje sie ciekawe.
Piotr
Otóż jest baza danych, która ma wyświetlać statystyki przejechanych kilometrów
pomiędzy
kolejnymi tankowaniami. Dane przechowywane są w tabelach „Kierowcy”
oraz „Stan”, która jest zbudowana następująco:
Idtankowania|Idkierowcy| Data |Stan licznika | Ilość przejechanych km
1 | 1 | 19.02.02 | 20 | 20
2 | 1 | 19.03.02 | 100 | 80
3 | 1 | 19.04.04 | 200 |
Chodzi o to aby Access automatycznie odejmował ostatni rekord od
rzedostatniego (a konkretnie ostatni „Stan licznika” od przedostatniego) i
zapisywał
wynik w komórce „Ilość przejechanych kilometrów na jednym baku” w
ostatnim rekordzie. Na przykład: [Stan licznika] z drugiego rekordu odejmujemy
od [Stanu licznika] z pierwszego rekordu. Otrzymujemy wynik 80 a następnie
zapisujemy go w [Ilość przejechanych kilometrów na jednym baku] drugiego
rekordu.
Jak to zrobić w przypadku gdy mam wielu kierowców?
Ja rozwiązałem to tworząc 5 kwerend! Może nie jest to zbyt eleganckie ale do
pewnego momentu spełnia swoją rolę:
1.Kwerenda 1
Wyświetla Idkierowcy oraz stan licznika przy ostatnim tankowaniu. W naszym
przypadku było by to :
Idkierowcy | Stan licznika
1 | 200
2.Kwerenda 2
Wyświetla ostatni uzupełniony rekord „Ilość przejechanych
kilometrów na jednym baku”. W naszym przypadku było by to:
Idkierowcy | Stan licznika | Ilość przejechanych kilometrów na jednym baku
1 | 100 | 80
3.Kwerenda 3
Jest
bardzo podobna do kwerendy 2 (wyświetla „Stan licznika” z ostatniego
zupełnionego rekordu „Ilość przejechanych kilometrów na jednym baku”, czyli :
Idkierowcy | Stan licznika
1 | 100
4.Kwerenda 4
Wyświetla
różnicę pomiędzy ostatnim rekordem „Stan licznika” a przedostatnim
rekordem (kolumny „Stan
licznika”) oraz „Idkierowcy” i „Date” (te ostatnie
kolumny są po aby kwerenda aktualizującą wiedziała gdzie wpisać). W naszym
przypadku będzie to:
Idkierowcy | Data | Różnica
1 | 19.04.04 | 100
5.Kwerenda aktualizująca
Która ma
za zadanie zaktualizować tabelę „Stan”. To znaczy wpisać w ostatnie
puste pole
„Ilość przejechanych kilometrów na jednym baku” wartość liczbową z
pola „Różnica” Kwerendy 4.
Zbudowana jest w następujący sposób:
Pole: | Ilość przejechanych km | Data | Idkierowcy
Tabela: | Stan | Stan | Stan
Zamiana na | [Kwerenda 4]![Różnica] | |
Kryteria | |[Kwerenda4]![Data]|[Kwerenda4]![Id kierow]
Nie jestem dobry w acces-ie, ale wydaje mi się ze wszystkie warunki są dobę i
wszystko powinno grac. Niestety nie jest tak :(
>Czy aby nie jakas funkcja agregujaca?
Jesli tymi funkcjami sa: Pirewszy, Ostatni itp. to tak.
>Czy pola wiazace tabele sa zindeksowane?
Tak
>W ogole dosyc ciekawe zagadnienie, jak to rozwiazac elegancko -
>tzn w uproszczeniu - dwa pola - data i licznik i trzeba skonstruowac
>odjecie licznika od licznika dla daty poprzedniej.
>
Wlasnie jak to zrobic najprosciej
Prosze o pomoc, lub przysługe za która moge sie jakos odwdzieczyc, powiedmy
gotówka:)
Otóż jest baza danych, która ma wyświetlać statystyki przejechanych kilometrów
pomiędzy kolejnymi tankowaniami. Dane przechowywane są w tabelach [Kierowcy]
oraz [Stan], która jest zbudowana następująco:
Idtankowania |Idkierowcy | Data |Stan licznika | Ilość przejechanych km
1 | 1 | 19.02.02 | 20 | 20
2 | 1 | 19.03.02 | 100 | 80
3 | 1 | 19.04.04| 200 |
Chodzi o to aby Access automatycznie odejmował ostatni rekord od
przedostatniego (a konkretnie ostatni [Stan licznika] od przedostatniego) i
zapisywał wynik w komórce [Ilość przejechanych km] w ostatnim rekordzie. Na
przykład: [Stan licznika] z drugiego rekordu odejmujemy od [Stanu licznika] z
pierwszego rekordu. Otrzymujemy wynik 80 a następnie zapisujemy go w [Ilość
przejechanych km] drugiego rekordu.
Jak to zrobić w przypadku gdy mam wielu kierowców?
Ja probowalem rozwiazac ten problem tworząc 5 kwerend! Może nie jest to zbyt
eleganckie ale do pewnego momentu spełnia swoją rolę:
1.Kwerenda 1
Wyświetla Idkierowcy oraz stan licznika przy ostatnim tankowaniu. W naszym
przypadku było by to :
Idkierowcy | Stan licznika
1 | 200
2.Kwerenda 2
Wyświetla ostatni uzupełniony rekord [Ilość przejechanych km]. W naszym
przypadku było by to:
Idkierowcy | Stan licznika | Ilość przejechanych km
1 | 100 | 80
3.Kwerenda 3
Jest bardzo podobna do kwerendy 2 (wyświetla „Stan licznika” z
ostatniego uzupełnionego rekordu [Ilość przejechanych km], czyli :
Idkierowcy | Stan licznika
1 | 100
4.Kwerenda 4
Wyświetla różnicę pomiędzy ostatnim rekordem [Stan licznika] a przedostatnim
rekordem (kolumny [Stan licznika]) oraz [Idkierowcy] i [Date] (te ostatnie
kolumny są po aby kwerenda aktualizującą wiedziała gdzie wpisać). W naszym
przypadku będzie to:
Idkierowcy | Data | Różnica
1 | 19.04.04 | 100
5.Kwerenda aktualizująca
Która ma za zadanie zaktualizować tabelę [Stan].To znaczy wpisać w ostatnie
puste pole [Ilość przejechanych km] wartość liczbową z pola [Różnica] Kwerendy
4.
Zbudowana jest w następujący sposób:
Pole: | Ilość przejechanych km | Data | Idkierowcy
Tabela: | Stan | Stan | Stan
Zamiana na | [Kwerenda 4]![Różnica] | |
Kryteria | |[Kwerenda4]![Data]|[Kwerenda4]![Id kierow]
Nie jestem dobry w acces-ie, ale wydaje mi się ze wszystkie warunki są dobę i
wszystko powinno grac. Niestety nie jest tak :(
>Czy aby nie jakas funkcja agregujaca?
Jesli tymi funkcjami sa: Pirewszy, Ostatni itp. to tak.
>Czy pola wiazace tabele sa zindeksowane?
Tak
>W ogole dosyc ciekawe zagadnienie, jak to rozwiazac elegancko -
>tzn w uproszczeniu - dwa pola - data i licznik i trzeba skonstruowac
>odjecie licznika od licznika dla daty poprzedniej.
>
Wlasnie jak to zrobic najprosciej
Prosze o pomoc, lub przysługe za która moge sie jakos odwdzieczyc, powiedmy
gotówka:)
Otóż jest baza danych, która ma wyświetlać statystyki przejechanych kilometrów
A wracajac do problemu:
>> Czy aby nie jakas funkcja agregujaca?
> Jesli tymi funkcjami sa: Pirewszy, Ostatni itp. to tak.
wiec masz odpowiedz dlaczego nie dziala/nie jest aktualizowalna.
W dodatku raczej nalezaloby uzyc Max, Min, bo uzycie Pierwszy, Ostatni
zwarac pierwszy i ostani rekord w zbiorze, niekoniecznie ten ktory ma
date najpozniesza/najwczesniejsza.
Jesli bys przeslal choc kawalki SQLa (Widok->Widok SQL) mozna by cos wiecej.
Wg mnie na szybko to mozna:
1/Na podstawie tego co zrobiles (zakladajac, iz dziala prawidlowo)
zrobic kwerende tworzaca tabele i na niej sie opierac.
2/Jesli ma byc aktualizujaca probowac przeniesc agregowanie do warunkow
- czyli uzyc EXIST lub IN
Piotr
Sorry
>Nie pisz 3 razy tego samego.
Za kazdym razem gdy probowalem wyslac post na grupe przegladarka zawiszala
mi sie. Potem probowalem sprawdzic czy post zostal wyslanyna grupe.
Niestety nie bylo go, a dzis jaksie okazalo wyslalem ich az 3, z tego
powodu przepraszam za zasmiecanie grupy
>>> Czy aby nie jakas funkcja agregujaca?
>> Jesli tymi funkcjami sa: Pirewszy, Ostatni itp. to tak.
>wiec masz odpowiedz dlaczego nie dziala/nie jest aktualizowalna.
W takim razie jakich funkcji uzyc, dal uzyskania tego samego efektu?
>W dodatku raczej nalezaloby uzyc Max, Min, bo uzycie Pierwszy, Ostatni
>zwarac pierwszy i ostani rekord w zbiorze, niekoniecznie ten ktory ma
>date najpozniesza/najwczesniejsza.
Mi to nie przeszkadza, poniewaz aktualizacje chce wykonywac po
wprowadzeniu kazdego rekordu, lub serri danych.
>1/Na podstawie tego co zrobiles (zakladajac, iz dziala prawidlowo)
>zrobic kwerende tworzaca tabele i na niej sie opierac.
SUPER!!!!
Zupelnie przoczylem ten temat!! Chyba poprostu brakuje mi praktyki i
obycia w access-ie. Teraz wszystko dzila. Jak moge Ci sie odwdzieczyc?
>2/Jesli ma byc aktualizujaca probowac przeniesc agregowanie do warunkow
>- czyli uzyc EXIST lub IN
Szczeze mowiac nie slyszalem o tych funkcjach. Gdzie moge znalesc ich opis -
najlepiej po polsku:(
Jeszcze raz dzieki za pomoc!
Piotr