SQL查询的范围在表单的多个实例中

时间:2013-04-20 17:52:14

标签: sql delphi delphi-xe3

我有一个打开多个实例的表单。在那里,我使用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;

1 个答案:

答案 0 :(得分:1)

问题似乎是你正在使用全局变量。将它们更改为表单的字段,您的问题应该得到解决。 IOW,现在你已经

implementation

var
  Dato:        TDate;
  GrenType:    string;
  GrenRunder:  integer;
  MaxPoeng:    integer;

将其更改为

type
  TfrmRegResultat = class(...)
  ...
  private
    Dato:        TDate;
    GrenType:    string;
    GrenRunder:  integer;
    MaxPoeng:    integer;
   ...
  end;

如果您需要从程序的其他部分(即主窗体)访问值,则将它们设为公共属性或字段,并通过当前活动的表单变量访问它们。