程序如下,编译通过,但运行时总是说工资单号重复,出错。
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  maxid : String;
begin
  AdoifExist.sql.clear;
  AdoifExist.sql.add('select * from 工资单 where 工资单号 like '+'''' + formatdatetime('yymm',now())+ '%'+'''' );
  AdoifExist.open;
  if AdoifExist.IsEmpty then
    maxid := formatdatetime('yymm',now()) + '001'
  else
    begin
      Adogetmaxid.close;
      AdoGetMaxid.sql.clear;
      AdoGetMaxid.sql.add('select max(工资单号)+1 as 工资单号 from 工资单 wheresubstring(编号,1,4)='+'''' + formatdatetime('yymm',now())+'''' );      AdoGetMaxid.open;      maxid:= formatdatetime('yymm',now()) + Formatfloat('000',AdoGetMaxid.FieldbyName('工资单号').asfloat);
    end;
 ADOQuery1.Append;     ADOQuery1.FieldByName('工资单号').Asfloat:=strtofloat(maxid);
     ADOQuery1.FieldByName('员工编号').Asfloat:=StrTofloat(Label16.Caption);
      ADOQuery1.FieldByName('发放日期').AsString:= formatdatetime('yyyymmdd',now());
      ADOQuery1.FieldByName('姓名').AsString:= Label17.Caption;
     ADOQuery1.FieldByName('性别').AsString:=Label6.Caption;
      ADOQuery1.FieldByName('基本工资').Asinteger:=StrToInt(Edit1.text);
     ADOQuery1.FieldByName('奖金').Asinteger:=StrToInt(Edit2.text);
     ADOQuery1.FieldByName('加班费').Asinteger:=StrToInt(Edit3.text);
      ADOQuery1.FieldByName('其他费用').Asinteger:=StrToInt(Edit4.text);
     ADOQuery1.FieldByName('扣除费用').Asinteger:=StrToInt(Edit5.text);
     ADOQuery1.FieldByName('工时工资').Asinteger:=StrToInt(Edit6.text);
     ADOQuery1.FieldByName('合计').Asinteger:=ADOQuery1.FieldByName('基本工资').Asinteger+ADOQuery1.FieldByName('奖金').Asinteger+ADOQuery1.FieldByName('加班费').Asinteger+ADOQuery1.FieldByName('其他费用').Asinteger-ADOQuery1.FieldByName('扣除费用').Asinteger+ADOQuery1.FieldByName('工时工资').Asinteger;
     ADOQuery1.Post;
     ADOQUERY1.active:=false;
     ADOquery1.active:=true;
end;
另:麻烦大家详细解释一下select语句中那些+‘’到底是什么意思呀?

解决方案 »

  1.   

    'select * from 工资单 where 工资单号 like '+'''' + formatdatetime('yymm',now())+ '%'+'''' 整个是字符串
    运行时 'select前的' 将不需要 ,实质是SELECT,引号是字符串的描述
    上面的
    +'''' 
    实质是加一个"
      

  2.   

    不用打开两次表吧1.打开表 'SELECT * FROM 工资单 where 工资单号 like ''' +  formatdatetime('yymm',now())+ '%'''2.maxid:= Format('.3d', AdoifExist.RecordCount+1)
      

  3.   

    // 自动生成采购单我是这样实现的:  CG+年+月+四位的编号
    var
      sNO: String;
    begin
      sNO:=GetRecords(DataMForm.ADOConnet,
                     'Select Max(采购单号)From  采购单主表 Where Left(采购单号,6)='''
                     +FormatDateTime ('"CG"yymm',sysPublicH.getSQLDateTime)+#39
                     );  if sNO='' then 
        sNO:=FormatDateTime('"CG"yymm"0001"',sysPublicH.getSQLDateTime)
      else 
        sNO:=FormatDateTime('"CG"yymm',sysPublicH.getSQLDateTime)+ Format('%.4d', [StrToInt(rightstr(sNO,4) )+1] );