[C++ Builder - Baza danych] komponent DBGrid

0

Witam,
mam problem z wyswietlaniem danych za relacyjnej bazy danych. Mianowicie mam dwie tabele:

Tabela1:
-Imie
-Nazwisko
-ID_grupy

Tabela2:
-ID
-Grupa

Oczywiscie relacja tutaj wynosi ID_grupy=ID i pojawia sie problem wyswietlania elementow z kolumny ID_grupy, poniewaz jak przystalo na relacje baz danych sa to liczby, czyli wyswietla mi numery ID z Tabeli2.

Moje pytanie brzmi: <b>Jak oprogramowac kolumne ID_grupy, aby wyswietlala dane w tej relacji z kolumny Nazwa.
</b>
0

Pojęcia nie mam o co Ci chodzi. Napisz to jeszcze raz bo gubię się w rozumowaniu.

0

OK, no wiec postaram sie opisac moj problem dokladniej.

Jesli mamy dwie tabele polaczone ze soba relacja w moim przypadku jest to relacja jeden do wielu. Wyglada ona tak: ID_grupy=ID (ID jest to ID z Tabeli2). Robi sie to po to, aby miec gotowa mozliwosc dodawania nazwy grupy do odpowieniego rekordu w Tebeli1.

Czyli wyglada to tak - przyklad:
Dane zawarte w Tabeli1:
-ID: 1,
-Imie: Andrzej,
-Nazwisko: Golota,
-ID_grupy: 2

Dane zawarte w Tabeli2:
-ID: 2
-Nazwa: Bokser

I teraz w moim przypadkum gdy wyswietlam dane w DBGrid z Tabeli1 otrzymuje takie wyniki:
-ID: 1,
-Imie: Andrzej,
-Nazwisko: Golota,
-ID_grupy: 2,

Chcialbym natomiast, aby ID_grupy pobieralo dana z Tabeli2 o nr. ID w tym przypakdu rownym 2 i zeby efekt wygladal tak:
-ID: 1,
-Imie: Andrzej,
-Nazwisko: Golota,
-ID_grupy: Bokser.

Podkreslam, ze relacja jest na 100% dobrze ustalona

0

DBGrid przechowuje dane TYLKO z jednej tabeli. DBGrid jest połączony z DataSource, które jest połączone z jakimś Query lub Table. Jezeli chesz taką reprezentację to dwa gridy połączone ze sobą na styl MastApp, BtOrders (popatrz sobie na tą aplikację).

Można też wrzucić dane do StringGrida, będzie on odpowiednikiem widoku.

0

Zgadza sie, myslalem, ze sprawe da sie prosciej rozwiac, bo DBGrid przechowuje mi dane z jednej tabeli, problem jest tylko z wyswietleniem, nie mozna zrobic tego cos w stylu: Tabela1->Field-> cos ??? = Tabela2-> cos ??? . Problem jest z dobraniem odpowiednich funkcji :-|

0

Nie po prostu DataSource przechowuje dane z jednej tabeli i koniec

0

No wlasnie, a ja mam dwa komponenty DataSource i kazdy z nich ma swojego TTable.
Jezeli nie da sie tego prosciej rozwiazac, to gdzie moglbym znaleŹĆ ta aplikacje ktora polecasz?

0

Kurde ja mam delphi, nie wiem czy builder ma MastApp.

Jakich komponentów używasz do łączenia się i jaką baze?

0

Jesli chodzi o MastApp, to ja nie slyszalem o tym i w pomocy buildera to nie widnieje, ale na ogol komponenty Delphi i Buildera sa bardzo podobne.
Baze utworzylem w Database Desktop i bezposrednio z komponentow DataSource podaje sciezke do plikow z baza, a komponent Table polaczony jest z Datasource i wszystko gra. To jest baza typu lokalnego.

0

Podam na przykładzie ZEOS 6.6.0 Beta

Tabela maintable i daytable
maintable :id, pole1, pole2
daytable: id, referid, pole1, pole2

TMainTable -> maintable
TDayTable -> daytable

DayTable->MasterSource := MainSrc;
DayTable->MasterFields := id; // maintable.id
DayTable->LinkedFields := referid;

dzięki temu tabela daytable zawiera wszytkie wartości, których referid = maintable.id, całość w czasie rzeczywistym.

0

Zrobilem to w troche inny sposob.
Prawym przyciskiem myszy na Tabela1 - > Fields Editor... - > New Field i to pole nazywa sie LookUp Field jeszcze tylko dodac pozostale pola przez Add Fields i poukladac kolejnosc i gotowe :-)

0

Korzystając ze standardowych komponentów DB buildera spokojnie możesz w gridzie wyświetlić dane z dwóch tabel.
1.Wystarczy Do właściwości SQL komponentu TQuery wrzucić zapytanko:

select t1.ID, t1.imie, t1.nazwisko, t2.nazwa from tabela1 t1
left join tabela2 t2 on t2.ID_grupy = t1.ID
(składnia zgodna z InterBase)

2.Następnie dodac fieldy - czyli field editor ->add

3.Podpiąc kwerendę do TDataSouce

  1. TDataSouce do TDBGrida

5.Jeśli dane z grida mają sie zapisywać to trzba jeszcze podpiąć do kwerendy TUpdateSQL wygenerować pola do Updatowania - dane bedą sie zapisywały tylko do tabela1, więc nie zaznaczasz w update fieldów z tabela2

I to wszystko
pozdrowionka:)

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