我只有连接更改时才有相同的查询:
if DataModule1.1_CONNECTION.Connected = true
then begin
DataModule1.ZAM_GESLO.SQL.Text:='select user,pwd from users where user = :a';
DataModule1.ZAM_GESLO.Params.ParamByName('a').AsString := DataModule1.LOGIN_QUERY.FieldByName('user').AsString;
DataModule1.ZAM_GESLO.Open;
cxGrid1.ActiveLevel.GridView := MYGRIDVIEW1;
end else
if DataModule1.2_CONNECTION.Connected = true
then begin
DataModule1.ZAM_GESLO.SQL.Text:='select user,pwd from users where user = :a';
DataModule1.ZAM_GESLO.Params.ParamByName('a').AsString := DataModule1.LOGIN_QUERY.FieldByName('user').AsString;
DataModule1.ZAM_GESLO.Open;
cxGrid1.ActiveLevel.GridView := MYGRIDVIEW2;
end;
.......
这是一个很长的路要走,所以我想知道这是否可以用任何其他优化的方式完成,所以我不必重新编写相同的查询?
答案 0 :(得分:0)
要保存重复的代码,您可以向表单添加一个过程
procedure TxForm.UseDataSet(ADataSet : TxDataSet; AUserName : String);
begin
if ADataSet.Active then
ADataSet.Close;
ADataSet.SQL.Text:='select user, pwd from users where user = :a';
ADataSet.Params.ParamByName('a').AsString := AUser;
ADataSet.Open;
cxGrid1.ActiveLevel.GridView := AGridView;
end;
注意:我已经使用了" x"在ADataset参数的类型中,因为我不知道您使用哪种类型的数据集,同样也是您的Form类型。
然后,您可以将代码重写为
if DataModule1.1_CONNECTION.Connected then
begin
UseDataSet(DataModule1.ZAM_GESLO,
DataModule1.LOGIN_QUERY.FieldByName('user').AsString);
end
else
if DataModule1.2_CONNECTION.Connected then
begin
UseDataSet(DataModule1.ZAM_GESLO,
DataModule1.LOGIN_QUERY.FieldByName('user').AsString);
end;
顺便说一下,当你问你的q时,你显然想知道重复的代码是不错的。每当您发现自己使用不同的对象编写基本相同的代码时,请考虑编写一个包含重复代码的过程(或函数),并在对象上作为参数进行操作。