我试了一下,确实是26报错,错误原因不明,我试着改了一下程序
把你的和lidongbao综合了一下
procedure Tf_main.btn_UpdateClick(Sender: TObject);
var
xmlobj :IXMLDOMDocument;
success,i,j,lid: integer;
content ,subject: string;
begin
xmlobj := CreateOLEObject('msxml2.DOMDocument') as IXMLDOMDocument;
xmlobj.async := false;
xmlobj.resolveExternals :=false;
xmlobj.validateOnParse :=false;
//不能用 xmlobj.setProperty('ServerHTTPRequest', true); ???
//tmd就强制使用
OLEVariant(xmlobj).setProperty('ServerHTTPRequest', true);
j :=0;
for i:= 1995502 to 1999601 do
begin
Application.ProcessMessages;
xmlobj.load('http://www.delphibbs.com/delphibbs/getl.asp?lid=' + inttostr(i) );
if xmlobj.parseError.errorCode <> 0 then
begin
showmessage(xmlobj.parseError.Reason);
exit;
end;
inc(j);
// Memo1.Text := xmlobj.xml;
// label1.Caption := inttostr(j);
try
if xmlobj.selectSingleNode('DFWML').firstChild.nodeName = 'ERROR' then
begin
// 无此贴
{ error := error + 1;
errmsg := '无此贴';
stamsg := '无此贴';
creError(error, lid);
}
end
else
begin
// 显示XML
lid := ParserLetter(xmlobj);
if lid = 0 then
begin
raise Exception.Create('Error XML');
end
else
begin
// 更新数据库
if creSuccess(success + 1, lid) then
begin
success := success + 1;
stamsg := '更新成功';
end
else
begin
// error := error + 1;
// errmsg := '不能更新数据库';
// stamsg := '数据库错误';
// creError(error, i);
end;
end;
end;
except
// error := error + 1;
// errmsg := '错误的XML';
// stamsg := '错误的XML';
// creError(error, lid);
end
end;
end;
测试,可以收到1995891,停止后接着收,还可以继续收
没有细看你的程序,所以错误不明。
没有看你为什么用timer
感觉在接收数据的时候,尽量不要往屏幕上写什么东西,只写收到多少,或进度就行