Hallo,
habe 18 editfelder (Suchkriterien)
meine Datenbank hat ebenfalls 18 Felder
In jedem dieser Editfelder kann der User etwas eintragen.
Nach dem Drücken von Enter in einem Editfeld wird aus allen Feldern die nicht leer sind der
SQL Abfagestring gebaut.
Bis dahin läuft alles Super.
Nur mit einem Feld nicht.
Eines meiner Datenbankfelder ist ein Boolsches Feld.
Wenn der User in das entsprechende Editfeld ein Ja eingibt, dann soll die Datenbank nur alle Datensätze mit dem True Wert ausgeben.
Hier nun der Code:
Delphi-Quellcode:
procedure TForm1.Edit5KeyPress(Sender: TObject;
var Key: Char);
var pruefEingabe: integer;
s:
string;
begin
pruefEingabe:=ord(key);
if pruefEingabe=13
then //Enter-Taste gedrückt??
begin
FindSQL(sender);
with Query_Suchen
do
begin
active := false;
sql.clear;
sql.add(sqlmerker);
ParamCheck := true;
if Edit5.Text <>'
'
then
begin
s := Edit5.Text + '
%';
ParamByName ('
retnr').AsString := s;
end;
if Edit6.Text <>'
'
then
begin
s := Edit6.Text + '
%';
ParamByName ('
lieferant').AsString := s;
end;
if Edit7.Text <>'
'
then
begin
s := Edit7.Text + '
%';
ParamByName ('
kunde').AsString := s;
end;
if Edit8.Text <>'
'
then
begin
s := Edit8.Text + '
%';
ParamByName ('
artikel').AsString := s;
end;
if Edit9.Text <>'
'
then
begin
s := Edit9.Text + '
%';
ParamByName ('
artikelnr').AsString := s;
end;
if Edit10.Text <>'
'
then
begin
s := Edit10.Text + '
%';
ParamByName ('
fehler').AsString := s;
end;
if Edit11.Text <>'
'
then
begin
s := Edit11.Text + '
%';
ParamByName ('
fehlernr').AsString := s;
end;
if Edit12.Text <>'
'
then
begin
s := Edit12.Text + '
%';
ParamByName ('
status').AsString := s;
end;
if Edit13.Text <>'
'
then
begin // Hier könnte nun der Fehler folgen
if (Edit13.Text = '
True')
or (Edit13.Text = '
true')
or (Edit13.Text = '
ja')
or (Edit13.Text = '
Ja')
then ParamByName ('
getauscht').AsBoolean := True;
if (Edit13.Text = '
False')
or (Edit13.Text = '
false')
or (Edit13.Text = '
nein')
or (Edit13.Text = '
Nein')
then ParamByName ('
getauscht').AsBoolean := False;
end;
if Edit14.Text <>'
'
then
begin
ParamByName ('
datum').AsDate := StrToDate(Edit14.Text);
end;
if Edit15.Text <>'
'
then
begin
ParamByName ('
datum').AsDate := StrToDate(Edit15.Text);
end;
if Edit16.Text <>'
'
then
begin
s := Edit16.Text + '
%';
ParamByName ('
lieferantennr').AsString := s;
end;
if Edit17.Text <>'
'
then
begin
s := Edit17.Text + '
%';
ParamByName ('
kundennr').AsString := s;
end;
if Edit18.Text <>'
'
then
begin
ParamByName ('
datum').AsDate := StrToDate(Edit18.Text);
end;
active := true;
open;
end;
end;
end;
In dieser Procedure wird der String gebastelt
Delphi-Quellcode:
procedure TForm1.FindSQL(Sender: TObject);
var setzmerker :boolean;
begin
setzmerker:= False;
sqlmerker := 'SELECT * FROM retouren WHERE ';
if Edit5.Text <>'' then
begin
Sqlmerker := sqlmerker + '(Retourennummer LIKE :retnr) ';
setzmerker := True;
end;
if Edit6.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Lieferant LIKE :lieferant) ' else
begin
sqlmerker := sqlmerker + '(Lieferant LIKE :lieferant) ';
setzmerker := True;
end;
end;
if Edit7.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Kunde LIKE :kunde) ' else
begin
sqlmerker := sqlmerker + '(Kunde LIKE :kunde) ';
setzmerker := True;
end;
end;
if Edit8.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Artikel LIKE :artikel) ' else
begin
sqlmerker := sqlmerker + '(Artikel LIKE :artikel) ';
setzmerker := True;
end;
end;
if Edit9.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Artikelnummer LIKE :artikelnr) ' else
begin
sqlmerker := sqlmerker + '(Artikel LIKE :artikelnr) ';
setzmerker := True;
end;
end;
if Edit10.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Fehlerbeschreibung LIKE :fehler) ' else
begin
sqlmerker := sqlmerker + '(Fehlerbeschreibung LIKE :fehler) ';
setzmerker := True;
end;
end;
if Edit11.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Fehlernummer LIKE :fehlernr) ' else
begin
sqlmerker := sqlmerker + '(Fehlernummer LIKE :fehlernr) ';
setzmerker := True;
end;
end;
if Edit12.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Status LIKE :status) ' else
begin
sqlmerker := sqlmerker + '(Status LIKE :status) ';
setzmerker := True;
end;
end;
if (Edit13.Text = 'True') or (Edit13.Text = 'true') or (Edit13.Text = 'ja') or (Edit13.Text = 'Ja')
or (Edit13.Text = 'False') or (Edit13.Text = 'false') or (Edit13.Text = 'nein') or (Edit13.Text = 'Nein') then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Getauscht LIKE :getauscht) ' else
begin
sqlmerker := sqlmerker + '(Getauscht LIKE :getauscht) ';
setzmerker := True;
end;
end;
if Edit14.Text <>'' then
begin
Edit15.Text :='';
Edit18.Text :='';
if setzmerker then Sqlmerker := sqlmerker + 'AND (Datum <= :datum) ' else
begin
sqlmerker := sqlmerker + '(Datum <= :datum) ';
setzmerker := True;
end;
end;
if Edit15.Text <>'' then
begin
Edit18.Text := '';
if setzmerker then Sqlmerker := sqlmerker + 'AND (Datum >= :datum) ' else
begin
sqlmerker := sqlmerker + '(Datum >= :datum) ';
setzmerker := True;
end;
end;
if Edit16.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Lieferantennummer LIKE :lieferantnr) ' else
begin
sqlmerker := sqlmerker + '(Lieferantennummer LIKE :lieferantnr) ';
setzmerker := True;
end;
end;
if Edit17.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Kundennummer LIKE :kundennr) ' else
begin
sqlmerker := sqlmerker + '(Kundennummer LIKE :kundennr) ';
setzmerker := True;
end;
end;
if Edit18.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Datum = :datum) ' else
begin
sqlmerker := sqlmerker + '(Datum LIKE :datum) ';
setzmerker := True;
end;
end;
end;
Danke für Eure Hilfe
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!