problem łączenia tabel

0

Witam

Mam 3 tabele:
Hurtownia_A
Hurtownia_B
Moja_Baza

W tabeli Hurtownia_A znajdują się następujące kolumny LP, Kod_producenta, kod_hurtowni, cena
W tabeli Hurtownia_B znajdują się kolumny LP, Kod_producenta, kod_hurtowni, cena
W tabeli Moja_Baza znajdują się kolumny LP, nazwa_produktu, Kod_producenta, kod_hurtowni_A, kod_hurtowni_B

Chce teraz wyświetlić na ekranie (w komponencie DBGrid) całą zawartość tabeli Moja_Baza + cena hurtowni A + cena hurtowni B

Kod producenta jest identyczny (dla danego produktu) we wszystkich 3-ech tabelach.

Niestety kiedy próbuje wykonać zapytanie SQL następującym kodem wówczas moja aplikacja przestaje odpowiadać (krótko mówiąc "wiesza się"). Co robię źle ??
A oto kod mojego zapytania MySQL:

QueryStr:= 'select Moja_Baza.* , Hurtownia_B.Cena, Hurtownia_A.Cena FROM NB_Pamieci_DDR INNER JOIN Hurtownia_B ON Moja_Baza.Kod_Producenta=Hurtownia_B.Kod_Producenta INNER JOIN Hurtownia_A ON Moja_Baza.Kod_Producenta=Hurtownia_A.Kod_Producenta';
0

Masz błąd w zapytaniu:

 select Moja_Baza.* , Hurtownia_B.Cena, Hurtownia_A.Cena FROM Moja_Baza -- było: NB_Pamieci_DDR 
INNER JOIN Hurtownia_B ON Moja_Baza.Kod_Producenta=Hurtownia_B.Kod_Producenta 
INNER JOIN Hurtownia_A ON Moja_Baza.Kod_Producenta=Hurtownia_A.Kod_Producenta

Pomijając powyższe, jeżeli aplikacja "się wiesza", to masz również błędy w samej aplikacji. Aplikacja nie powinna się wieszać tylko zwrócić komunikat o błędzie.

edit: mógłbyś też popracować nad nazewnictwem: Moja_Baza jest tabelą a nie bazą, jak rozumiem przechowujesz tam informacje o pozycjach magazynowych...

0

Pomijając powyższe, jeżeli aplikacja "się wiesza", to masz również błędy w samej aplikacji. Aplikacja nie powinna się wieszać tylko zwrócić komunikat o błędzie.

  • Akurat u mnie niewyświetla się żaden komunikat za to w menedźeże zadań windows przy aplikacji widze tylko BAK ODPOWIEDZI a w zakładce z procesami dosyć szybko rośnie ilość zajmowanego przez aplikację ramu. Problem wystepuje jedynie w tym miejscu aplikacji gdzie jest wywoływany ów komunikat.

Błąd który dostrzegłeś to zwykłe przeoczenie podczas przepisywania na forum. Ale dzięki za spostrzeżenie, szkoda tylko że nie mogę już zedytowac poprzedniego posta w celu poprawy tego przeoczenia. W każdym razie nie tu leży błąd

edit: mógłbyś też popracować nad nazewnictwem: Moja_Baza jest tabelą a nie bazą, jak rozumiem przechowujesz tam informacje o pozycjach magazynowych...
tak, "Moja_Baza" jest tabelą zawierającą wszystkie produkty które mam w ofercie, nie zawiera natomiast cen (ponieważ te zbyt często się zmieniają), poza tym moja aplikacja ma porównywać ceny (na razie) z dwóch (a w niedługim czasie z trzech) hurtowni po to aby wiedzieć gdzie zamówić jak najtaniej produkt który później zostanie sprzedany klientowi.

0

Po pierwsze zawsze powinieneś sprawdzać zapytanie bezpośrednio w programie (webadmin) bez korzystania z Twojej aplikacji.
Tam wpisując zapytanie uzyskasz informacje czy coś napisałeś złe co do nazw.
Po drugie aby ta baza była szybsza staraj się nie używać typów * , a wypisz nazwy pól jakie chcesz.
Na początek zażądają tylko np ID i posowaj sie krok po kroku.
Czasami ten błąd to jakaś śmieszna literowka.
Jest wiele szkół co do rozpisywania tabel , lecz musisz sam do tego dojść ja Ci to będzie wygodnie.
Np. Tabela. Produkty: Pola: prodid, prodname, prodcena, itd....
Customer. Pola : custid, custname, custphone, Itd
Wtedy będzie można bardzo łatwo znaleźć po nazwie co to jest... Ale to tylko taka wzmianka

0

Po drugie aby ta baza była szybsza staraj się nie używać typów * , a wypisz nazwy pól jakie chcesz.

  • w miejscu gdzie zastosowałem * potrzebuje wyświetlić wszystko z wyjątkiem 1 kolumny która tak naprawdę jest mi obojętna (może się wyświetlać ale nie musi). Dlatego w pierwszej wersji polecenia sql (zgodnie z tym co sugerujesz) wypisałem wszystkie kolumny zamiast *. Niestety w takim wypadku kompilator się buntuje ponieważ długość polecenia sql przekroczyła 255 znaków, z tego też powodu zostałem zmuszony do skrócenia długości polecenia poprzez zastosowanie *

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