[ prginfo @ 03.11.2009. 13:31 ] @
Koristim D2007 i kacim se sa njom na .GDB bazu
Kacenje je OK (podaci mi izlaze u DBGridu i sve je normalno povezano).

Kada zelim da radim upit imam sledeci problem:

upit:

begin
with QUERY do
begin
Close;
SQL.Clear;
SQL.Add('select * from TABELA');
SQL.Add('where POLJE like');
SQL.Add(QuotedStr(ANsiUpperCase(EDIT.Text)));
SQL.Add('%');
Prepare;
Open;
end;
TABELA.Locate('POLJE', QUERYPOLJE.Value,[]);
end;

Upit mi puca na delu

SQL.Add('%');

tj. kada uradim Open

javi mi sledecu gresku:

Dinamic SQl error.... SQL code=-104
Token unknown - line 4,column 1
%'.

Ovo mi radi na verziji Delphi 7.

U cemu je problem, gde gresim?

Hvala
[ priki @ 03.11.2009. 13:42 ] @
Code:

with QUERY do begin
  Close;
  SQL.Text := 'select * from TABELA'+#13+
              'where POLJE like '''+AnsiUpperCase(EDIT.Text)+'%''';
  Prepare;
  Open;
end;
[ prginfo @ 03.11.2009. 14:01 ] @
Sada mi radi pretraga.

Gde je bila greska, sta je razlika?

Javlja mi se drugi problem.

Kada radim takvu pretragu, u gridu bi trebali da mi se prikazuju samo podaci koji zadovoljavaju uslov. Medjutim, ovde se prikazuje mnogo vise podataka.

Hvala.
[ rambo @ 03.11.2009. 14:20 ] @
Greška je bila u tome što ti je znak % bio izvan navodnika gde se nalazi tekst za pretragu iz EDIT polja.

Ispravljeni deo tvog koda glasi:

SQL.Add(QuotedStr(ANsiUpperCase(EDIT.Text) + '%'));

Dakle, kada hoćeš da preko SQL upita prikažeš podatke gde sadržaj određenog polja počinje sa zadatim tekstom, onda u nastavku tog teksta dodaš znak %. U tvom primeru, pošto se tekst koji se traži nalazi u Edit polju, i pošto koristiš funkciju QuotedStr koja taj tekst stavlja pod apostrofe, onda moraš da % dodaš u okviru tih apostrofa, ne posle njih. Tu je bila tvoja greška, znak % se nalazio u sledećem redu, posle apostrofa.

Kada god imaš problem sa "dinamičkim" SQL upitima, odmah iza upita stavi jedan MessageBox kojim ćeš da prikažeš kompletan tekst upita na ekranu. Tako možeš da vidiš šta će se tačno izvršiti i da otkriješ eventualne greške. Ja takođe koristim neki eksterni program u kome napišem kompletan upit koji radi, pa ga onda u Delphi samo postavim na pravo mesto i "zaokružim" adekvatnim kodom. Za Interbase/Firebird je dobar i jednostavan za korišćenje IBExprert.

Inače, umesto ovakve konstrukcije (u kojoj direktno "dopisuješ" sadržaj SQL upita iz Edit polja) bolje je i pravilnije da koristiš parametre. Za pomoć oko toga, potraži malo ovde na forumu, već je bilo takvih tema, pogledaj malo po Delphi Helpu ili, u krajnjem slučaju, pitaj.
[ savkic @ 03.11.2009. 16:59 ] @
> Koristim D2007 i kacim se sa njom na .GDB bazu

Koji Windows imaš i koji interbase koristiš? Nije preporučljivo koristiti gdb ekstenziju, bolje uzmi .ib, .fb i slično.

> Kada radim takvu pretragu, u gridu bi trebali da mi se prikazuju samo podaci koji zadovoljavaju uslov. Medjutim, ovde se prikazuje mnogo vise podataka.

Server je sasvim sigurno dobro izvršio upit, pokaži tačan tekst upita i nekoliko primera podataka koji se vide a ne bi trebali da budu tu.