ado.SQL.Clear;
    ado.sql.text := 'select max(lsh) from d_wzclxx';
    ado.open;  //如果表中无数据,需要处理这种情况。    if strtodate(LeftStr(ado.fieldbyname('lsh').asstring,10)) <> date() 总是报错,说: ado:Field 'lsh' not found.
我的表d_wzclxx中明明有lsh这一项的啊。

解决方案 »

  1.   


    ado.SQL.Clear;
        ado.sql.text := 'select max(lsh) maxdate from d_wzclxx';
        ado.open;  //如果表中无数据,需要处理这种情况。    if strtodate(LeftStr(ado.fieldbyname('maxdate').asstring,10)) <> date()
      

  2.   

    ado.sql.text := 'select max(lsh) as lsh from d_wzclxx';
      

  3.   

    ado.sql.text := 'select max(lsh) from d_wzclxx';
        ado.open;
    if strtodate(LeftStr(ado.fieldbyname('lsh').asstring,10)) <> date() 
    >>>第三行有毛病的 因为你选取的是最大的 并没有选取 lst 这个字段的所以ado.fieldbyname('lsh')错误
    应该select max(lsh) as  aa from d_wzclxx
    if strtodate(LeftStr(ado.fieldbyname('aa').asstring,10)) <> date() 
      

  4.   

    谢谢三位,这个问题已解决。
    顺便再问个问题(不好意思,实在是没有分了)。
    同一个函数:
    procedure TForm1.ButtonInPutClick(Sender: TObject);
    var
    str : string;    //用以存储生成的流水号;begin    ado.SQL.Clear;
        ado.sql.text := 'select max(lsh) as maxlsh from d_wzclxx ';
        ado.open;  
        if strtodate(LeftStr(ado.fieldbyname('maxlsh').asstring,10)) <> date() then
           begin
            str := datetostr(date()) + '001';
           end
        else begin
            str := rightstr(ado.fieldbyname('maxlsh').asstring,3);
            str := inttostr(strtoint(str) + 1);
            str := datetostr(date()) + str;
        end;  end;
    运行就报错,说:''is not a valid integer value.
    我查看了,最后中的str都是'',我数据库中有值的啊
    如:lsh=‘2003-10-11951’,
    这是怎么回事啊?
      

  5.   

    有以下几个错误:
    1、当运行str := inttostr(strtoint(str) + 1);结果可能不是3位数,例如原来是lsh=‘2003-10-11002’,那么运行后str='3';你要判断一下str,不够位数前面要补0。
    例如for i := 2 to length(str) do str := '0'+str;2、你这个流水号在并行方面可能会出问题。如果有很多人同时执行取得流水号,他们取得的流水号是一样的,这样就不能保证流水号唯一。3、为什么str=''我现在还没看出来。
      

  6.   

    if strtodate(LeftStr(ado.fields(0).asstring,10)) <> date() 
      

  7.   

    谢谢hongjg(阿谷)。
    是啊,我忽略了第一种情况,这的确是个问题。
    第二种情况,我也考虑到了,我想最终可能会通过事务或者触发器来解决,但目前还没有什么思路,先试一试这种方法(我虽然在做项目,但却是刚开始学)。能不能给出一个好的方法解决那?
      

  8.   

    to delphiseabird:
    strtodate(LeftStr(ado.fieldbyname('maxlsh').asstring,10)) <> date() 没有问题的,
    我测试过的,让它显示在一个edit上得到正确的结果。
    我想问题在后面。
    p.s.
    我用strtodate(LeftStr(ado.fields(0).asstring,10)) <> date()反而不行。
      

  9.   

    问题解决了,谢谢大家。
    我在数据库中设置lsh字段是char(16),而流水号只用了13个char,sql server在后面自动补了空格,所以就出现了str=''的情况,呵呵,折腾了一下午。