为什么我用XML更新DelphiBBS数据库老出错? (100分)

  • 主题发起人 主题发起人 blindlf
  • 开始时间 开始时间
就是说delphibbs的服务器做了限制 对于快速刷新的ip给予短暂的屏蔽处理。
 
//李东
procedure TForm1.Button1Click(Sender: TObject);
var
dom :OLEVariant;
i ,j: integer;
content ,subject: string;
begin
dom := CreateOLEObject('msxml2.DOMDocument');
dom.async := false;
dom.resolveExternals :=false;
dom.validateOnParse :=false;
dom.setProperty('ServerHTTPRequest', true);
j :=0;
for i:= 1995502 to 1995601 do
begin
Application.ProcessMessages;
dom.load('http://www.delphibbs.com/delphibbs/getl.asp?lid= ' + inttostr(i) );
if dom.parseError.errorCode <> 0 then
begin
showmessage(dom.parseError.Reason);
exit;
end;
inc(j);
Memo1.Text := dom.xml;
label1.Caption := inttostr(j);
{ content := dom.selectSingleNode('DFWML/L/content').text;
subject := dom.selectSingleNode('DFWML/L/subject').text;
adocommand1.Parameters.Items[0].Value := i;
adocommand1.Parameters.Items[1].Value := content;
adocommand1.Parameters.Items[2].Value := subject;
adocommand1.Execute;}

end;
end;

测试通过;
 
咋没屏蔽我的ip呀,我可没走后门
 
哈哈哈哈。你福气好,或者你认识老大,谁知道呢。上一次我也是用 xml ,结果很奇怪,
我用 ie 仍然可以浏览,xml 死掉了,也不是死,就是一个大空白,不过我刷得也猛了点。
 
to andy263
我没用ie试过,但是用影音传送带连续下了161才有停顿,但是过一端时间就能继续下了。共500个,我是用批量添加任务试的。
 
我试试再说:)
 
我试了一下,确实是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
感觉在接收数据的时候,尽量不要往屏幕上写什么东西,只写收到多少,或进度就行

 
用 timer 是为了显示 更新剩余时间,我没想到有别的什么方法。
to xmh_31
你确实成功了吗?我还是不行,昨天刚重装了系统,也是25个出错。

有人能更新一直不错吗?

有一次我更新了进2万个帖子。居然没错,真不知道是怎么回事。!郁闷
 
后退
顶部