Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Aynı kelime
#1
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;
Cevapla
#2
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;
Cevapla
#3
(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
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi güncellemesi ve JVMemoryData bileşeninde aynı anda birden çok kayıt boreas 0 191 10-03-2020, Saat: 18:03
Son Yorum: boreas
Photo cxDBGridTable da Listenen Aynı Satırları Tek Satırda Gösterme Selen 3 470 13-02-2020, Saat: 11:36
Son Yorum: Selen
  Döngün sürekli aynı geliyor Kerembacioglu 6 988 29-10-2019, Saat: 02:36
Son Yorum: Kerembacioglu
  Kelime Değiştirme quiet1day 46 8.567 09-09-2019, Saat: 16:17
Son Yorum: DelphiCan
  Veri tabanına aynı değeri tekrarlama arsl01 21 3.376 03-05-2019, Saat: 11:34
Son Yorum: edo



Konuyu Okuyanlar: 1 Ziyaretçi