仓库管理系统,做入库登记时,我想让入库编号有一个固定的格式,如“RK-20100222-001”,前缀是RK(入库),中间为日期,最后为数字001,002,003逐渐递加。数据库中的入库编号字段名为StI_ID。现在我想的实现的是:单击增加按钮,在formshow时,将入库编号赋给edtStockInID.Text。如果不存在RK-20100222的记录,那么edtStockInID.Text就等于RK-20100222-001;如果存在RK-20100222的记录,那么就查找最大编号,然后edtStockInID.Text就等于最大编号加1。请问这个怎么实现?
现在程序能执行,但是每次formshow的时候,总提示错误“列名RK无效”。是不是这个符号‘-’有问题?我的代码有错误,请大家帮忙使劲修改,谢谢。    var
      lDate , lBillNo : string;
      lQry : TADOQuery;      lQry := TADOQuery.Create(nil);
      lQry.Connection := gADOConn;
      lDate := FormatDateTime('yyyymmdd',date);
      try
        with lQry do
        begin
          Close;
          SQL.Text := 'select StI_ID from TB_StockIn where left(StI_ID,11)='+'RK-'+lDate;
          Open;
          if  IsEmpty then
          begin
            lBillNo :='001' ;
            edtStockInID.Text :='RK-'+lDate+'-'+lBillNo;
          end
          else
          begin
            Close;
            SQL.Text := 'select max(StI_ID) from TB_StockIn where left(StI_ID,11)='+'RK-'+lDate;
            Open;
            lBillNo := IntToStr(StrToInt(copy(Fields[0].AsString,4,8))+1);
            case Length(lBillNo) of
            1: edtStockInID.Text :='RK-'+lDate+'-'+'00'+lBillNo;
            2: edtStockInID.Text :='RK-'+lDate+'-'+'0'+lBillNo;
            3: edtStockInID.Text :='RK-'+lDate+'-'+lBillNo;
            end;
          end;
        end;
        finally
          lQry.Free;
        end;

解决方案 »

  1.   

    SQL.Text := 'select StI_ID from TB_StockIn where left(StI_ID,11)='+'RK-'+lDate; 
    改为
    SQL.Text := 'select StI_ID from TB_StockIn where left(StI_ID,11)='''+'RK-'+''''+lDate; 
      

  2.   

    执行到这一句SQL.Text := 'select StI_ID from TB_StockIn where left(StI_ID,11)='''+'RK-'+''''+lDate;提示:第一行20100222处有语法错误。
      

  3.   

    应该是SQL.Text := 'select StI_ID from TB_StockIn where left(StI_ID,11)='''+'RK-'+lDate+'''';