刚学DELPHI两天,动手做了一个小程序.数据库access,表只有一个,名称是sj,现在要实现"性别"."民族"."所在地区"."年龄阶段"四个字段的任意组合综合查询.前三个字段好办,数据库中有现成的,但"年龄阶段"分了四个阶段让我比较头痛!我实现的办法是条件累加,即让用户自己累加条件.如:select * from sj where &getstr;其中getstr是用户自己选择添加的条件.现在的问题是:1、年龄无法写入库中。我用的是当前日期减数据库中出生年月(csny)字段的方法:(年龄字段(nl)在建库时已在表中,是个空字段)。
update sj set nl =strtoint(copy(datetostr(date),1,4))-strtoint(copy(datetostr(csny),1,4));
运行时老编译不过去,是不是还要加个循环呀?2、条件累加时,edit1.text = edit1.text+ "and" +combobox1.text +combobox2.text +edit2.text;
               getstr := edit1.text
 用户可以添加一次查询条件也可以添加几次。其中,combobox1中是字段名称,combobox2中是条件,如:= < > like等,edit2中是用户自己输的值。数据显示用的是DBgrid,控件用的是ADOQuery,datasouce;请高手们不吝指教!(别骂我笨,呵呵!)

解决方案 »

  1.   

    1、sql:='update sj set nl =getdate()-csny';
    2、'select * from sj where 1=1 '+getstr你会发现方便不少
      

  2.   

    update sj set nl=dateiff(year,csny,getdate())
      

  3.   

    select * from table where 1>0 and 累加条件吧
      

  4.   

    年龄问题我已解决,用的方法较笨: nl=inttostr(date-form4.adoquery1.fieldbyname('csny').value)/365
    编译过去了,但在运行程序的时候,报"invalid variant type conversion"错,我一点头绪都没有,不知道是那里错了,是程序的问题么?请大家给予指点!!
      

  5.   

    nl=inttostr(date-form4.adoquery1.fieldbyname('csny').value)/365
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    nl=inttostr(date-form4.adoquery1.fieldbyname('csny').asinteger)/365
      

  6.   

    楼上的兄弟不行呀,我用你给我的语句报错提示:there is no overloaded version of 'inttostr' that can be called with these arguments.
    我完整的语句是这样的:
    form4.adoquery1.sql.add('update sj set nl="'nl=inttostr(date-form4.adoquery1.fieldbyname('csny').value)/365'" ');
    另外问一句,什么控件可以显示表中的所有字段名称,而且是汉字的,如表中字段是"XM",我想在控件中显示"XM"为中文的"姓名"字段,是不是要编写代码呀?能帮忙么?