Zbigniew O.

Zbigniew O. PRACUJĄCY

Temat: Kwerenda składająca

Witam wszystkich.
Nie znalazłem bezpośredniej odpowiedzi dot. mojego problemu, więc pozwoliłem sobie (nieśmiało) założyć nowy wątek. Sprawa dotyczy kwerendy składającej a właściwie tego jak ją “stworzyć”. Podjąłem próbę - póki co nieudolną, zorganizowania magazynu w firmie w oparciu o bazę Access - a niech komputer odwala robotę, ślinienie palca i szukanie wpisów w książce to archaizm. I tak; podzieliłem “magazyn” na 8 działów zgodnie z rodzajami “majątku” jakim zawiaduję, dla każdego działu stworzyłem tabelę słownikową, coby “magazynier” wprowadzając nową pozycję nie wymyślał różnych nazw na te same rzeczy. Indywidualny jest numer inwentarzowy konkretnej rzeczy w danym dziale. Działy łączy jedno - UŻYTKOWNIK, który jest wszędzie, może być ten sam i mieć coś z każdego działu, i to po kilka rzeczy naraz - oczywiście. I tu pojawił się mój problem - w jaki sposób wyzbierać dane o majątku którym dysponuje dana osoba ze wszystkich działów magazynu. Wydaje mi się że powinna to robić kwerenda składająca, ale.... Dotarłem do tego momentu, że zbieram dane z dwóch tabel - dwóch działów magazynu, poprzez skopiowanie do kwerendy składającej instrukcji SQL z dwóch kwerend wybierających - przez instrukcję SELECT i FROM, UNION ALL, i tyle! Tu moje podstawowe pytanie : w jaki sposób dołączyć następne kwerendy? Wklejanie, zgodnie z helpem Accessa, kolejnych instrukcji SQL z kwerend wybierających po instrukcji SELECT nie działa - może tu jest jakiś haczyk, więc proszę o wskazanie jaki. Po uruchomieniu kwerendy z trzema instrukcjami SQL kwerenda wyrzuca błąd, że nie może znaleźć obiektu, albo błąd w nazwie etc. a błędy wskazują na “środkową” kwerendę - choć przed dołączeniem trzeciej działała poprawnie.
Wiem, że prostszym rozwiązaniem byłoby utworzenie jednej tabeli majątku i drugiej z danymi osób, tyle że bazując na założeniu - magazynier nic nie dodaje od siebie - a głównie w kwestii wymyślania nazw przedmiotów, powstaje lista “przewijana” zawierająca ok.800 pozycji asortymentu - co nieco utrudnia znalezienie właściwego wpisu. Dlatego przyjąłem założenie o podzieleniu magazynu na działy. Przemawia za tym ponadto sprawa określenia osób prowadzących/odpowiedzialnych za dany dział magazynu, książki magazynowe itp. Papieru nie mogę do końca wyeliminować. Z góry dziękuję za sugestie i pomoc. Jestem początkującym użytkownikiem Access więc proszę o wyrozumiałość.
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Kwerenda składająca

Hm, dla mnie właśnie rozwiązanie z jedną tabelą, która ma pole dotyczące działu, odnoszące się do tabeli "tblDzialy" byłoby najlepsze.

Jedna tabela nie wyklucza możliwości wyświetlania tylko tych elementów, które dotyczą pojedynczego działu (np. formularz oparty na kwerendzie wybierającej według danego działu i magazynier widzi tylko to, co jego dotyczy).
Wyeliminowałoby to opisaną przez Pana niedogodność w przypadku konieczności łączenia wszystkiego w całość, a daje dużo większe możliwości wyciągnięcia z jednej tabeli różnych pod względem działów (i innych warunków) danych.

Co do samego UNION, to złączenie tabel w poniższy sposób powinno działać:

SELECT Id, Nazwa
FROM tblMagazyn1
UNION
SELECT Id, Nazwa
FROM tblMagazyn2
UNION
SELECT Id, Nazwa
FROM tblMagazyn3;


Trzeba pamiętać, że łączone pola muszą występować w takiej samej ilości oraz typy danych w tych polach muszą być takie same. Oznacza to, że nie złączymy w ten sposób danych z pola tekstowego i pola typu data/godzina, chyba że dokonamy konwersji tych danych na jeden typ.
Zbigniew O.

Zbigniew O. PRACUJĄCY

Temat: Kwerenda składająca

Dziękuję za zainteresowanie moim problemem.
Celem sprecyzowania przedstawię na skróty schemat magazynu
DZIAŁ 1
ID
NR INDEKSU
NAZWA - odnośnik do tabeli z nazwami do Działu 1
UŻYTKOWNIK - odnośnik do tabeli "PRACOWNICY"

DZIAŁ 2
ID
NR INDEKSU
NAZWA - odnośnik do tabeli z nazwami do Działu 2
UŻYTKOWNIK - odnośnik do tabeli "PRACOWNICY"

DZIAŁ 3
ID
NR INDEKSU
NAZWA - odnośnik do tabeli z nazwami do Działu 3
UŻYTKOWNIK - odnośnik do tabeli "PRACOWNICY" ITD.

I tu, ponowię pytanie: jak to zebrać do jednego worka, patrząc na magazyn przez pryzmat danego UŻYTKOWNIKA - nie magazyniera! Chodzi o informację, która potrzebna jest np. w chwili odejścia z pracy pracownika, czy też przeniesienia i konieczności "rozliczenia" go z majątku, którym dysponuje w danej chwili, i to ze wszystkich działów. Po prostu, aby można było wklikać w filtr np. nazwisko KOWAL i uzyskać dane o tym co posiada. I w związku z tym chciałbym prosić o sprawdzenie składni kwerendy, gdyż stworzenie kwerendy przez instrukcję UNION, zgodnie z Pani sugestią, w "moim" wypadku oczywiście nie działa:
SELECT [DZIAŁ 1].[ID], [DZIAŁ 1].[NR INDEKSU], [DZIAŁ 1].[UŻYTKOWNIK]
FROM [DZIAŁ 1]
UNION
SELECT [DZIAŁ 2].[ID], [DZIAŁ 2].[NR INDEKSU], [DZIAŁ 2].[UŻYTKOWNIK]
FROM [DZIAŁ 2]
UNION
SELECT [DZIAŁ 3].[ID], [DZIAŁ 3].[NR INDEKSU], [DZIAŁ 3].[UŻYTKOWNIK]
FROM [DZIAŁ 3];

Gdzieś coś przekombinowałem, tylko nie wiem gdzie, brak mi pomysłu :( Co wyrzucić, albo poprzestawiać?
PozdrawiamZbigniew Ostafin edytował(a) ten post dnia 28.12.10 o godzinie 17:23

konto usunięte

Temat: Kwerenda składająca

Popełniłeś podstawoy błąd konstrukcyjny: wiele tabel dla tego samego!

Nie robisz oddzielnej tabeli dla każdego działu, dodajesz pole np. id_dzial i po tym filtrujesz, później jak potrzebujesz zawęzić widok danych to robisz stosowne kwerendy
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Kwerenda składająca

Przemysław Rachwał:
Popełniłeś podstawoy błąd konstrukcyjny: wiele tabel dla tego samego!
Nie robisz oddzielnej tabeli dla każdego działu, dodajesz pole np.
id_dzial i po tym filtrujesz, później jak potrzebujesz zawęzić
widok danych to robisz stosowne kwerendy

Jak najbardziej, całkowicie się z Panem zgadzam - pisałam o tym w poprzednim moim poście.
Jednak, jeśli chcemy doprowadzić teraz do sytuacji, że złączymy dane z tych tabel, to trzeba się zastanowić, dlaczego nie działa UNION.
Oczywiście, można przekopiować rekordy ręcznie do jednej tabeli, ale to zbyt proste :>
Zbigniew Ostafin:
Gdzieś coś przekombinowałem, tylko nie wiem gdzie, brak mi pomysłu :( Co wyrzucić, albo poprzestawiać?

Być może problem nie leży w konstrukcji polecenia SQL, a w strukturze danych, relacjach.
Myślę, że trudno będzie to stwierdzić nie mając bazy danych - samo przedstawianie opisowe struktury to za mało.
Istotne byłoby tutaj, jaki komunikat się pojawia, czy któryś wyraz w poleceniu SQL jest podświetlony itd.
Czy złożenie osobno tabel w pary:
1) pierwszej i drugiej;
2) drugiej i trzeciej;
3) pierwszej i trzeciej

- powoduje w którymś momencie jakiś problem?

Ale przede wszystkim proszę posłuchać rady i połączyć dane z tych tabel w jedną tabelę. Dodatkowe pole powinno zawierać ID działu.

Argument dotyczący, że magazynier ma mieć rozwijaną listę przedmiotów w zależności od swojego działu - upada, gdy wdroży Pan rozwiązanie z odpowiednim filtrowaniem wyświetlanych danych - to da się zrobić.
Zbigniew O.

Zbigniew O. PRACUJĄCY

Temat: Kwerenda składająca

A miało być tak prosto.....
Wiele takich samych tabel - to zamiar świadomy, tylko nie miałem świadomości wielkości problemu, do chwili kiedy stanąłem przed koniecznością połączenia tego w jeden wynik! Tylko po co ktoś pisze, że "Kwerenda składająca łączy zestawy wyników kilku podobnych kwerend wybierających." W przykładzie autor "pomocy" odwołuje się do dwóch tabel z podobnymi kolumnami, po czym podaje że dalsze kwerendy łączy się tak samo jak dwie. Jak przepis na bułeczki zrobiłem wszystko co nakazali w microsofcie, kopie poleceń SQL dodałem do siebie z zaklęciem UNION ALL i ... nic. Parowanie na zmiany pierwszej kwerendy z drugą i trzecią, i na odwrót nie powoduje problemów. Problem pojawia się w chwili dołączenia trzeciej kwerendy wybierającej. Wówczas otrzymuję komunikat:
Aparat bazy danych programu Microsoft Office Access nie może znaleźć obiektu. Upewnij się, że obiekt istnieje, a jego nazwa ścieżki podane są poprawnie
Nie podświetla się nic. Sprawdziłem typy pól tabel przed utworzeniem kwerend wybierających, relacje są równie proste jak moje założenie : jeden dział magazynu, jedna tabela z nazwami dla tego działu, i w każdym dziale odwołanie do tej samej tabeli - użytkownik. Może to jakiś problem. Ale bez dodania użytkownika nie ma sensu żaden magazyn.
Nie będę upierał się maniakalnie przy swoim zdaniu - wrzucę działy do jednego worka "MAGAZYN" dodam nazwę działu jako odwołanie i tyle, skoro nie można - pomimo obiecanek producenta, połączyć tego w jedno, to nie!
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: Kwerenda składająca

Panie Zbigniewie - w Accessie, przez UNION MOŻNA połączyć dane z więcej niż dwóch tabel!
Na dowód załączam plik (Access 2007), gdzie łączę dane z czterech tabel.

Nie napisał Pan, którą ma wersję Accessa.
Jeśli jest to wersja 2007 i nie ma Pan zainstalowanego SP1 dla Office 2007, to być może to jest przyczyna problemu.
Według dokumentu Microsoft (opis w komórce E40):
When you add an attachment field to a table, you may receive the following error message:

The Microsoft Office Access database engine could not find the object.
Make sure the object exists and that you spell its name and the path name correctly.
This issue occurs when the field has a union query that has more than one union on tables with complex data.

Opis samej poprawki tutaj.
Być może problemem jest brak tej poprawki - proszę sprawdzić.
Zbigniew O.

Zbigniew O. PRACUJĄCY

Temat: Kwerenda składająca

W nawiązaniu do Pani posta podaję, iż korzystam z Accessa 2007, co do poprawek offica - nie wgłębiałem się. Dziękuję za przesłane linki, podpatrzyłem i z zazdrości, że Pani działa postanowiłem jeszcze raz powalczyć z tematem. I muszę w tym miejscu stwierdzić, iż oboje Państwo mieliście rację... Już wiem że MOŻNA przez UNION połączyć kilka tabel! i że popełniłem faktycznie błąd konstrukcyjny na wstępie. Polegał on nie na tym, że utworzyłem szereg takich samych tabel dla tego samego, ale właśnie że przy tworzeniu tych tabel powstał jakiś błąd - wydaje mi się, że chodzi tu o przekopiowywanie tabel które pewno coś "zabrały" ze sobą i stąd problem. Nie starałem się już dojść do samego błędu, tylko "zrobiłem" nową bazę, gdzie "z palca" wklikałem nowe tabele, każdą z osobna - bazując na Pani linku.I co? Zadziałało, nie ukrywam ku mojemu wielkiemu zaskoczeniu - połączyłem cztery tabele, posegregowałem jak i co chciałem, nawet udało mi się nazwać poszczególne rekordy (w ostatniej kolumnie kwerendy składającej) nazwami tabel z których pochodziły. Nawet połączenie tabel relacjami - bo przecież zgodnie z tym co sobie wymyśliłem, użytkownik łączy się z każdą tabelą, nie zrobiło problemu. Jak podałem wcześniej, błąd powstał gdzieś na wstępie tworzenia bazy, więc stara baza poszła do kosza a nowa do budowy od nowa. Szkoda tylko, że straciłem dużo czasu na rzecz oczywistą, ale pozostała nauka. Serdecznie dziękuję za zainteresowanie, i wskazówki oraz poświęcony czas.
Pozdrawiam serdecznie

Temat: Kwerenda składająca

Zastanawiam się, ile czasu potrzeba będzie Zbigniewowi, by stwierdził, że taka budowa bazy, jaką ma, jest mocno niepraktyczna i upierdliwa a rady Moniki i Przemka są jak najbardziej słuszne i bazę trzeba od nowa przeprojektować?

Obstawiam, że najdalej za 6 tygodni pojawi się post w tej sprawie.
Zbigniew O.

Zbigniew O. PRACUJĄCY

Temat: Kwerenda składająca

6 tygodni to kawał czasu.A tak przy okazji nawet przez chwilę nie twierdziłem że mam rację, choć póki co to osiągnąłem co zamierzałem - ale ten się nie myli kto nic nie robi.
Jak się mocno "zakręcę" w tym co robię, to wrócę na forum - bo przecież po to jest żeby się uczyć od lepszych i zrobię jak radzicie. :-)

konto usunięte

Temat: Kwerenda składająca

człowiek uczy się na własnym doświadczeniu. Pozwólmy Zbigniewowi samemu dość do pewnych wniosków :)
Paweł S.

Paweł S. Zaufanie to podstawa

Temat: Kwerenda składająca

Ryszard G.:
Zastanawiam się, ile czasu potrzeba będzie Zbigniewowi, by stwierdził, że taka budowa bazy, jaką ma, jest mocno niepraktyczna i upierdliwa a rady Moniki i Przemka są jak najbardziej słuszne i bazę trzeba od nowa przeprojektować?

Obstawiam, że najdalej za 6 tygodni pojawi się post w tej sprawie.
A ja nie do końca się zgodzę ze Zbigniew popełnił błąd.

Weźcie pod uwage sytuację, gdy oddziały działąją w różnych lokalizacjach i raz na tydzien przesyłają pliki access z danymi.
Wtedy łatwiej tworzyć unię z tabel połączonych, wystarczy do tej samej lokalizacji wkopiować pliki o tej samej nazwie i mamy aktualne dane złączone przez kwerendę składającą.Paweł Sikora edytował(a) ten post dnia 02.03.11 o godzinie 07:33
Maciej Z.

Maciej Z. Jakość, informacja i
szerokie spojrzenie
na biznes...

Temat: Kwerenda składająca

I przepisywać wszystkie kwerendy jak tylko zmieni się nazwa działu albo dojdzie nowy? Owszem, można oprogramować i sprawdzać jakie mamy pliki, jakie w nich są kwerendy itd.
Takie rozwiązanie zmusza nas do każdorazowego przesyłania pełnej bazy, a przynajmniej jednej tabeli, która może być całkiem spora, podczas gdy zmiana może dotyczyć ledwie jednego bajtu danych.
W opisanej przez Zbigniewa strukturze zauważyłem, że możemy mieć do czynienia z wymuszaniem integralności co może spowodować dodatkowe komplikacje, że o całkowitym rozjechaniu się danych nie wspomnę.

O ile więc dałoby się to wszystko zrobić, to trzeba by poświęcić naprawdę dużo czasu i energii, żeby zapewnić w miarę sprawne działanie takiego rozwiązania. Nie sądzę jednak, aby było ono efektywne.

Na taką okoliczność wymiany danych zdecydowanie lepsza wydaje się replikacja.

W pełni popieram uwagę Przemka dotyczącą niewłaściwej konstrukcji bazy.
Paweł S.

Paweł S. Zaufanie to podstawa

Temat: Kwerenda składająca

Maciej Zwierzchowski:
I przepisywać wszystkie kwerendy jak tylko zmieni się nazwa działu albo dojdzie nowy? Owszem, można oprogramować i sprawdzać jakie mamy pliki, jakie w nich są kwerendy itd.

Dlaczego przepisywać?
Wystraczy do unii dodać kolejny dział.

Ja tak zrobiłem, zbieram raz na tydzien bazy z oddziałów w jednej unii, i później pracuję na unii jak na widoku/tabeli.
W accesie mozna opierać kojene kwerendy na kwerendzie, traktując ja jako źrodło, coś na zasadzie widoku.

konto usunięte

Temat: Kwerenda składająca

Paweł Sikora:
Maciej Zwierzchowski:
I przepisywać wszystkie kwerendy jak tylko zmieni się nazwa działu albo dojdzie nowy? Owszem, można oprogramować i sprawdzać jakie mamy pliki, jakie w nich są kwerendy itd.

Dlaczego przepisywać?
Wystraczy do unii dodać kolejny dział.

własnie magiczne słowo "dodać" - a można zrobić tak żeby niczego nie dodawać
Ja tak zrobiłem, zbieram raz na tydzien bazy z oddziałów w jednej unii, i później pracuję na unii jak na widoku/tabeli.
W accesie mozna opierać kojene kwerendy na kwerendzie, traktując ja jako źrodło, coś na zasadzie widoku.

a ile wkladasz w to pracy ręcznej?

problem w tym że przy dobrze zaprojektowanej strukturze danych nie muszę kiwnąć palcem żeby zrobiło się samo, co gorsza mogę wpiąć takie kwerendy w automat i niech pracują za mnie
Paweł S.

Paweł S. Zaufanie to podstawa

Temat: Kwerenda składająca

Przemysław R.:
Paweł Sikora:
Maciej Zwierzchowski:
I przepisywać wszystkie kwerendy jak tylko zmieni się nazwa działu albo dojdzie nowy? Owszem, można oprogramować i sprawdzać jakie mamy pliki, jakie w nich są kwerendy itd.

Dlaczego przepisywać?
Wystraczy do unii dodać kolejny dział.

własnie magiczne słowo "dodać" - a można zrobić tak żeby niczego nie dodawać
Ja tak zrobiłem, zbieram raz na tydzien bazy z oddziałów w jednej unii, i później pracuję na unii jak na widoku/tabeli.
W accesie mozna opierać kojene kwerendy na kwerendzie, traktując ja jako źrodło, coś na zasadzie widoku.

a ile wkladasz w to pracy ręcznej?

ile pracy? : hmm, teraz to juz minimum, bo mam 8 oddziałów i to sie nie zmienia. pozostaje tylko wkopiować pliki w odpowiednie miejsce na dysku sieciowym.
oczywiscie mogłoby byc zero, ale oddziały nie sa online z moją siecią.

konto usunięte

Temat: Kwerenda składająca

Paweł Sikora:
a ile wkladasz w to pracy ręcznej?

ile pracy? : hmm, teraz to juz minimum, bo mam 8 oddziałów i to sie nie zmienia. pozostaje tylko wkopiować pliki w odpowiednie miejsce na dysku sieciowym.
oczywiscie mogłoby byc zero, ale oddziały nie sa online z moją siecią.

ile kwerend musisz przerobić jak zmieni się struktura organizacyjna?

ile kwerend trzeba zmodyfikować jak dojdą kolejne działy?
Paweł S.

Paweł S. Zaufanie to podstawa

Temat: Kwerenda składająca

Przemysław R.:
Paweł Sikora:
a ile wkladasz w to pracy ręcznej?

ile pracy? : hmm, teraz to juz minimum, bo mam 8 oddziałów i to sie nie zmienia. pozostaje tylko wkopiować pliki w odpowiednie miejsce na dysku sieciowym.
oczywiscie mogłoby byc zero, ale oddziały nie sa online z moją siecią.

ile kwerend musisz przerobić jak zmieni się struktura organizacyjna?
1 - zmieniam tylko unie, w niej dokładam:
union
select nowy_oddzial.pole1, ..., nowy_oddzial.polex
from nowy_oddzial
ile kwerend trzeba zmodyfikować jak dojdą kolejne działy?
jw.Paweł Sikora edytował(a) ten post dnia 07.03.11 o godzinie 14:23

konto usunięte

Temat: Kwerenda składająca

Paweł Sikora:
Przemysław R.:
Paweł Sikora:
a ile wkladasz w to pracy ręcznej?

ile pracy? : hmm, teraz to juz minimum, bo mam 8 oddziałów i to sie nie zmienia. pozostaje tylko wkopiować pliki w odpowiednie miejsce na dysku sieciowym.
oczywiscie mogłoby byc zero, ale oddziały nie sa online z moją siecią.

ile kwerend musisz przerobić jak zmieni się struktura organizacyjna?
1 - zmieniam tylko unie, w niej dokładam:
union nowy_oddzial.pole1, ..., nowy_oddzial.polex from nowy_oddzial
ile kwerend trzeba zmodyfikować jak dojdą kolejne działy?
jw.

a nie przyszło ci do głowy że tego typu rozwiązanie nie jest zbyt optymalne np. pod względem prędkości działania? UNION delikatnie mówiąc zbyt prędki nie jest
Paweł S.

Paweł S. Zaufanie to podstawa

Temat: Kwerenda składająca

Przemysław R.:
a nie przyszło ci do głowy że tego typu rozwiązanie nie jest zbyt optymalne np. pod względem prędkości działania? UNION delikatnie mówiąc zbyt prędki nie jest
hmmm... może i nie jest, ale do unii mozna napisać kwerendę tworząca tabelę, i przenosząca dane do nowej tabeli, i wtedy operuje na jednej tabeli, a nie na unii... ale to juz chyba za daleko wychodzimy poza wątek...

Następna dyskusja:

Kwerenda Sumująca




Wyślij zaproszenie do