Hi Barzy2x,
bei einem erneuten Aufruf einer Abfrage sollte diese, falls geöffnet zunächst geschlossen werden. Dein Problem liegt aber daran, dass das Property
SQL eine Liste ist, und Du bei jedem Add dort eine Zeile hinzufügst. Beim erneuten Aufruf sollte daher die Liste gecleart werden, allerdings nur, wenn das
SQL Statement sich ändert, ansonsten kann die Zeile einfach raus. Also:
Code:
procedure TTerminVerwaltung.BitBtn1Click(Sender: TObject);
begin
with Query1 do begin
if Active then
Close;
DatenbankOeffnen.Edit1.Text = 'Testtabelle.db'
ParamByName('CurDate').AsDate := date;
// nur wenn sich
SQL ändert
//
SQL.Clear;
//
SQL.Add('SELECT ...')
Open;
end
end;
Als Hinweis noch: die Zeile DatenbankOeffnen.Edit1.Text = 'Testtabelle.db' wird unnötigerweise bei jeder Aktualisierung der Abfrage durchlaufen und ist daher hier nicht gut platziert. Für das Requery bietet sich eine eigene Routine an, an die als Parameter den variablen Wert der Abfrage, also den Parameter der Abfrage erhält:
Code:
procedure RequeryQuery1(ADate: TDateTime);
begin
with Query1 do try
DisableControls; //friert eventuelle Anzeig in Grid o.ä. ein
if Active then
Close;
ParamByName('CurDate').AsDate := ADate;
Open;
finally
EnableControls;
end;
end;
Dann sähe Dein ButtonClick so aus:
Code:
procedure TTerminVerwaltung.BitBtn1Click(Sender: TObject);
begin
DatenbankOeffnen.Edit1.Text = 'Testtabelle.db';
RequeryQuery1(date);
end;
Vorteil dabei: Du kannst jederzeit per Code die Abfrage aktualisieren und die Routine macht auch wirklich nur, was draufsteht.
gruß, harrybo