procedure TFM_KQ1.BitBtn2Click(Sender: TObject);
var i,count1:integer;
str1,str2,m:string;
begin
if legit1(edit1.text)then
begin
try ea1.connect;
except showmessage('是否安装了excel,或者excel已经运行!'); abort;
end;
// bitbtn2.visible :=false;
ea1.Visible[0]:=true;
ea1.Caption :='从excel文件中读取内容';
ea1.Workbooks.Open(edit1.Text ,null,null,null,null,null,null,null,null,null,null,null,null,0);
ew1.ConnectTo(ea1.Workbooks[1]);
es1.ConnectTo(ew1.Worksheets[1] as _worksheet);
count1:=es1.cells.CurrentRegion.rows.count;
with adoqry2 do
begin
close;
sql.clear;
sql.add('select max(考勤编号)as ss from 晚点名表');
open;
end;
m:=trim(adoqry2.FieldByName('ss').Value); table1.Active:=true;
for i:=2 to count1 do
begin str1:=es1.Cells.Item[i,1];
table1.First;
while not table1.Eof do
begin
with adoqry2 do
begin
close;
sql.clear;
sql.add('select * from 晚点名表');
open; First ;
str2:=Fields[0].AsString ;
end; if (str1=str2) then
begin
showmessage('考勤编号为'+str2+'的记录已存在,当前最大考勤编号为'+m+'请修改要导入的考勤编号!');
break;
end
else
begin table1.Append ;
table1.Fields[0].AsString:=es1.Cells.item[i,1];
table1.Fields[1].AsString:=es1.Cells.item[i,2];
table1.Fields[2].AsString:=es1.Cells.item[i,3];
table1.Fields[3].AsString:=es1.Cells.item[i,4];
table1.Fields[4].AsString:=es1.Cells.item[i,5];
table1.Fields[5].AsString:=es1.Cells.item[i,6];
table1.Fields[6].AsString:=es1.Cells.item[i,7];
table1.Fields[7].AsString:=es1.Cells.item[i,8];
table1.Post ;
table1.Next ;
adoqry2.Next ;
end;
end;
end;
showmessage('数据成功导入!');
table1.Active:=false;
ea1.Quit ;
ea1.Disconnect ;
// bitbtn2.Visible :=true;
end
else
showmessage('文件选择错误,请检查修改后重新导入') ;end;
var i,count1:integer;
str1,str2,m:string;
begin
if legit1(edit1.text)then
begin
try ea1.connect;
except showmessage('是否安装了excel,或者excel已经运行!'); abort;
end;
// bitbtn2.visible :=false;
ea1.Visible[0]:=true;
ea1.Caption :='从excel文件中读取内容';
ea1.Workbooks.Open(edit1.Text ,null,null,null,null,null,null,null,null,null,null,null,null,0);
ew1.ConnectTo(ea1.Workbooks[1]);
es1.ConnectTo(ew1.Worksheets[1] as _worksheet);
count1:=es1.cells.CurrentRegion.rows.count;
with adoqry2 do
begin
close;
sql.clear;
sql.add('select max(考勤编号)as ss from 晚点名表');
open;
end;
m:=trim(adoqry2.FieldByName('ss').Value); table1.Active:=true;
for i:=2 to count1 do
begin str1:=es1.Cells.Item[i,1];
table1.First;
while not table1.Eof do
begin
with adoqry2 do
begin
close;
sql.clear;
sql.add('select * from 晚点名表');
open; First ;
str2:=Fields[0].AsString ;
end; if (str1=str2) then
begin
showmessage('考勤编号为'+str2+'的记录已存在,当前最大考勤编号为'+m+'请修改要导入的考勤编号!');
break;
end
else
begin table1.Append ;
table1.Fields[0].AsString:=es1.Cells.item[i,1];
table1.Fields[1].AsString:=es1.Cells.item[i,2];
table1.Fields[2].AsString:=es1.Cells.item[i,3];
table1.Fields[3].AsString:=es1.Cells.item[i,4];
table1.Fields[4].AsString:=es1.Cells.item[i,5];
table1.Fields[5].AsString:=es1.Cells.item[i,6];
table1.Fields[6].AsString:=es1.Cells.item[i,7];
table1.Fields[7].AsString:=es1.Cells.item[i,8];
table1.Post ;
table1.Next ;
adoqry2.Next ;
end;
end;
end;
showmessage('数据成功导入!');
table1.Active:=false;
ea1.Quit ;
ea1.Disconnect ;
// bitbtn2.Visible :=true;
end
else
showmessage('文件选择错误,请检查修改后重新导入') ;end;
报错:OLE ERROR 800401A8
begin
str1:=es1.Cells.Item[i,1]; //此处也是
OLE ERROR 800401a8 就是系统给出的错误信息。后来我在原来出错停止运行的语句设成断点用单步执行,又可以实现。
令人不解的是,有时候调试程序运行正常,有时候又会报上面的错误,马上就要答辩了,错误的症结还没有找到,不知道到时候会不会出错,大家有碰到这种情况的,请给点指导!