Delphi Can
Aynı kelime - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Aynı kelime (/showthread.php?tid=4303)



Aynı kelime - Kerembacioglu - 12-12-2019

Merhaba;


Farklı xml web sitelerden kelime alıyorum.  Web sitelerin url'leri databaseye kayıtlı.
Her bir url adresini  while Not aFDQuery.Eof do döngüsü ile kontol edip; Yeni bir kelime eklenmişse ve Kayıtlı değil ise databaseye kaydedeceğim.

Fakat döngü çalışıyor. Databasedeki tüm url'ler kontrol edilmiyor. Sadece ilk kayıtlı url kontrol ediliyor. Diğer url'ler pas geçiliyor. 
Gözden kaçırdığım nokta nedir? Yardımlarınızı rica ederim. 


        
       if aFDConnection.Connected then
        begin
          aFDQuery.Active := False;
          aFDQuery.Connection := aFDConnection;
          aFDQuery.SQL.Clear;
          aFDQuery.Close;
          aFDQuery.SQL.Add('Select * From Kelime');
          aFDQuery.Prepared := True;
          aFDQuery.Open;
          while Not aFDQuery.Eof do
          begin
            xKelime := aFDQuery.FieldByName('Kelime').AsString;
            xUrl := aFDQuery.FieldByName('Url').AsString;

            XMLDoc.Active := False;
            XMLDoc.LoadFromFile(xUrl);
            XMLDoc.Active := True;
            StartNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
            ANode := StartNode;
            repeat
              xTitle := ANode.ChildNodes['title'].Text;
              xLink := ANode.ChildNodes['link'].Text;
              aFDQuery.Connection := aFDConnection;
              aFDQuery.Active := False;
              aFDQuery.Close;
              aFDQuery.SQL.Clear;
              aFDQuery.SQL.Add('Select * From Kelime Where Kelime=:Kel');
              aFDQuery.ParamByName('Kel').AsString := xTitle;
              aFDQuery.Prepared := True;
              aFDQuery.Open;
              if aFDQuery.IsEmpty then // Kayıt yoksa
              begin
                aFDQuery.UpdateCursorPos;
                aFDQuery.Connection := aFDConnection;
                aFDQuery.Active := False;
                aFDQuery.Close;
                aFDQuery.SQL.Clear;
                aFDQuery.SQL.Add('Insert Into Kelime(Kelime)');
                aFDQuery.SQL.Add(' Values (:Kel)');
                aFDQuery.ParamByName('Kel').AsString := xTitle;
                aFDQuery.ExecSQL;
                aFDQuery.UpdateCursorPos;
              end;
              ANode := ANode.NextSibling;
            until ANode = Nil;
            aFDQuery.Next;
          end;
        end;



Aynı kelime - frmman - 12-12-2019

Arama mantığınızı incelemedim ama, yazdığınız kodlarda dikkatimi çeken husus aFDQuery bileşenini döngü içinde tekrar kullanıyorsunuz. Repeat içerisinde farklı bir queryi ile deneme yapmayı deneyiniz.





       if aFDConnection.Connected then
       begin
         aFDQuery.Active := False;
         aFDQuery.Connection := aFDConnection;
         aFDQuery.SQL.Clear;
         aFDQuery.Close;
         aFDQuery.SQL.Add('Select * From Kelime');
         aFDQuery.Prepared := True;
         aFDQuery.Open; // <----------- QUERY BURADA AÇILDI
         while Not aFDQuery.Eof do
         begin
           xKelime := aFDQuery.FieldByName('Kelime').AsString;
           xUrl := aFDQuery.FieldByName('Url').AsString;

           XMLDoc.Active := False;
           XMLDoc.LoadFromFile(xUrl);
           XMLDoc.Active := True;
           StartNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
           ANode := StartNode;
           repeat
             xTitle := ANode.ChildNodes['title'].Text;
             xLink := ANode.ChildNodes['link'].Text;
             aFDQuery.Connection := aFDConnection;
             aFDQuery.Active := False;
             aFDQuery.Close;   // <---- BURADA TEKRAR KAPATIYORSUNUZ. while Not aFDQuery.Eof do BURADA KIRILIYOR SANKİ
             aFDQuery.SQL.Clear;
             aFDQuery.SQL.Add('Select * From Kelime Where Kelime=:Kel');
             aFDQuery.ParamByName('Kel').AsString := xTitle;
             aFDQuery.Prepared := True;
             aFDQuery.Open;
             if aFDQuery.IsEmpty then // Kayıt yoksa
             begin
               aFDQuery.UpdateCursorPos;
               aFDQuery.Connection := aFDConnection;
               aFDQuery.Active := False;
               aFDQuery.Close;
               aFDQuery.SQL.Clear;
               aFDQuery.SQL.Add('Insert Into Kelime(Kelime)');
               aFDQuery.SQL.Add(' Values (:Kel)');
               aFDQuery.ParamByName('Kel').AsString := xTitle;
               aFDQuery.ExecSQL;
               aFDQuery.UpdateCursorPos;
             end;
             ANode := ANode.NextSibling;
           until ANode = Nil;
           aFDQuery.Next;
         end;
       end;



Cvp: Aynı kelime - Kerembacioglu - 14-12-2019

(12-12-2019, Saat: 21:27)frmman Adlı Kullanıcıdan Alıntı: Arama mantığınızı incelemedim ama, yazdığınız kodlarda dikkatimi çeken husus aFDQuery bileşenini döngü içinde tekrar kullanıyorsunuz. Repeat içerisinde farklı bir queryi ile deneme yapmayı deneyiniz.





       if aFDConnection.Connected then
       begin
         aFDQuery.Active := False;
         aFDQuery.Connection := aFDConnection;
         aFDQuery.SQL.Clear;
         aFDQuery.Close;
         aFDQuery.SQL.Add('Select * From Kelime');
         aFDQuery.Prepared := True;
         aFDQuery.Open; // <----------- QUERY BURADA AÇILDI
         while Not aFDQuery.Eof do
         begin
           xKelime := aFDQuery.FieldByName('Kelime').AsString;
           xUrl := aFDQuery.FieldByName('Url').AsString;

           XMLDoc.Active := False;
           XMLDoc.LoadFromFile(xUrl);
           XMLDoc.Active := True;
           StartNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
           ANode := StartNode;
           repeat
             xTitle := ANode.ChildNodes['title'].Text;
             xLink := ANode.ChildNodes['link'].Text;
             aFDQuery.Connection := aFDConnection;
             aFDQuery.Active := False;
             aFDQuery.Close;   // <---- BURADA TEKRAR KAPATIYORSUNUZ. while Not aFDQuery.Eof do BURADA KIRILIYOR SANKİ
             aFDQuery.SQL.Clear;
             aFDQuery.SQL.Add('Select * From Kelime Where Kelime=:Kel');
             aFDQuery.ParamByName('Kel').AsString := xTitle;
             aFDQuery.Prepared := True;
             aFDQuery.Open;
             if aFDQuery.IsEmpty then // Kayıt yoksa
             begin
               aFDQuery.UpdateCursorPos;
               aFDQuery.Connection := aFDConnection;
               aFDQuery.Active := False;
               aFDQuery.Close;
               aFDQuery.SQL.Clear;
               aFDQuery.SQL.Add('Insert Into Kelime(Kelime)');
               aFDQuery.SQL.Add(' Values (:Kel)');
               aFDQuery.ParamByName('Kel').AsString := xTitle;
               aFDQuery.ExecSQL;
               aFDQuery.UpdateCursorPos;
             end;
             ANode := ANode.NextSibling;
           until ANode = Nil;
           aFDQuery.Next;
         end;
       end;

Haklısınız teşekkür ederim bilgi için