为什么程序运行一段时间后,POST数据会停止响应?(200分)(200分)

  • 主题发起人 主题发起人 z_sheng
  • 开始时间 开始时间
Z

z_sheng

Unregistered / Unconfirmed
GUEST, unregistred user!
一个数据导入程序,负责将相同结构的不同数据文件(DBF格式)导入ORACLE数据库,
我在执行POST的外层加了TRY...EXCEPT判断,如果失败就CANCEL数据。可是当程序执行
一段时间后,遇到某一个记录的POST操作会停止响应。根据导入的数据文件不同,停止
响应的纪录位置也不相同,有时是第900条,有时是13000条左右,我怀疑是该条纪录的
数据非法造成的,但是为什么他不去执行EXCEPT后面的CANCEL语句呢?
发生错误后,我观察到程序的运行状态还是RUNNING,但是点击CLOSE按钮并不会退出程
序,只能按Ctrl+Alt+Del强行关闭程序。

BTW:在遇到这个问题之前,我曾经遇到过日期字段非法而导致报错的情况,但是可以用
EXCEPT捕捉并处理,为什么这次不行呢?现在我还没发现是该死的那个字段数据非法。
 
是不是内存不够阿?
 
但是有时候几百条出问题,有时候几万条才出现问题,有时候根本不出现问题,
可能是纪录的问题
 
最好倒了一批如几十上百笔记录再提交,不用每一笔都要启动一个事务吧。
 
要不将你的代码贴出来看一下。
 
下面是部分源代码,程序是执行到post处停止响应的。

with Table2 do
begin
First;
while not Eof do
begin
try
if abort = 1 then
begin
Form1.ListBox1.Items.Add(' ');
Form1.ListBox1.Items.Add('数据导入程序中止' + DateTimeToStr(Now));
Form1.ListBox1.ItemIndex:=Form1.ListBox1.Items.Count-1;
MoniList := 1;
exit;
end;
pnum := '510700' + PCSDM + COPY(IntToStr(10000000 + FieldValues['H110']),2,7);
Remtab.SetKey;
Remtab.FieldByName('NUM').AsString := pnum;
if Remtab.GotoKey then
Remtab.Edit
else
Remtab.Append;
REmtab.FieldValues['GROUP_NO'] := IntToStr(FieldValues['I110']);
REmtab.FieldValues['GROUP_TYPE'] := FieldValues['A1100039'];
REmtab.FieldValues['RELATION'] := FieldValues['A1100049'];
REmtab.FieldValues['NAME'] := FieldValues['X1100059'];
REmtab.FieldValues['ONAME'] := FieldValues['A1100069'];
REmtab.FieldValues['SEX'] := FieldValues['A1100079'];

if Table1.Locate('h100',Table2.FieldByName('i110').value,[loCaseInsensitive]) then
begin
REmtab.FieldValues['STREET_OFFICE'] := Table1.FieldValues['A1000039'];
REmtab.FieldValues['STREET'] := Table1.FieldValues['A1000049'];
REmtab.FieldValues['ADDRESS'] := Table1.FieldValues['A1000059'];
end;

REmtab.FieldValues['BIRTH_DATE'] := FormatDateTime('yyyymmdd',FieldByName('A1100089').AsDateTime);
REmtab.FieldValues['BIRTH_SIGNDATE'] := FormatDateTime('yyyymmdd',FieldByName('A1100429').AsDateTime);
REmtab.FieldValues['ID_SIGNDATE'] := FormatDateTime('yyyymmdd',FieldByName('A1100249').AsDateTime);
REmtab.FieldValues['COME_DATE'] := FormatDateTime('yyyymmdd',FieldByName('A1100339').AsDateTime);
try
REmtab.Post;
except
REmtab.Cancel;
end;
Next;
except
on E: Exception do
begin
try
REmtab.Post;
except
REmtab.Cancel;
end;
Next;
end;
end;
end;
end;
 
谢谢各位,原因我已经找到了。是因为对字段赋值时使用了半个中文字符,每次post数据
时就会死锁,奇怪的是try...except结构对他也不起作用。
 
后退
顶部