Sprawa wygląda następująco:
Program łączy się z bazą, wyświetla sobie w DBGrind1 tabelkę. Istnieją 3 Edity i Button.
Te Edity służą do podania danych, dzięki którym po kliknięciu w Button w DBGrind zostaną przefiltrowane dane.
I tak, w procedurze Button1.Click
var
//deklaruje zmienne
skad:string;
dokad:string;
data:string;
begin
// dla pewności czyszcze je
skad:='';
dokad:='';
data:='';
//wyłanczam i czyszcze IBQuery
IBQuery1.Active:=False;
IBQuery1.SQL.Clear;
//przypisuje zmienne
skad:=Edit5.Text;
dokad:=Edit6.Text;
data:=Edit7.Text;
// pewnie da się to zrobić inaczej, ja każdą możliwość na oddzielnym ifie napisałem ważne, żeby działało
// ten if działa, wyświetla się to co ma się wyświetlać
if( (skad='') and (dokad='') and (data='') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY');
// nie dziala, zapytanie jest dobre bo w IBConsole wyswietla wynik
if( (skad<>'') and (dokad<>'') and (data<>'') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY where SKAD='''+skad+''' and DOKAD='''+dokad+''' and DATA='''+data+'''');
// nie dziala, zapytanie jest dobre bo w IBConsole wyswietla wynik
if( (skad<>'') and (dokad<>'') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY where SKAD='''+skad+''' and DOKAD='''+dokad+'''');
// nie dziala, zapytanie jest dobre bo w IBConsole wyswietla wynik
if( (skad<>'') and (data<>'') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY where SKAD='''+skad+''' and DATA='''+data+'''');
// ten if działa, wyświetla się to co ma się wyświetlać
if( (skad<>'') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY where SKAD='''+skad+'''');
// nie dziala, zapytanie jest dobre bo w IBConsole wyswietla wynik
if( (dokad<>'') and (data<>'') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY where DOKAD='''+dokad+''' and DATA='''+data+'''');
// ten if działa, wyświetla się to co ma się wyświetlać
if( (dokad<>'') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY where DOKAD='''+dokad+'''');
// ten if działa, wyświetla się to co ma się wyświetlać
if( (data<>'') ) then
IBQuery1.SQL.Add('select ID_LOTY, SKAD, DOKAD, DATA from LOTY where DATA='''+data+'''');
// włanczam IBQuery po ustawieniu zapytania SQL w nim i odświerzam DBGrid
IBQuery1.Active:=True;
DBGrid1.Refresh;
end;
W IBConsole wszystkie zapytania działają.
Część IFów (tych że tak powiem bez ANDów) działa, reszta (z ANDami) nie działa.
W tych które nie działają wyskakuje błąd:
"Poject Project1.exe reised exception class EIBInterBaseError with message 'Dynamic SQL Error SQL error code = -104
Token unknown - line 2, char -1
select' Process stopped. Use Step or Run to continue.
Gdzie jest coś nie tak? Bo ja nie widzę błedu :/