DBLookupComboBox problemy z wyswietlaniem danych

0

Witam!!!

Mam mały problem. Może ktoś znajdzie chwilkę i mi pomoże.

Mam sobie 2 DBLookupCombobox-y i button OK, tak jak na poniższym rysunku
http://img495.imageshack.us/my.php?image=12zv1.jpg

Pod 1 DBComboBox podpiąłem ADOQuery1 z zapytaniem select nazwa from kierunek; i wszystko gra wyświetlają mi się kierunki
Pod 2 DBComboBox podpiąłem ADOQuery2 z zapytaniem select nazwa from specjalnosc where nazwa='+DBLookupComboBox1.text+'

Chcę aby po naciśnieciu guzika OK wyświetliły mi się wszystkie specjalności, ale te należące do danego kierunku, który wybieram z pierwszego DBLookupCombobox-a. Wszystko podpiąłem jak należy (tak mi się wydaje a w drugim combo nic mi sie nie wyświetla:(

Pomóżcie.

Pozdrawiam
rajki

0
  1. słyszałeś o parametrach w zapytaniach?
  2. zobacz sobie jak wygląda prawidłowe zapytanie SQLowe, gdzie w warunku porównujesz pole textowe do wartości

SELECT pole FROM tabela WHERE pole_textowe = 'wartosc'

  1. Popatrz na samo zapytanie i jak myślisz ile rekordów otrzymasz? Mogę Ci odpowiedzieć bez znajomości zawartości bazy jeden albo zero

SELECT nazwa FROM specjalnosc WHERE nazwa = ' + DBLookupComboBox1.text

0

Ok moj błąd w select powinno być tak: select id_kierunku from kierunek where nazwa='+DBlookupComboBox.text+'
co nie zmienia faktu że i tak mi nie działa :(

0

daj po prostu kod tego zapytania skopiowany z edytora Delphi, cały razem z Query.Add(....

0

oto moja forma i komponenty jakie mam na niej :http://img381.imageshack.us/my.php?image=26uh.jpg
W ADO Query1 w SQL mam takie zapytanie: select nazwa from kierunek
W Ado Query 2 w SQL mam takie zapytanie select nazwa from specjalnosc where
id_kier=(select id_kier from kierunek where nazwa='+dblckierunek.text+')

</b>
Prawie wszystkie opcje ustawiałem przez Object Inspectora. Oto zrzutu:

  1. Pierwszy DBLookupComboBox http://img236.imageshack.us/my.php?image=39ut.jpg
  2. Drugi DBLookupComboBox http://img236.imageshack.us/my.php?image=44it.jpg

Natomiast dla kontrolki ADO Query 1 wpisałem tylko w Object Inspectorze opcje SQL, oczywiście połaczenie i dałem Active na true i po odpleniu sie mi wyswietlaja pozycje w combo. Natmiat pod guzikiem mam kod qspecjalnosc.Active:=true; i niestety w drugim combo się nic nie wyświetla :(

0
  1. jak już to SELECT nazwa FROM specjalnosc WHERE
    id_kier IN (SELECT id_kier FROM kierunek WHERE nazwa='+dblckierunek.text+')

  2. czy treść tych zapytań wpisujesz na sztywno w OI czy w kodzie?

0

1 Select jest poprawny. Dlaczego wg Ciebie zły??? Nie rozumiem
2. SQl wpisuje w Object Inspectorze nie w kodzie. Czy może mieć to jakieś znaczenie?

0
rajki napisał(a)

1 Select jest poprawny. Dlaczego wg Ciebie zły??? Nie rozumiem

jeśli podzapytanie zwraca zawsze tylko jeden rekord to po co w ogóle jest? a jeśli zwraca więcej to powinno byc IN bo zwracany jest zbiór a nie konkretna wartość

  1. SQl wpisuje w Object Inspectorze nie w kodzie. Czy może mieć to jakieś znaczenie?

tak i to nawet duże bo nie bierze wartości z dblckierunek tylko porównuje nazwe z ciągiem '+dblckierunek.text+'

0

Wg mnie moje zapytanie jest OK. Zresztą popatrz sam http://img217.imageshack.us/my.php?image=16bq3.jpg
Robi ono to co dokładnie chce :) Może można zrobić to prościej, tego nie neguję :)
Natomiast drugą Twoją uwagę zaraz sprawdzę i zrobie to query w kodzie. Dziekuję za pomoc :)

Zrobiłem to w kodzie tylko nie chce mi sie skompilować. Zobacz http://img379.imageshack.us/my.php?image=11zx.jpg
Próbowałem już różne kombinacje z nawiasami, apostrofami i zawsze mam jakis błąd.

0
SQL := 'SELECT nazwa FROM specjalnosc WHERE id_kier = (SELECT id_kier FROM kierunek WHERE nazwa = ' + QuotedStr(dblckierunek.Text) + ')';

ale lepiej stosować parametry

SQL := 'SELECT nazwa FROM specjalnosc WHERE id_kier = (SELECT id_kier FROM kierunek WHERE nazwa = :nazwa)';
ParamByName('nazwa').AsString := dblckierunek.Text;

no i pytanie pozostaje wiesz, czemu to nie działało?? (chodzi mi o SQLa wpisanego w OI)

a i jeszcze jedno nie ExecSQL tylko Open - wtedy Active := True nie będzie potrzebne. ExecSQL jest do zapytań zmieniających dane a Open do pobierających

0

Zrobiłem tak jak napisałeś w 1 sposobie, tylko dalej się nie kompiluje. Zobacz http://img414.imageshack.us/my.php?image=17lz.jpg

0

Myślec i czytać co kompilator wywala!

SQL.Clear;
SQL.Add := 'SELECT nazwa FROM specjalnosc WHERE id_kier = (SELECT id_kier FROM kierunek WHERE nazwa = ' + QuotedStr(dblckierunek.Text) + ')';
Open;
0

Tu znowu ja ;) Wkeiłem ten kod od Ciebie i znowu się nie kompiluje :( http://img491.imageshack.us/my.php?image=14jm.jpg</url>
Weź mnie oświeć jak masz jeszcze trochę cierpliwości co tu jest grane :)

0

która to jest 46 lnijka??

daj może cały kod unitu i weź go w znaczniki < delphi> < /delphi>

0

W końcu doszedłem jak to powinno być. Oto rozwiązanie:

var
zapytanie:string;
begin
zapytanie:='SELECT nazwa FROM specjalnosc WHERE id_kier = (SELECT id_kier FROM kierunek WHERE nazwa = ' + QuotedStr(dblckierunek.Text) + ')';
qspecjalnosc.SQL.Clear;
qspecjalnosc.SQL.Add(zapytanie);
qspecjalnosc.Open;
end;

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