Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.399 pregleda

Najnovija ↓

IB D2007 i greska u SQL upitu 03.11.2009. u 14:31 · pre 206 meseci #1
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
Re: IB D2007 i greska u SQL upitu 03.11.2009. u 14:42 · pre 206 meseci #2
Code:

with QUERY do begin
  Close;
  SQL.Text := 'select * from TABELA'+#13+
              'where POLJE like '''+AnsiUpperCase(EDIT.Text)+'%''';
  Prepare;
  Open;
end;
Re: IB D2007 i greska u SQL upitu 03.11.2009. u 15:01 · pre 206 meseci #3
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.
Re: IB D2007 i greska u SQL upitu 03.11.2009. u 15:20 · pre 206 meseci #4
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.
Potpis
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
Re: IB D2007 i greska u SQL upitu 03.11.2009. u 17:59 · pre 206 meseci #5
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme