Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Dane, dbgrid i sql - prośba o radę

69 views
Skip to first unread message

lordbz

unread,
Jul 28, 2018, 6:42:14 AM7/28/18
to
Witam grupowiczów


Mimo upału trzeba starać się myśleć :-) Myślę ale .... proszę o poradę

Jest sobie kodzik:

////
with IBQuery, SQL do
begin
Close;
Clear;
Add('SELECT ucz.imie, ucz.nazwisko, ucz.id_uczestnik, uczestzaj.id_zajecia FROM instruk,ucz, uczestzaj ');
Add('WHERE INSTRUK.id_instruk =:id_instruk AND uczestzaj.id_uczestnik = UCZ.id_uczestnik AND UCZESTZAJ.id_instruk = INSTRUK.id_instruk ');
ParamByName('id_instruk').AsString := IntToStr(dbtxtID_INSTRUK.Field.Value);

Open;

end;


// i po kodziku

1. baza firebird 2.5
2. tabele: ucz, instruk, uczestzaj
3. jeden człowieczek z tabeli ucz może mieć jednego lub więcej instruktora z tabeli instruk (poprzez uczestzaj)

Obsługiwacz programu klika na Grida na wybrany wyświetlany rekord (dla zdarzenia OnCellClick) i ten wybrany rekord (jego wartość pola id_instruk) wyświetla się w dbtxt . Proste !

Oczywiście dataset dla DBGrida i dbtxt wskazuje to samo źródło.

Skoro DBGrid służy do wyświetlenia danych ale nie przetrzymuje danych jako takich (tu mamy dataseta) to czy bezpiecznie jest pobrać wartość z dbtxt (która się pojawi przecież po kliknięciu jakiegoś rekordu na siatce) celem dalszej obróbki ???

Np: pobieram sobie wskazaną przez dbtxt wartość id_instruk i wykonuję update innej tabel.
Wydawać by się mogło że jest bezpiecznie ale czuję jakiś wewnętrzny niepokój ;-)

pozdrawiam

Przemek


J-23

unread,
Aug 2, 2018, 2:54:49 PM8/2/18
to
W dniu 28.07.2018 o 12:42, lordbz pisze:
> Witam grupowiczów
>
>
> Mimo upału trzeba starać się myśleć :-) Myślę ale .... proszę o poradę
>
> Jest sobie kodzik:
>
> ////
> with IBQuery, SQL do
> begin
> Close;
> Clear;
> Add('SELECT ucz.imie, ucz.nazwisko, ucz.id_uczestnik, uczestzaj.id_zajecia FROM instruk,ucz, uczestzaj ');
> Add('WHERE INSTRUK.id_instruk =:id_instruk AND uczestzaj.id_uczestnik = UCZ.id_uczestnik AND UCZESTZAJ.id_instruk = INSTRUK.id_instruk ');
> ParamByName('id_instruk').AsString := IntToStr(dbtxtID_INSTRUK.Field.Value);
>
> Open;
>
> end;
>
>
> // i po kodziku
>
> 1. baza firebird 2.5
> 2. tabele: ucz, instruk, uczestzaj
> 3. jeden człowieczek z tabeli ucz może mieć jednego lub więcej instruktora z tabeli instruk (poprzez uczestzaj)
>
> Obsługiwacz programu klika na Grida na wybrany wyświetlany rekord (dla zdarzenia OnCellClick) i ten wybrany rekord (jego wartość pola id_instruk) wyświetla się w dbtxt . Proste !
>
> Oczywiście dataset dla DBGrida i dbtxt wskazuje to samo źródło.

Skoro wskazuje to samo źródło to jest to bezpieczne bo kontrolka dbtxt
jest z gatunku DB (o ile cię dobrze zrozumiałem)

A to oznacza że kontrolka DB steruje DataSetem równie dobrze możesz
odwołać się bezpośrednio do DataSet i będziesz miał tą samą wartość
która jest w dbtxt.

>
> Skoro DBGrid służy do wyświetlenia danych ale nie przetrzymuje danych jako takich (tu mamy dataseta) to czy bezpiecznie jest pobrać wartość z dbtxt (która się pojawi przecież po kliknięciu jakiegoś rekordu na siatce) celem dalszej obróbki ???
>

Tak jak pisałem wyżej

Pozdrawiam
J-23

wloochacz

unread,
Aug 3, 2018, 4:21:00 PM8/3/18
to
W dniu 2018-07-28 o 12:42, lordbz pisze:
> Skoro DBGrid służy do wyświetlenia danych ale nie przetrzymuje danych jako takich (tu mamy dataseta) to czy bezpiecznie jest pobrać wartość z dbtxt (która się pojawi przecież po kliknięciu jakiegoś rekordu na siatce) celem dalszej obróbki ???
>
> Np: pobieram sobie wskazaną przez dbtxt wartość id_instruk i wykonuję update innej tabel.
> Wydawać by się mogło że jest bezpiecznie ale czuję jakiś wewnętrzny niepokój;-)

Wszystko będzie działać, do momentu aż nie obsłużysz zdarzenia OnGetText
pola DataSetu.
Czyli coś takiego:
DataSet.FieldByName('id_instruk').OnGetText := MetodaObslugiZdarzenia;

I jeśli ta metoda MetodaObslugiZdarzenia będzie cokolwiek robiła z
wartością do wyświetlania, to taka wartość pojawi się we wszystkich
kontrolkach dbAware (dbGrid, dbTextEdit, itd.).

I nie będziesz mógł jej wprost użyć jako parametr zapytania.
Dlatego (i nie tylko dlatego) po prostu lepiej pozyskać dane
bezpośrednio z DataSeta, a kontrolki dbAware zostawić do prezentacji
danych...


--
wloochacz

lordbz

unread,
Aug 6, 2018, 6:28:52 AM8/6/18
to
Dziękuję :-) to mi bardzo pomaga ;-). Okazuje się że przeczucie mnie nie myliło. :-)Brakuje mi wiedzy. Pozdrawiam
0 new messages