Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ACCESS] [Formularze][Raporty] Tworzenie podformularzy lub podraportów z zapytania SQL
vokiel
post 16.06.2009, 12:54:27
Post #1





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Witam

Mam problem z przygotowaniem raportu/formularza zbiorczego.

Strukura bazy:
ID | DATA | RODZAJ | NR | KWOTA

Co chce osiągnąć?
Raport sumujący poszczególne rodzaje, + szczegóły dla wybranych dla konkretnej daty

Czyli:
1. Rodzaj 1
SUMA: suma dla rodzaj 1

2. Rodzaj 2
NR1 KWOTA 1
NR2 KWOTA 2
SUMA: suma dla rodzaj 2

itd...

Jak to najlepiej rozwiązać?


Przy okazji jak przekazać zmienną z formularza do kwerendy?

Będę wdzięczny za pomoc, nakierowanie, linki do dobrych tutoriali
Pozdrawiam


--------------------
Go to the top of the page
+Quote Post
Beatus
post 17.06.2009, 15:19:03
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 5.06.2009

Ostrzeżenie: (0%)
-----


Witaj,

masz tabelę i chcesz na jej podstawie dowiedzieć się:
a) ile jest rekordów, które mają wpisany rodzaj 1, 2 itd i jednocześnie na jaką kwotę opiewają te wszystkie rekordy gdzie wskazany jest określony rodzaj. Dobrze zrozumiałam? Jeżeli tak, najprościej jest zrobić kwerendę która będzie grupowała wg rodzajów, liczyła ID i sumowała kwoty.

SELECT Tabela1.RODZAJ, Count(Tabela1.ID) AS PoliczOfID, Sum(Tabela1.KWOTA) AS SumaOfKWOTA
FROM Tabela1
GROUP BY Tabela1.RODZAJ;

cool.gif chcesz na podstawie dat móc obejrzeć rekordy mieszczące się w określonych przedziałach czasowych? Jeżeli tak, najprościej jest zrobić kwerendę, która po uruchomieniu poprosi o podanie daty od i daty do, a następnie wyświetli te rekordy, które mieszczą się w podanym przedziale.

SELECT Tabela1.DATA, Tabela1.RODZAJ, Tabela1.NR, Tabela1.KWOTA
FROM Tabela1
WHERE (((Tabela1.DATA) Between [podaj datę od w formacie RRRR-MM-DD] And [podaj datę do w formacie RRRR-MM-DD]));

Czy taki zapis w SQL wyjaśnia ci jak to zrobić?

Pytasz też jak przekazać zmienną z formularza do kwerendy.
Nie wiem jak i podejrzewam, że się nie da. Formularz to tylko nakładka, która ułatwia wprowadzanie danych lub ich przeglądanie.
Może napisz czego konkretnie potrzebujesz.

Pozdrawiam
Go to the top of the page
+Quote Post
vokiel
post 18.06.2009, 07:34:55
Post #3





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Hej
Dzięki za odp.
Niezbyt dobrze opisałem problem, prawdopodobnie z powodu, że zbyt długo się z tym męczyłem.

Wynikiem działania miało być generowanie raportów dziennych. Moim problemem było chyba to, że chciałem zawrzeć jak najwięcej w jak najmniejszej liczbie zapytań/kwerend.

Udało mi się utworzyć raport z podraportami, tyle, że każdy podraport oparty na kwerendzie, a nie tak jak planowałem na powiązaniu z głównym raportem.
Do każdej listy szczegółów musiałem stworzyć mini-podraport oparty na kwerendzie. Sumy ogólne wyciągam jednym zapytaniem:
  1. SELECT
  2. IIf(KASY_FISKALNE.KASA_1 IS NULL,0,KASY_FISKALNE.KASA_1) AS KASA_1,
  3. IIf(KASY_FISKALNE.KASA_2 IS NULL,0,KASY_FISKALNE.KASA_1) AS KASA_2,
  4. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ=12 AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS ZALICZKI_WPLACONE,
  5. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ=11 AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS WPLATY_GOTOWKOWE,
  6. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ=2 AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS ZWROTY_VAT,
  7. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ=4 AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS DO_BANKU,
  8. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ=6 AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS ZAICZKI_WYDANE,
  9. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ=7 AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS ZWROTY_DO_PARAGONU,
  10. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ=5 AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS KW,
  11. (SELECT IIF(SUM(KWOTA) IS NULL , 0 , SUM(KWOTA)) FROM KASA WHERE RODZAJ IN (3,8,9,10) AND DateValue(DATA)=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)) AS FAKTURY
  12. FROM KASY_FISKALNE WHERE (((DateValue([DATA]))=DateValue(Forms!ROZLICZENIE_DNIA_PARAMETRY!data_wybrana)));


Przy okazji znalazłem jak pobrać wartość z pola formularza do kwerendy:)

Ale Twoje
  1. SELECT Tabela1.RODZAJ, Count(Tabela1.ID) AS PoliczOfID, Sum(Tabela1.KWOTA) AS SumaOfKWOTA
  2. FROM Tabela1 GROUP BY Tabela1.RODZAJ;
jest lepsze, po małym dostosowaniu:
  1. SELECT RODZAJE_OPERACJI.NAZWA AS NAZWA, Sum(KASA.KWOTA) AS SumaOfKWOTA
  2. FROM KASA LEFT JOIN RODZAJE_OPERACJI ON RODZAJE_OPERACJI.ID=KASA.RODZAJ
  3. GROUP BY RODZAJE_OPERACJI.NAZWA;

Jeszcze tylko nie rozumiem filozofii tworzenia wielokrotnych joinów. Jest jakoś inaczej, ale może dzisiaj mi się uda winksmiley.jpg

Ten post edytował vokiel 18.06.2009, 07:39:18


--------------------
Go to the top of the page
+Quote Post
Beatus
post 18.06.2009, 13:25:48
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 5.06.2009

Ostrzeżenie: (0%)
-----


Cóż, ja bym nie zastosowała takiego rozwiązania ponieważ jest ono "sztywne". Wszystkie bazy, które robię wymagają nieustannych modyfikacji. Pojawiają się jakieś nowe wytyczne, nowe potrzeby i muszę wprowadzać dodatkowe funkcjonalności. Zawsze więc staram się szukać czegoś dynamicznego, co będzie działało również wtedy gdy użytkownik wprowadzi RODZAJ625 chociaż niby miało być tylko 12. Listy też tworzę dynamiczne w oparciu o kwerendy z możliwością uzupełniania nawet wtedy gdy teoretycznie takich uzupełnień nie powinno być. W połowie przypadków jednak są. Jednak twoje realia pracy z bazą mogą być zupełnie inne.
Jeśli zaś chodzi o JOIN nie miałam potrzeby korzystania. To jest operator, który łączy dane z różnych tabel pod warunkiem, ze kolumny mają takie same parametry. I tylko tyle wiem. Czasem używam UNION aby pozbierać rozpierzchnięte w kilku exl rekordy do jednej bazy access. Takie porządki smile.gif
Pozdrawiam i powodzenia
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.05.2025 - 10:58