我在调试一个程序有错误,请指点!procedure TF_main.Add_record(person_id:String);
var
counter:Integer;
yearmonth:String;
begin
if i_fixed.Checked then
yearmonth:='0000000'
else
yearmonth:=i_yearmonth.Text;
//获取计数
with DM_main.T_counter do
begin
Close;
Filter:='ID=''R''';
Open;
counter:=FieldValues['COUNTER_VALUE'];
Inc(counter);
Edit;
FieldValues['COUNTER_VALUE']:=counter;
Post;
Close;
end;
with DM_main.Q_add_salary_other do
begin
Close;
Params[0].Value:=counter;
Params[1].Value:=yearmonth;
Params[2].Value:=person_id;
Params[3].Value:=IntToStr(i_type.ItemIndex);
Params[4].Value:=i_name.Text;
Params[5].Value:=i_money.Value;
Params[6].Value:=i_description.Text;
错误2 ExecSQL;
end;
end;procedure TF_main.B_add_personClick(Sender: TObject);
begin
if DM_main.Database.Connected
and (Length(i_name.Text)>0)
and (Length(i_person_name.Text)>0) then
begin
Add_record(i_person_id.Text);
With DM_main do
begin
T_salary_1.Refresh;
T_salary_2.Refresh;
T_salary_3.Refresh;
T_salary_4.Refresh;
end;
end;
end;procedure TF_main.B_add_listClick(Sender: TObject);
var
i,n:integer;
begin
With DM_main do
begin
if Database.Connected
and Q_person_list.Active then
begin
With Q_person_list do
begin
n:=RecordCount;
Gauge1.Progress:=0;
i:=0;
First;
while not Eof do
begin
Add_record(FieldValues['ID']);
错误1 Next;
Inc(i);
Gauge1.Progress:=(100*i) div n;
end;
end;
T_salary_1.Refresh;
T_salary_2.Refresh;
T_salary_3.Refresh;
错误3 T_salary_4.Refresh;
end;
end;
end;procedure TF_main.M_statClick(Sender: TObject);
var
MyInifile:Tinifile;
Rate_overtime, Money_errand, Money_late, Money_absent:Integer;
i,n:Integer;
counter:Integer;
yearmonth,person,add_detail,sub_detail:String;
basic, bonus, add_total, sub_total, total, temp:Single;
begin
//读取参数
MyInifile:=Tinifile.Create(ExtractFilePath(Paramstr(0))+'formula.ini');
Rate_overtime:=MyInifile.ReadInteger('Formula', 'OverTime', 150);
Money_errand:=MyInifile.ReadInteger('Formula', 'Errand', 100);
Money_late:=MyInifile.ReadInteger('Formula', 'Late', 10);
Money_absent:=MyInifile.ReadInteger('Formula', 'Absent', 50);
yearmonth:=i_yearmonth.Text;
With DM_main do
begin
//获取员工列表
with Q_person_list_all do
begin
Open;
n:=RecordCount;
i:=0;
Gauge1.Progress:=0;
First;
while not Eof do
begin
//统计员工工资
person:=FieldValues['ID'];
add_detail:='';
sub_detail:='';
basic:=0;
bonus:=0;
add_total:=0;
sub_total:=0;
total:=0;
//基本工资
with Q_salary_base do
begin
Close;
Params.ParamValues['PERSON']:=person;
Open;
basic:=FieldValues['SALARY'];
Close;
end;
//获取员工出勤记录,计算相关工资额
with Q_attendance_stat do
begin
Close;
Params.ParamValues['PERSON']:=person;
Params.ParamValues['YEARMONTH']:=yearmonth;
Open;
basic:=basic*FieldValues['WORK_HOUR'];
temp:=basic*FieldValues['OVER_HOUR']*Rate_overtime/100;
if temp>0 then
begin
add_total:=add_total+temp;
add_detail:='加班费:'+FloatToStrF(temp, ffFixed, 5, 1)+';';
end;
temp:=Money_errand*FieldValues['ERRAND_HDAY'];
if temp>0 then
begin
add_total:=add_total+temp;
add_detail:='差旅费:'+FloatToStrF(temp, ffFixed, 5, 1)+';';
end;
temp:=Money_late*(FieldValues['LATE_TIMES']+FieldValues['EARLY_TIMES'])
+Money_absent*FieldValues['ABSENT_TIMES'];
if temp>0 then
begin
sub_total:=sub_total+temp;
sub_detail:='误工费:'+FloatToStrF(temp, ffFixed, 5, 1)+';';
end;
Close;
end;
With Q_salary_other do
begin
//统计奖金记录
Close;
Params.ParamValues['YEARMONTH']:=yearmonth;
Params.ParamValues['PERSON']:=person;
Params.ParamValues['TYPE']:='0';
Open;
First;
while not Eof do
begin
bonus:=bonus+FieldValues['MONEY'];
Next;
end;
//统计福利记录
Close;
Params.ParamValues['TYPE']:='1';
Open;
First;
while not Eof do
begin
temp:=FieldValues['MONEY'];
add_total:=add_total+temp;
add_detail:=add_detail+FieldValues['NAME']+':'
+FloatToStrF(temp, ffFixed, 5, 1)+';';
Next;
end;
//统计津贴记录
Close;
Params.ParamValues['TYPE']:='2';
Open;
First;
while not Eof do
begin
temp:=FieldValues['MONEY'];
add_total:=add_total+temp;
add_detail:=add_detail+FieldValues['NAME']+':'
+FloatToStrF(temp, ffFixed, 5, 1)+';';
Next;
end;
//统计扣发记录
Close;
Params.ParamValues['TYPE']:='3';
Open;
First;
while not Eof do
begin
temp:=FieldValues['MONEY'];
sub_total:=sub_total+temp;
sub_detail:=sub_detail+FieldValues['NAME']+':'
+FloatToStrF(temp, ffFixed, 5, 1)+';';
Next;
end;
Close;
end;
total:=basic+bonus+add_total-sub_total;
if total<0 then total:=0;
//插入工资记录
with T_add_salary do
begin
Close;
Filter:='YEARMONTH='''+yearmonth+''' AND PERSON='''
+person+'''';
Filtered:=True;
Open;
if RecordCount=0 then
begin
//获取计数
with T_counter do
begin
Close;
Filter:='ID=''Y''';
Open;
counter:=FieldValues['COUNTER_VALUE'];
Inc(counter);
Edit;
FieldValues['COUNTER_VALUE']:=counter;
Post;
Close;
end;
AppendRecord([counter, yearmonth, person, basic, bonus,
add_detail, add_total, sub_detail, sub_total, total]);
end
else
begin
Edit;
FieldValues['BASIC']:=basic;
FieldValues['BONUS']:=bonus;
FieldValues['ADD_DETAIL']:=add_detail;
FieldValues['ADD_TOTAL']:=add_total;
FieldValues['SUB_DETAIL']:=sub_detail;
FieldValues['SUB_TOTAL']:=sub_total;
FieldValues['TOTAL']:=total;
Post;
end;
Close;
end;
Inc(i);
Gauge1.Progress:=(100*i) div n;
Next;
end;//下一个员工
end;
end;
end;procedure TF_main.DBGrid1DblClick(Sender: TObject);
begin
if DM_main.Q_person_list.Active then
i_person_id.Text:=DM_main.Q_person_list['ID'];
end;procedure TF_main.i_yearmonthChange(Sender: TObject);
begin
try
if DM_main.Database.Connected then
begin
F_report.PHeader.Caption:=i_yearmonth.Text+'月度工资报表';
DM_main.Q_salary_list.Close;
DM_main.Q_salary_list.Params.ParamValues['YEARMONTH']:=i_yearmonth.Text;
DM_main.Q_salary_list.Open;
end;
except
//
end;
end;end.错误提示:invaild variant type conversion
var
counter:Integer;
yearmonth:String;
begin
if i_fixed.Checked then
yearmonth:='0000000'
else
yearmonth:=i_yearmonth.Text;
//获取计数
with DM_main.T_counter do
begin
Close;
Filter:='ID=''R''';
Open;
counter:=FieldValues['COUNTER_VALUE'];
Inc(counter);
Edit;
FieldValues['COUNTER_VALUE']:=counter;
Post;
Close;
end;
with DM_main.Q_add_salary_other do
begin
Close;
Params[0].Value:=counter;
Params[1].Value:=yearmonth;
Params[2].Value:=person_id;
Params[3].Value:=IntToStr(i_type.ItemIndex);
Params[4].Value:=i_name.Text;
Params[5].Value:=i_money.Value;
Params[6].Value:=i_description.Text;
错误2 ExecSQL;
end;
end;procedure TF_main.B_add_personClick(Sender: TObject);
begin
if DM_main.Database.Connected
and (Length(i_name.Text)>0)
and (Length(i_person_name.Text)>0) then
begin
Add_record(i_person_id.Text);
With DM_main do
begin
T_salary_1.Refresh;
T_salary_2.Refresh;
T_salary_3.Refresh;
T_salary_4.Refresh;
end;
end;
end;procedure TF_main.B_add_listClick(Sender: TObject);
var
i,n:integer;
begin
With DM_main do
begin
if Database.Connected
and Q_person_list.Active then
begin
With Q_person_list do
begin
n:=RecordCount;
Gauge1.Progress:=0;
i:=0;
First;
while not Eof do
begin
Add_record(FieldValues['ID']);
错误1 Next;
Inc(i);
Gauge1.Progress:=(100*i) div n;
end;
end;
T_salary_1.Refresh;
T_salary_2.Refresh;
T_salary_3.Refresh;
错误3 T_salary_4.Refresh;
end;
end;
end;procedure TF_main.M_statClick(Sender: TObject);
var
MyInifile:Tinifile;
Rate_overtime, Money_errand, Money_late, Money_absent:Integer;
i,n:Integer;
counter:Integer;
yearmonth,person,add_detail,sub_detail:String;
basic, bonus, add_total, sub_total, total, temp:Single;
begin
//读取参数
MyInifile:=Tinifile.Create(ExtractFilePath(Paramstr(0))+'formula.ini');
Rate_overtime:=MyInifile.ReadInteger('Formula', 'OverTime', 150);
Money_errand:=MyInifile.ReadInteger('Formula', 'Errand', 100);
Money_late:=MyInifile.ReadInteger('Formula', 'Late', 10);
Money_absent:=MyInifile.ReadInteger('Formula', 'Absent', 50);
yearmonth:=i_yearmonth.Text;
With DM_main do
begin
//获取员工列表
with Q_person_list_all do
begin
Open;
n:=RecordCount;
i:=0;
Gauge1.Progress:=0;
First;
while not Eof do
begin
//统计员工工资
person:=FieldValues['ID'];
add_detail:='';
sub_detail:='';
basic:=0;
bonus:=0;
add_total:=0;
sub_total:=0;
total:=0;
//基本工资
with Q_salary_base do
begin
Close;
Params.ParamValues['PERSON']:=person;
Open;
basic:=FieldValues['SALARY'];
Close;
end;
//获取员工出勤记录,计算相关工资额
with Q_attendance_stat do
begin
Close;
Params.ParamValues['PERSON']:=person;
Params.ParamValues['YEARMONTH']:=yearmonth;
Open;
basic:=basic*FieldValues['WORK_HOUR'];
temp:=basic*FieldValues['OVER_HOUR']*Rate_overtime/100;
if temp>0 then
begin
add_total:=add_total+temp;
add_detail:='加班费:'+FloatToStrF(temp, ffFixed, 5, 1)+';';
end;
temp:=Money_errand*FieldValues['ERRAND_HDAY'];
if temp>0 then
begin
add_total:=add_total+temp;
add_detail:='差旅费:'+FloatToStrF(temp, ffFixed, 5, 1)+';';
end;
temp:=Money_late*(FieldValues['LATE_TIMES']+FieldValues['EARLY_TIMES'])
+Money_absent*FieldValues['ABSENT_TIMES'];
if temp>0 then
begin
sub_total:=sub_total+temp;
sub_detail:='误工费:'+FloatToStrF(temp, ffFixed, 5, 1)+';';
end;
Close;
end;
With Q_salary_other do
begin
//统计奖金记录
Close;
Params.ParamValues['YEARMONTH']:=yearmonth;
Params.ParamValues['PERSON']:=person;
Params.ParamValues['TYPE']:='0';
Open;
First;
while not Eof do
begin
bonus:=bonus+FieldValues['MONEY'];
Next;
end;
//统计福利记录
Close;
Params.ParamValues['TYPE']:='1';
Open;
First;
while not Eof do
begin
temp:=FieldValues['MONEY'];
add_total:=add_total+temp;
add_detail:=add_detail+FieldValues['NAME']+':'
+FloatToStrF(temp, ffFixed, 5, 1)+';';
Next;
end;
//统计津贴记录
Close;
Params.ParamValues['TYPE']:='2';
Open;
First;
while not Eof do
begin
temp:=FieldValues['MONEY'];
add_total:=add_total+temp;
add_detail:=add_detail+FieldValues['NAME']+':'
+FloatToStrF(temp, ffFixed, 5, 1)+';';
Next;
end;
//统计扣发记录
Close;
Params.ParamValues['TYPE']:='3';
Open;
First;
while not Eof do
begin
temp:=FieldValues['MONEY'];
sub_total:=sub_total+temp;
sub_detail:=sub_detail+FieldValues['NAME']+':'
+FloatToStrF(temp, ffFixed, 5, 1)+';';
Next;
end;
Close;
end;
total:=basic+bonus+add_total-sub_total;
if total<0 then total:=0;
//插入工资记录
with T_add_salary do
begin
Close;
Filter:='YEARMONTH='''+yearmonth+''' AND PERSON='''
+person+'''';
Filtered:=True;
Open;
if RecordCount=0 then
begin
//获取计数
with T_counter do
begin
Close;
Filter:='ID=''Y''';
Open;
counter:=FieldValues['COUNTER_VALUE'];
Inc(counter);
Edit;
FieldValues['COUNTER_VALUE']:=counter;
Post;
Close;
end;
AppendRecord([counter, yearmonth, person, basic, bonus,
add_detail, add_total, sub_detail, sub_total, total]);
end
else
begin
Edit;
FieldValues['BASIC']:=basic;
FieldValues['BONUS']:=bonus;
FieldValues['ADD_DETAIL']:=add_detail;
FieldValues['ADD_TOTAL']:=add_total;
FieldValues['SUB_DETAIL']:=sub_detail;
FieldValues['SUB_TOTAL']:=sub_total;
FieldValues['TOTAL']:=total;
Post;
end;
Close;
end;
Inc(i);
Gauge1.Progress:=(100*i) div n;
Next;
end;//下一个员工
end;
end;
end;procedure TF_main.DBGrid1DblClick(Sender: TObject);
begin
if DM_main.Q_person_list.Active then
i_person_id.Text:=DM_main.Q_person_list['ID'];
end;procedure TF_main.i_yearmonthChange(Sender: TObject);
begin
try
if DM_main.Database.Connected then
begin
F_report.PHeader.Caption:=i_yearmonth.Text+'月度工资报表';
DM_main.Q_salary_list.Close;
DM_main.Q_salary_list.Params.ParamValues['YEARMONTH']:=i_yearmonth.Text;
DM_main.Q_salary_list.Open;
end;
except
//
end;
end;end.错误提示:invaild variant type conversion
我现在闲着没有事干,把项目跟数据库发过来 我帮你调 要重分相谢
[email protected]/[email protected]
query1.SQL.Clear ;
query1.SQL.Add('select * from parts where partno>=:edit1');
query1.SQL.Add (' and partno <=:edit2');
query1.Params[0].Value :=strtoint(edit1.Text) ;
query1.Params[1].Value :=strtoint(edit2.Text) ;
query1.Open;
你能够详细具体的帮我改一下吗?分数不是问题!谢谢!
人民邮电大学出版社的《Delphi 6数据库系统开发实例导航》的第七章的工资管理系统
要是你还是没发调你可以到书店看看这本书,OK!谢谢了。