如何实现:相同的查询但不同的连接

时间:2014-06-29 02:48:15

标签: delphi

我只有连接更改时才有相同的查询:

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;
.......

这是一个很长的路要走,所以我想知道这是否可以用任何其他优化的方式完成,所以我不必重新编写相同的查询?

1 个答案:

答案 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时,你显然想知道重复的代码是不错的。每当您发现自己使用不同的对象编写基本相同的代码时,请考虑编写一个包含重复代码的过程(或函数),并在对象上作为参数进行操作。