Hallo @ all,
@hoppsen: Wo sollte ich denn ein Close einbauen? Dann zeigt mein Grid doch nichts mehr an, oder?
@marabu: Ich verstehe Deinen Einwand, allerdings wird die Routine ja immer durchlaufen, ob nun der
SQL Text = Select * From DATABASE lautet oder der
SQL TEXT wesentlich länger ist.
Die Verlangsamung der Eingabe geschieht erst dann, wenn eine Abfrage mit Where gemacht wurde. Was doch eigentlich mit meiner ONKEYPRESS Routine nichts zu tun hat, da die ja nur dann etwas ausführt, wenn Enter gedrückt wurde.
@hoika:
Delphi-Quellcode:
procedure TForm1.FindSQL(Sender: TObject);
var setzmerker :boolean;
begin
setzmerker:= False;
sqlmerker := 'SELECT * FROM retouren ';
if Edit5.Text <>'' then
begin
Sqlmerker := sqlmerker + 'WHERE (Retourennummer LIKE :retnr) ';
setzmerker := True;
end;
if Edit6.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND UPPER(Lieferant) LIKE UPPER (:lieferant) ' else
begin
sqlmerker := sqlmerker + 'WHERE UPPER(Lieferant) LIKE UPPER (:lieferant) ';
setzmerker := True;
end;
end;
if Edit7.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND UPPER (Kunde) LIKE UPPER (:kunde) ' else
begin
sqlmerker := sqlmerker + 'WHERE UPPER (Kunde) LIKE UPPER (:kunde) ';
setzmerker := True;
end;
end;
if Edit8.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND UPPER(Artikelbezeichnung) LIKE UPPER (:artikel) ' else
begin
sqlmerker := sqlmerker + 'WHERE UPPER (Artikelbezeichnung) LIKE UPPER(:artikel) ';
setzmerker := True;
end;
end;
if Edit9.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Artikelnummer LIKE :artikelnr) ' else
begin
sqlmerker := sqlmerker + 'WHERE (Artikelnummer LIKE :artikelnr) ';
setzmerker := True;
end;
end;
if Edit10.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND UPPER (Fehlerbeschreibung) LIKE UPPER (:fehler) ' else
begin
sqlmerker := sqlmerker + 'WHERE UPPER (Fehlerbeschreibung) LIKE UPPER (:fehler) ';
setzmerker := True;
end;
end;
if Edit11.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Fehlernummer LIKE :fehlernr) ' else
begin
sqlmerker := sqlmerker + 'WHERE (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 + 'WHERE (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 = :getauscht) ' else
begin
sqlmerker := sqlmerker + 'WHERE (Getauscht = :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 + 'WHERE (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 + 'WHERE (Datum >= :datum) ';
setzmerker := True;
end;
end;
if Edit16.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND UPPER (RMANummer) LIKE UPPER (:RMANr) ' else
begin
sqlmerker := sqlmerker + 'WHERE UPPER (RMANummer) LIKE UPPER (:RMANr) ';
setzmerker := True;
end;
end;
if Edit17.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND UPPER (Seriennummer) LIKE UPPER (:seriennr) ' else
begin
sqlmerker := sqlmerker + 'WHERE UPPER(Seriennummer) LIKE UPPER (:seriennr) ';
setzmerker := True;
end;
end;
if Edit18.Text <>'' then
begin
if setzmerker then Sqlmerker := sqlmerker + 'AND (Datum = :datum) ' else
begin
sqlmerker := sqlmerker + 'WHERE (Datum = :datum) ';
setzmerker := True;
end;
end;
end;
Der Fehler tritt aber bereits nach einer einzigen Eingabe in ein Editfeld (nach dem ENTER) auf.
Dann lautet der
SQL TEXT nur:
Select * From retouren WHERE UPPER (Kunde) LIKE UPPER (:kunde)
Drücke ich dann auf einen Button der mir wieder die
SQL = 'Select * From retouren ' setzt, dann geht auch die Eingabe wieder schnell.
Meiner Meinung läuft da etwas im Hintergrund was durch die eingeschränkte Suche ausgelöst wird.
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!