我有一个可以打开多个实例的表单。在那里,我使用 SQL 查询从数据库(在本例中为绝对数据库)读取一些数据。然后我用数据填写一些变量,并在表单的生命周期内使用查询进行其他操作。
问题是,当我打开多个表单实例时,旧表单上的数据会更改为上次打开表单的值。
我在打开表单时创建了查询,所以我认为它们不会共享相同的数据。
我不使用自动创建的表单。
如何避免这种情况发生?
** 编辑 - 添加了一些代码 **
我创建的表格如下:
procedure TfrmMain.OpenFormsFunction(Sender: TObject);
var
Resultater: TfrmregResultat;
begin
// Some code for checking if forms are already open
// Locate record in table to be used as paramdata in the query in the newly opened form
DataX.tStevneHead.Locate('StevneNummer;GrenType', VarArrayOf([StevneNummer, GrenType), []);
Resultater := TfrmRegResultat.Create(nil);
Resultater.Show; // OnClose action for the form is caFree
end;
从表单的代码中截取
// decleared in implementation
Dato: TDate;
GrenType: string;
GrenRunder: integer;
MaxPoeng: integer;
procedure TfrmRegResultat.FormShow(Sender: TObject);
begin
//-- qStevneHead is a TABSQuery component on the form
//-- DataX is the name of my DataModule
with qStevneHead do
begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM StevneHead WHERE GrenType = :aGrenType AND StevneNummer = aStevneNummer';
ParamByName('aGrenType').AsString := DataX.tStevneHead.FieldByName('GrenType').Value;
ParamByName('aStevneNummer').AsString := DataX.tStevneHead.FieldByName('StevneNummer').Value;
Open;
end;
GrenRunder := qStevneHead.FieldByName('AntallRunder').Value;
Dato := qStevneHead.FieldByName('Dato').AsDateTime;
GrenType := qStevneHead.FieldByName('GrenType').Value;
MaxPoeng := qStevneHead.FieldByName('MaxPoeng').Value;
// More code to init stringgrid and other stuff on the form
end;