21-11-2019, Saat: 01:51
Merhaba;
Başarabilirsem ufak bir uygulama var.
Uygulama ajansların xml sayfalarından verileri çekip veritabanı'na kaydetmek.
Fakat Tread'ti bir türlü çözemedim. Veritabanı na eklemiş olduğum XML adreslerini tek, tek alıp, daha önce kayıt yapılmamışsa farklı bir veritabanı na kaydetmek istiyorum. test yaptığımda ya program kilitleniyor yada adres hatası alıyorum (url hatası değil).
Acaba bu durumu nasıl çözebilirim?
Başarabilirsem ufak bir uygulama var.
Uygulama ajansların xml sayfalarından verileri çekip veritabanı'na kaydetmek.
Fakat Tread'ti bir türlü çözemedim. Veritabanı na eklemiş olduğum XML adreslerini tek, tek alıp, daha önce kayıt yapılmamışsa farklı bir veritabanı na kaydetmek istiyorum. test yaptığımda ya program kilitleniyor yada adres hatası alıyorum (url hatası değil).
Acaba bu durumu nasıl çözebilirim?
procedure TForm1.Button1Click(Sender: TObject);
var
Tread: TThread;
begin
Tread := TThread.CreateAnonymousThread(
procedure
var
FDQ: TFDQuery;
XMLNode: IXMLNode;
sTitle, sLink: WideString;
AjansUrl, AjansName: WideString;
begin
CoInitialize(Nil);
FDQ := TFDQuery.Create(Nil);
try
TThread.Synchronize(TThread.CurrentThread,
procedure()
begin
FDQ.Connection := FDConnection; // databaseden xml aldık
FDQ.Active := False;
FDQ.Close;
FDQ.SQL.Clear;
FDQ.SQL.Add('Select * From XML');
FDQ.Prepared := True;
FDQ.Open;
while Not FDQ.Eof do
begin
AjansUrl := FDQ.FieldByName('URL').AsString;
AjansName := FDQ.FieldByName('AJANS').AsString;
Form1.XMLDocument.LoadFromFile(AjansUrl);
Form1.XMLDocument.Active := True;
XMLNode := Form1.XMLDocument.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
FDQ.Next;
end;
while XMLNode <> Nil do
begin
sTitle := Copy(XMLNode.ChildNodes['Title'].Text, 1, 255);
sLink := Copy(XMLNode.ChildNodes['Link'].Text, 1, 255);
XMLNode := XMLNode.NextSibling;
end;
end);
finally
XMLDocument.Active := False;
FDQ.Free;
CoUninitialize();
end;
end);
Tread.Start;
end;

