如下图,

解决方案 »

  1.   

    呵呵,这个可以动态生成SQL语句来实现。procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    sqlstr:string;
    begin
    self.ADOQuery1.Close;
    self.ADOQuery1.SQL.Clear;
    self.ADOQuery1.SQL.Add('select * from 表1  where 姓名='''+trim(self.edit1.text)+''''); //这里取edit1里面的姓名
    sqlstr:='';
    for i :=2 to self.ADOQuery1.FieldCount do //这里从2开始,第1个字段是姓名忽略了
      if self.ADOQuery1.Fields[i].Text='是'  then sqlstr:=sqlstr+','+self.ADOQuery1.Fields[i].FieldName;//如果是”是“就加入列表
    sqlstr:='select 姓名'+sqlstr+' from 表1  where 姓名='''+self.ADOQuery1.fieldbyname('姓名').AsString+'''';
    self.ADOQuery2.Close;
    self.ADOQuery2.SQL.Clear;
    self.adoquery2.sql.add(sqlstr);
    self.adoquery2.open;end;临时写的,没有测试。如果字段太多,还要考虑SQL语句有效长短的问题。
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    sqlstr:string;
    begin
    self.ADOQuery1.Close;
    self.ADOQuery1.SQL.Clear;
    self.ADOQuery1.SQL.Add('select * from 表1  where 姓名='''+trim(self.edit1.text)+''''); //这里取edit1里面的姓名
    self.adoquery1.open; //这个漏了
    sqlstr:='';
    for i :=2 to self.ADOQuery1.FieldCount do //这里从2开始,第1个字段是姓名忽略了
      if self.ADOQuery1.Fields[i].Text='是'  then sqlstr:=sqlstr+','+self.ADOQuery1.Fields[i].FieldName;//如果是”是“就加入列表
    sqlstr:='select 姓名'+sqlstr+' from 表1  where 姓名='''+self.ADOQuery1.fieldbyname('姓名').AsString+'''';
    self.ADOQuery2.Close;
    self.ADOQuery2.SQL.Clear;
    self.adoquery2.sql.add(sqlstr);
    self.adoquery2.open;end;