with dm.aq_D_dan do
      begin
        close;
        SQL.Clear;
        SQL.Add('select count(*) as cc from (select D_ID from D_dan where D_ID like ''%'+datetostr(date)+'%'') ');
        Open;
        cc:=cc+1;
        a:=inttostr(cc);
        len:=length(a);
        if len<3 then begin
          for j:=1 to 3-len do
            le:='0';
            a:=le+a;
          end;
        a:=datetostr(date)+a;
        edit3.text:=a
      end;这是一条关于订单号的  我先搜索当天订单号的条数。。然后通过下面的计算。。让订单号等于比如今天就是20100730001
是不是我select语句写错了?

解决方案 »

  1.   

    有些模糊,大概是否是这样,你想找到当天一张单据号像20100730001的。其实直接使用sql语句就可以的,你为啥按上述方法做呢。
    假如你的字段中有日期的,你可以转化日期格式啊。sql的:convert cast
    delphi:formatdatetime
      

  2.   


    我的SQL这一快一直不怎么样。。不会直接用SQL转换。。我是想先搜索当日的日期。比如20100801这天。搜索这天有多少条数据。如果是0条。。那么自动生成订单号001.。如果1条自动生成002
    然后通过计算。。让日期加上单号。。就成了20100801001。。然后自动填入单号内。
      

  3.   

    cc不能这样用的,估计你定义的cc是整型,打开数据库后,cc得赋值啊!cc:=fieldbyname('cc').asinteger;
      

  4.   

    SQL语句写错了,应该是这样:SQL.Add('select count(*) as cc from (select D_ID from D_dan where D_ID like ''%'+datetostr(date)+'%'') a');
      

  5.   

    呵呵。说我cc字段找不到。。我想问下。。如果我搜索当天有多少条记录。。请问sql怎么写?
      

  6.   

    你的单据表里应该有单据日期吧,可以这样写:
    sql.add('select count(*) as cc from D_dan where 单据日期字段名='''+formadatetime('yyyy-mm-dd',date)+'''');
    open;
    cc:=fieldbyname('cc').asinteger;这时cc就是当天单据数
      

  7.   

    从这个数据集里查询,必须定义一个别名:
    select count(*) from (select D_ID from D_dan where D_ID like '%20100730%') 别名我随便定义了个a,其他也可以
      

  8.   

    你要做数据库软件开发,应该加强SQL语句的学习
      

  9.   

      非常感谢 aimin (天剑)。。
      
      我刚刚无聊看了下别人发的帖子。。突然发现。。adoquery直接可以统计数据条数的
      adoquery.RecordCount  能直接得到
      不过还是想多学习下SQL语言哈
      select count(*) from (select D_ID from D_dan where D_ID like '%20100730%') 别名  这句话里面。。我怎么才能把count取出来呢?是用别名吗??
      

  10.   


    adoquery1.field[0].asinteger 就是 count(*)