Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Aynı tarihler
#1
Selamlar;

Listviewdeki ve databasedeki tarih alanlarını karşılaştırıp aynı olan tarihlerin listviewdeki index numarasına göre işlem yaptıracağım;
Fakat nerede hata yaptığımı bir türlü anlayamadım;  For döngüsü kullanarak listviewdeki tüm verileri kontrol ediyorum, databasewdeki tüm kayıtlarında kontrol edilmesini nasıl sağlaya bilirim sadece ilk kayıt eşitse showmessage devreye giriyor diğer kayıtlar kontrol edemedim...

procedure TForm2.TarihleriEkle(Sender: TObject);
var
  BuldumDb, BuldumPl: String;
begin
  With ListViewPL, Form1.FDQuery1 do
  begin
    if Items.Count > 0 then
    begin
      Connection := Form1.GenelConnection;
      Close();
      SQL.Clear();
      SQL.Add('Select * From LISTEM');
      Prepared := True;
      Open();
      for J := Items.Count - 1 downto 0 do
      begin
        BuldumPl := Items.Item[J].SubItems[6];
        BuldumDb := FieldByName('TARIHI').AsString;
        if Pos(BuldumDb, BuldumPl) > 0 then // Aynı kayıt varsa
        begin
          SHOWMESSAGE(INTTOSTR(Items[J].Index));
        end;
      end;
    end;
  end;
end;
Hayat bazen güzel olabiliyor.
Cevapla
#2
Merhaba

 for J := Items.Count - 1 downto 0 do
     begin
       BuldumPl := Items.Item[J].SubItems[6];
       BuldumDb := FieldByName('TARIHI').AsString;
       if Pos(BuldumDb, BuldumPl) > 0 then // Aynı kayıt varsa
       begin
         SHOWMESSAGE(INTTOSTR(Items[J].Index));
       end;
     end;

Burada forla dönüyorsun ama her defasında sql cümlenin sonucunda dönen değerin ilk sırakadini alıyorsun. ilerlemiyorsun gördüğüm kadarıyla.

Benim while ile döndüğüm bir kod bloğu, her dönüşte Next fonksiyonu ile ilerlerim. Eof fonksiyonu sql cümlem ile dönen sorgunun sonuna geldiğimde while'dan çıkmamı sağlıyor.

       
   with MyQuery do
       begin
           Close;
           SQL.Clear;
           SQL.Add('SELECT * FROM sure where durum=:durum');
           ParamByName('durum').AsString := '0';
           Open;
           while not Eof do
           begin
             id := FieldByName('id').AsString;
             adı := FieldByName('adi').AsString;
             Next;
           end;
       end;

anladığım kadar sorun burada kontrol edebilir misin ?
WWW
Cevapla
#3
Programlama dilinden bağımsız olarak, kodda ki branch(dal), blok sayısını artıran kullanım şekillerinden uzak durmak,
ileriye yönelik kodun bakımını  ve debug edilmesi konusunda fayda sağlar.

Aksi takdirde karmaşıklık artacağı için kodu anlamak ve değiştirmek hem zorlaşacak hem de tehlikeli hale gelecektir.
One of the major software engineering challenges is managing change.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Aynı kayıt Mete 13 2.386 20-12-2022, Saat: 17:08
Son Yorum: ugorkem
  Fastreport Sürekli Aynı Satırı çekiyor Anarchosa 3 1.370 27-05-2021, Saat: 23:57
Son Yorum: Anarchosa
  Projede aynı anda 2 farklı soap servisi kullanımı (Çözüldü) tuna 2 1.152 19-04-2021, Saat: 19:30
Son Yorum: tuna
  Aynı anda 10.000 farklı cihazdan veri alışverişi yapma. pro_imaj 23 7.241 27-12-2020, Saat: 11:22
Son Yorum: pro_imaj
  Aynı Tabloda Farklı Sütunlarda Çoklu Filtreleme bünyamin68 18 5.564 19-12-2020, Saat: 22:10
Son Yorum: ozcanm



Konuyu Okuyanlar: 1 Ziyaretçi