Strona 1 z 1

FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: czwartek, 19 maja 2011, 21:21
przez rafalskraba
Witam forumowiczów.

Stworzyłem w tabele jedna tabela KLIENCI zawiera następujące pola ID,NKL,NIP oraz drugą tabelę HORD która składa się z pól ID,NAME,CENA.
Jak w firebirdzie połączyć obie tabele aby wyświetlić np wszystkie zamówienia dla danego klienta. Dane z obydwu tablic bedą prezentowane
przy pomocy komponentu DBGrid.

Proszę o pomoc.

Pozdrawiam

Rafał

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: piątek, 20 maja 2011, 09:23
przez Corvis
Ale masz problem z budową zapytania SQL ??? Czyli nie wiesz jak zaprojektować bazę ?? Bo nie bardzo kumam.

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: piątek, 20 maja 2011, 15:19
przez rafalskraba
Zrobiłem zapytanie SQL łączące 2 tablice, skorzystałem przy tym z polecenia SQL JOIN, wszystko działa poprawnie w kontrolce DBGrid dane wyświetlają się poprawnie.

Odnośnie projektowania bazy danych utworzyłem dwie tabele jedna tabela to klienci gdzie będą wpisywane informacje dotyczące klientów, druga tabela zamówienia gdzie są wpisywane
informacje odnośnie zamówień klientów.
Moje pytanie jest następujące czy w drugiej tablicy można powielić np ID klienta aby jednoznacznie wyświetlić wszystkie zamówienia odnośnie klienta czy będzie to nadmiar szczęscia.

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: piątek, 20 maja 2011, 15:35
przez Corvis
Czyli Masz DbGrida gdzie sa Klienci i na dole chcesz miec drugiego z zamówieniami klienta ??

Chcesz, żeby to działało tak:

Wybierasz klienta i jeżeli klient ma zamówienia w 2 dbgridzie wyświetlą się zamówienia tylko tego klienta ??

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: piątek, 20 maja 2011, 22:11
przez rafalskraba
Wiesz co lepszym rozwiazaniem było by wybieranie klienta np z listy rozwijalnej StringList a w DBGridzie wyświetlane były by informacje
z połaczonych tabel bazy danych czyli klient->zamówienie->cena itp.

Co sądzisz o mojej propozycji.
Postaram sie jutro przesłać PrintScreena z formatki.

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: sobota, 21 maja 2011, 10:52
przez Corvis
Wyślij screena tej formatki. Ale to jest proste do zrobienia :-) Musisz tylko znać ID Klienta i po wybraniu klienta wywołać zapytanie z bazy np.

call pPokazZamowieniaKlienta(12); <- wyświetlenie zamówień za pomocą procedury składowanej dla klienta o ID = 12.

Napisz jeszcze jakich komponentów używasz tak jak jest w regulaminie działu.

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: czwartek, 26 maja 2011, 22:43
przez rafalskraba
Witaj Corvis
Baza danych Firebird, połączenie SQL Connection Zestawienie połączenia SimpleDataSet->DataSource

Połączenie 2 tablic bazy danych oraz wyświetlenie dla tego samego numeru klienta rekordów z pierwszej i drugiej tablicy:

Kod: Zaznacz cały
select HCLI.CLID, CLNAME, CLSTR, CLZIP, CLCIT, CLCOU  FROM HCLI JOIN LORD ON HCLI.CLID=LORD.ID


Poniżej przedstawiam screny z projektowanej bazy danych

Jak skonfigurować bazę danych aby numer klienta był automatycznie wprowadzany do odpowiedniej tablicy gdy go wprowadzę np w pierwszej tablicy.

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: niedziela, 29 maja 2011, 18:17
przez Corvis
No dobra to tak:

1. Tworzysz dla klientów:

Kod: Zaznacz cały
SqlDataSet - > DataSetProvider - > ClientDataSet - > DataSource - > DbGrid


Łączysz jak leci jedynie gdzie możesz mieć problem to w ClientDataSet wybierasz tam ProviderName ( UWAGA! Przy zmianie nazwy DataSetProvidera nie zostanie ona automatycznie zmieniona w ClientDataSecie )

Wbijasz zapytanie SQL do SqlDataSet. Robiąc -> ClientDataSet->Active = true; Zobaczysz rezultat zapytania.

2. Teraz twrzorzysz taki sam układ komponentów dla szczegółu klienta

Kod: Zaznacz cały
SqlDataSet -> DataSetProvider -> ClientDataSet -> DataSource -> DbGrid


3. I teraz aby po przewinięciu klienta zobaczyć szczegóły np. Zamówienia musisz w 1 zestawie komponentów odpowiadającym za klientów w ClientDataSet użyć metody OnAfterScroll.

A W niej wywołać zapytanie które wyświetli szczegóły np. (UWAGA !! PSEUDO KOD)

KOD cpp:     UKRYJ  
void __fastcall TFrmMain::ClientDataSet1AfterScroll(TDataSet *DataSet)
{
      String Sql = "Select *from Szczegoly where IdKlienta=" + String(ClientDataSetKlienci->FieldByName("Id")->AsInteger);
      SqlDataSetSzczegoly->CommandText = Sql;
      ClientDataSetSzczegoly->Active = true;
}


Wszystko będzie śmiagać.

Zaznaczam, że napisałem ci to bardzo ogólnie. Sposób zarządzania zapytaniami SQL zostawiam tobie. Osobiście polecam używanie procedur składowanych.

Pozdrawiam,

daj znać jak poszło.

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: poniedziałek, 30 maja 2011, 21:34
przez rafalskraba
Witaj Corvis zrobiłem tak jak opisałeś tzn. dodałem SQLDataSet, DataSetProvider, ClientDataSet, DataSource.

Jest mały problem, DataSetProvider we właściwościach DataSet być ustawiony tylko na SimpleDataSet1, ClientDataSet1, SQLDataSet1.
Przy ustawieniu DataSetProvider na SimpleDataSet1 pobierane jest zapytanie SQL z w/w DataSet.

Mozę ja mam coś poknocone z tą bazą danych kuknij na DataModule.

Re: FIREBIRD 2 tabele w bazie danych

Nowy postNapisane: poniedziałek, 30 maja 2011, 23:53
przez Corvis
Nie bardzo kumam :P dlatego napisze po swojemu:

SqlDataSetKlient - > DataSetProviderKlient - > ClientDataSetKlient - > DataSourceKlient

SqlDataSetSzczegoly - > DataSetProviderSzczegoly - > ClientDataSetSzczegoly - > DataSourceSzczegoly.

Tak masz mieć to zestawione

Co to jest SimpleDataSet po co tego używasz wogóle ??