下面程序说明:
下面程序为一个劳保用品领用的程序:软件说明
1:首先根据用户输入的’年’’月’,生成当前日期:cx_date,,
2:到’领用’表查询,该月数据是否已生成,如生成,提示推出,否则继续。
3:打开员工表,从第一个记录开始到最后一个记录,提取员工编号zhibongno1,姓名zhigongname1,工种编号gongzhongno1。
4:打开工种表,根据获得的工种编号,获得劳保用品编号laobao_no[I],领用周期lingyong_zq[I],并据此计算该劳保用品的上次领用时间beforetime。
5:打开劳保用品领用表,查找是否到领有周期,如果没有,则插入记录。故障现象:编译后,运行时提示:invalid field name.zhigongno_1,经调试判断出在???处语句,不知何故,领用表中字段名:zhigongno,zhigongname,baobaono,lingyongnum,lingyongtime,lingyongfeiyong .没有索引。procedure TForm8.BitBtn1Click(Sender: TObject);
var cx_date,zhigongname_1:string;
zhigongno_1,gongzhongno_1:integer;
laobao_no:array[1..14] of integer;
lingyong_zq:array[1..14] of integer;
lingyongnum1,i:integer;
beforetime:string;
begin {1}
cx_date:=combobox1.Text+combobox2.Text;
edit1.Text:=cx_date; {计算本次领用时间}
with datamodule2.lingyongTable do
begin {2}
active:=true;
if locate('lingyongtime',cx_date,[lopartialkey]) then {查找该月份是否已生生成}
begin{11}
showmessage('该月份已生成,请退出。');
active:=false;
{ close;}
end {11}
else
with datamodule2.renyuantable do {已生成}
begin {3}
active:=true;
while not eof do
begin {10} {生成每个员工的领用单}
zhigongno_1:=fieldbyname('zhigongno').AsInteger;{获取职工编号}
edit4.text:=inttostr(zhigongno_1);
zhigongname_1:=fieldbyname('zhigongname').AsString; {获取职工姓名}
gongzhongno_1:=fieldbyname('gongzhongno').AsInteger; {获取工种编号}
{查找该工种,获得相应的劳保用品编号}
with datamodule2.gongzhongtable do
begin {4}
active:=true;
indexfieldnames:='gongzhongno';
if findkey([gongzhongno_1]) then
begin {5}
for i:=1 to 14 do
begin {6}
laobao_no[i]:=fieldbyname('laobaono'+inttostr(i)).asinteger; {获取该职工的劳保用品编号}
if laobao_no[i]<>32 then{判断编号不为空}
begin {7}
lingyong_zq[i]:=fieldbyname('lingyongzq'+inttostr(i)).asinteger; {获取该劳保编号的领用周期}
lingyongnum1:=trunc(1/lingyong_zq[i]);
if lingyongnum1<=0 then
lingyongnum1:=1; {计算上次领用时间}
if strtoint(rightstr(cx_date,2))>lingyong_zq[i] then{现在月份大于领用周期}
begin {8}
if int(strtoint(rightstr(cx_date,2)))-lingyong_zq[i]<10 then { 小于10月}
beforetime:=leftstr(cx_date,4)+'0'+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]))
else
beforetime:=leftstr(cx_date,4)+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]))
end {8}
else{现在月份小于领用周期}
if trunc(12+strtoint(rightstr(cx_date,2))-lingyong_zq[i])<10 then {小于10月}
beforetime:=inttostr(strtoint(leftstr(cx_date,4))-1)+'0'+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]+12))
else
beforetime:=inttostr(strtoint(leftstr(cx_date,4))-1)+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]+12)); {判断是否到领用周期}
with datamodule2.Query1 do
begin {11}
datamodule2.Query1.databasename:='laobao';
datamodule2.Query1.datasource:=datamodule2.lingyongds;
datamodule2.Query1.close;
datamodule2.Query1.sql.Clear;
???????? datamodule2.Query1.sql.add(' select * from lingyong where lingyong.zhigongno=zhigongno_1 and lingyong.laobaono=laobao_no[i] and lingyong.lingyongtime>beforetime') ;
datamodule2.Query1.open;
end;{11}
{到领用周期,在领用表中添加该领用单}
if eof then
begin
datamodule2.lingyongTable.Open;
datamodule2.lingyongTable.appendrecord([zhigongno_1,zhigongname_1,laobao_no[i],cx_date,lingyongnum1,0]);
end;
end;{7}
end; {6}
end;{5}
end; {4}
next;
end;{10}
end;{3}
end;{2}
end; {1}
下面程序为一个劳保用品领用的程序:软件说明
1:首先根据用户输入的’年’’月’,生成当前日期:cx_date,,
2:到’领用’表查询,该月数据是否已生成,如生成,提示推出,否则继续。
3:打开员工表,从第一个记录开始到最后一个记录,提取员工编号zhibongno1,姓名zhigongname1,工种编号gongzhongno1。
4:打开工种表,根据获得的工种编号,获得劳保用品编号laobao_no[I],领用周期lingyong_zq[I],并据此计算该劳保用品的上次领用时间beforetime。
5:打开劳保用品领用表,查找是否到领有周期,如果没有,则插入记录。故障现象:编译后,运行时提示:invalid field name.zhigongno_1,经调试判断出在???处语句,不知何故,领用表中字段名:zhigongno,zhigongname,baobaono,lingyongnum,lingyongtime,lingyongfeiyong .没有索引。procedure TForm8.BitBtn1Click(Sender: TObject);
var cx_date,zhigongname_1:string;
zhigongno_1,gongzhongno_1:integer;
laobao_no:array[1..14] of integer;
lingyong_zq:array[1..14] of integer;
lingyongnum1,i:integer;
beforetime:string;
begin {1}
cx_date:=combobox1.Text+combobox2.Text;
edit1.Text:=cx_date; {计算本次领用时间}
with datamodule2.lingyongTable do
begin {2}
active:=true;
if locate('lingyongtime',cx_date,[lopartialkey]) then {查找该月份是否已生生成}
begin{11}
showmessage('该月份已生成,请退出。');
active:=false;
{ close;}
end {11}
else
with datamodule2.renyuantable do {已生成}
begin {3}
active:=true;
while not eof do
begin {10} {生成每个员工的领用单}
zhigongno_1:=fieldbyname('zhigongno').AsInteger;{获取职工编号}
edit4.text:=inttostr(zhigongno_1);
zhigongname_1:=fieldbyname('zhigongname').AsString; {获取职工姓名}
gongzhongno_1:=fieldbyname('gongzhongno').AsInteger; {获取工种编号}
{查找该工种,获得相应的劳保用品编号}
with datamodule2.gongzhongtable do
begin {4}
active:=true;
indexfieldnames:='gongzhongno';
if findkey([gongzhongno_1]) then
begin {5}
for i:=1 to 14 do
begin {6}
laobao_no[i]:=fieldbyname('laobaono'+inttostr(i)).asinteger; {获取该职工的劳保用品编号}
if laobao_no[i]<>32 then{判断编号不为空}
begin {7}
lingyong_zq[i]:=fieldbyname('lingyongzq'+inttostr(i)).asinteger; {获取该劳保编号的领用周期}
lingyongnum1:=trunc(1/lingyong_zq[i]);
if lingyongnum1<=0 then
lingyongnum1:=1; {计算上次领用时间}
if strtoint(rightstr(cx_date,2))>lingyong_zq[i] then{现在月份大于领用周期}
begin {8}
if int(strtoint(rightstr(cx_date,2)))-lingyong_zq[i]<10 then { 小于10月}
beforetime:=leftstr(cx_date,4)+'0'+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]))
else
beforetime:=leftstr(cx_date,4)+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]))
end {8}
else{现在月份小于领用周期}
if trunc(12+strtoint(rightstr(cx_date,2))-lingyong_zq[i])<10 then {小于10月}
beforetime:=inttostr(strtoint(leftstr(cx_date,4))-1)+'0'+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]+12))
else
beforetime:=inttostr(strtoint(leftstr(cx_date,4))-1)+inttostr(trunc(strtoint(rightstr(cx_date,2))-lingyong_zq[i]+12)); {判断是否到领用周期}
with datamodule2.Query1 do
begin {11}
datamodule2.Query1.databasename:='laobao';
datamodule2.Query1.datasource:=datamodule2.lingyongds;
datamodule2.Query1.close;
datamodule2.Query1.sql.Clear;
???????? datamodule2.Query1.sql.add(' select * from lingyong where lingyong.zhigongno=zhigongno_1 and lingyong.laobaono=laobao_no[i] and lingyong.lingyongtime>beforetime') ;
datamodule2.Query1.open;
end;{11}
{到领用周期,在领用表中添加该领用单}
if eof then
begin
datamodule2.lingyongTable.Open;
datamodule2.lingyongTable.appendrecord([zhigongno_1,zhigongname_1,laobao_no[i],cx_date,lingyongnum1,0]);
end;
end;{7}
end; {6}
end;{5}
end; {4}
next;
end;{10}
end;{3}
end;{2}
end; {1}
这里需要参数传递,这样可不行
datamodule2.Query1.sql.add(' select * from lingyong where lingyong.zhigongno=zhigongno_1 and lingyong.laobaono=''' + laobao_no[i] + ''' and lingyong.lingyongtime>''' + beforetime+ '''') ;
......三个参数;
datamodule2.Query1.Parameters.ParamValues['p2']:=
,
应该改成:
' select * from lingyong where lingyong.zhigongno='+IntToStr(zhigongno_1)+' and lingyong.laobaono='+'IntToStr(laobao_no[i])+' and lingyong.lingyongtime>'+IntToStr(beforetime)
都给放到字串里面他哪知道是什么呀。我没太仔细看你的变量定义,反正就把这些变量都转成字串型的然后相加就行了,不一定都是IntToStr()。