1、如何在查询(TADOQuery)中新增字段,并可以显示及修改值,从别的表计算统计中得出其值?
2、如何在查询中再进行第二次查询,比如之前查询了2007年至2008年的记录,再在这基础上再查询08年某个月的记录?

解决方案 »

  1.   

    1 看一下 ADOQuery1.fieldDefs.Add();用法,以些方法动态加列
       ADOQuery1.fieldDefs.Add('aa',ftInteger,0);2 可以用filter  ,具体用法自己查一下。
      ADOQuery1.open;
      ADOQuery1.filtered := False;
      ADOQuery1.filter   := 'month = 08';
      ADOQuery1.filtered := True;
      

  2.   

    TmpDS1是一个ADOQuery对象,则通过SQL语句新增字段如下TmpDS1.SQL.Text := 'Alter Table Allships Add Ship_CheckID Varchar(20)';
    TmpDS1.ExecSQL();
      

  3.   

    1、按照你给的方法我试过,ADOQuery1.fieldDefs.Add('aa',ftString,0);可是当我ADOQuery1.FieldByName('aa').AsString := 'hello';时提示ADOQuery1:Field 'aa' not found,我试着在后面加上ADOQuery1.fielddefs.Update; 提示:'标准表达式中数据类型不匹配',是不是我还有什么没有操作??2、用Filter,我之前也用过,可是一直报错,‘参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突’
    这是Access数据库的,我之前的查询是这样的
    select * from table1 where times>=cdate('+chr(39)+'2008-11-01'+Chr(39)+') and times<=cdate('+chr(39)+'2008-11-30'+Chr(39)+')之后filter是这样设置的
     ADOQuery1.filter  := times>=cdate('+chr(39)+'2008-11-01'+Chr(39)+') and times<=Cdate('+chr(39)+'2008-11-12'+Chr(39)+')';
    于是就有了上面的报错但是我试过执行:
    select * from table1 where times>='2008-11-01' and times<='2008-11-30' and times>='2008-11-01' and times<='2008-11-13' 却是正常的不知道为何故,还望高人指点
      

  4.   

    To:hulihui 你好,实际我上并不是要给表改数据结构,新增字段,只是为了在统计时新增一些计算列,并且列的值要从其他表中取
      

  5.   

    是ACCESS数据库吧
      ADOQuery1.filter  := 'times>=cdate('+quotedstr('2008-11-01')+') and times <=Cdate('+quotedstr('2008-11-12')+')';
      

  6.   


    问题1 例:SELECT ID,NAME,money1,money2, money1-money2 as money3 from tabel1  //money3在tabel1中是不存在的 那个 money3 (money1与money2的差) 就只能显示不能修改,和其它表联合查询也是一样的。 
    2:做一个循环以i=13为一圈 从0开始 。 
                   0.查询了2007年至2008年的记录;
                   1.(查询了2007年至2008年的记录) a left join (08年第1月的记录) b on  a.ID=b.ID
                              2.(查询了2007年至2008年的记录) a left join (08年第2月的记录) b on  a.ID=b.ID
                   3.同上(月份就可以取循环的那次数);
        如果做个可选的。 COMBOBOX1  (0...12)      属性style:=CsDropDownList
    为空时就 (月份 就可以取循环的那次数 i ) 
    不为空时 (月份 就取combobox1.text 同时把 i :=0 /strtoint(combobox1.text))以上只是建义  
                     
      

  7.   

    以上问题都已自行解决了,谢谢各位其中ADOQuery1.filter  := times>=cdate('+chr(39)+'2008-11-01'+Chr(39)+') and times <=Cdate('+chr(39)+'2008-11-12'+Chr(39)+')'; 应该是ADOQuery1.filter  := times>='+chr(39)+'2008-11-01'+Chr(39)+' and times <='+chr(39)+'2008-11-12'+Chr(39);这是Delphi本身的语法,之前我也是误入迷途了