Aynı tarihler

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Aynı tarihler

Mesaj gönderen Dostk »

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...

Kod: Tümünü seç

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;
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Aynı tarihler

Mesaj gönderen adelphiforumz »

aşağıdaki 2 yöntemden birini kullanabilirsin

Kod: Tümünü seç

var
  BuldumDb, BuldumPl: String;
  I:Integer;
begin
  With ListViewPL, FDQuery1 do
  begin
      Connection := '.....';
      Close();
      SQL.Clear();
      SQL.Add('Select * From LISTEM');
      Prepared := True;
      Open();

      Seçenek 1
      while Not(Eof) do
      begin
          ListViewPL.ItemIndex[0];
          if ListViewPL.Items.IndexOf(FieldByName('TARIHI').AsString) >= 0  then
            buldum......
          Next;
      end;

      yada.....
      Seçenek 2
      FDQuery1.DisableControls;
      for I := 0 to length(ListViewPL) - 1 do
      begin
          FDQuery1.First;
          if FDQuery1.Locate('TARIHI', ListViewPL.Items[I], [loPartialKey]) then
            buldum......
      end;
      FDQuery1.EnableControls;
  end;

Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Aynı tarihler

Mesaj gönderen ertank »

Dostk yazdı: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...

Kod: Tümünü seç

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;
Merhaba,

Yukarıdaki kod tüm liste verilerini SQL sorgusundaki ilk kayıt ile kotrol ediyor. Database içinde olup olmadığının kontrolünü TDataSet.Locate() ile yapmanızda fayda var. Ezberden ve test etmeden yazdığım aşağıdaki kod parçasının yön gösterici olacağını ümit ediyorum.

Kod: Tümünü seç

      for J := Items.Count - 1 downto 0 do
      begin
        if Form1.FDQuery1.Locate('TARIHI', Items.Item[J].SubItems[6], []) then
        begin
          ShowMessage(IntToStr(Items[J].Index));
        end;
      end;
Cevapla