程序如下,编译通过,但运行时总是说工资单号重复,出错。
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语句中那些+‘’到底是什么意思呀?
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语句中那些+‘’到底是什么意思呀?
解决方案 »
- 怎样获取参数
- 为什么用DLL?是为了主EXE体积小?
- DBgrid控件,怎么能控制前两列在托动下面的滚动条的时候只动后面的,不动前两列
- delphi存在,为什么这么少人用bcb??
- 夏新
- [面对对象开发新手] 请教 destructor 问题以及获得feild值的问题,谢谢。
- DELPHI和哪个数据库连接的更好,更稳定一些!!!!
- 如何让FLASH文件可以全屏播放呢?我在FORM中放了PALE把FLASH控件放PALE上,FORM设成全屏的,PALE的AGLIGH设成CLIENT,FLASH的AGLIGH设成CLIEN
- 关于DELPHI的一个例子的问题
- 我做单机版的数据库程序,用PARADOS好,还是用ADO+ACCESS,好有什么根据?
- 进程如何把消息传递给线程
- 一个关于DBmemo的小问题。
运行时 'select前的' 将不需要 ,实质是SELECT,引号是字符串的描述
上面的
+''''
实质是加一个"
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] );