Farklı Databasede İki Tarih Arasında Arama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen brs »

Selam;

Database içinde çok sayıda kayıt olduğundan, verilerin yavaş ekrana gelmesi ve çökme ihtimaline karşı farklı database içinde arama yaptırmak istiyorum fakat bir türlü mantık kuramadım, C:\DATALAR\15.05.2015 ve 16.05.2015 gibi tarihli datalardan verileri tek bir ListViewe nasıl alabilirim...

Kod: Tümünü seç

begin
  try
    Form1.ListView1.Items.Clear;
    with Form1.Playlist do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Select * From PLAYLIST');
      SQL.Add('Where ADI Like ' + QuotedStr('%' + Edit1.Text + '%'));
      SQL.Add('And YTARIH BETWEEN :Tarih1 and :Tarih2 Order by SIRANO ASC');
      params.ParamByName('Tarih1').AsDate := MonthCalendar1.Date;
      params.ParamByName('Tarih2').AsDate := MonthCalendar2.Date;
      Prepared := True;
      Open;
      if Not IsEmpty then // Kayıt Varsa
      begin
        while Not Eof do
        begin
          with Form1.ListView1.Items.Add do
          begin
            Caption := IntToStr(Form1.ListView1.Items.Count);
            SubItems.Add(FieldByName('START').AsString);
            SubItems.Add(FieldByName('ADI').AsString);
            SubItems.Add(FieldByName('YTARIH').AsString);
            Next;
          end
        end
      end
      else
      begin
        Application.MessageBox('Kayıt Bulunamadı!', 'Bulunamadı!',
          MB_Ok or MB_ICONQUESTION);
      end;
    end;
  except
  end;
end;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen esistem »

Selam,
Çok kayıttan kastınız kaç adet? birkaç milyon kayıt varmı mesela ?
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen brs »

esistem yazdı:Selam,
Çok kayıttan kastınız kaç adet? birkaç milyon kayıt varmı mesela ?
:D Ortalama günde 1500 - 2000 kayıt girişi olacak yılda ortalama kayıt 73000 dersek 5 yıl sonra 3650000 kayıt olduğunda sqlite bu kaydı kaldırabilir mi? ve database çökme durumunda tüm kayıtla gidebilir...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen esistem »

sqlite mi :) bence 1000 kaydı aştığında kork (benim düşüncem tabi bu üstadlar ne der bilemem), ben olsam böyle bir projede firebird kullanırdım yada mysql. Fakat durum böyle dahi olsa her güne ayrı VT yerine, aylık yada yıllık yapmak daha mantıklı bence, zira deneyimlerime göre sizi çok çok fazla uğraştırır (Özellikle zaman geçtikçe Vt yada tablo sayısı artacağından yedekleme ve veri bütünlüğü kontrolü çok zor oluyor). Fakat aynı zamanda minimum veri kaybı açısından mükemmel bir koruma yöntemi.

Bu arada yazdıklarınızdan anladığım şu;
Her gün dönümünde farklı bir database oluturuyosunuz, yani data klasörünüzde 15.05.2015.db, 16.05.2015.db ... gibi datalar oluyor değilmi ?
Eğer durum böyleyse sorgunuz şu şekilde olmalıdır. İki tarih arasında bir döngü oluşturup, her dönümde data klasörünüzde gelen tarih adında bir VT varmı kontrol edip, eğer varsa ona bağlanıp içindeki verileri alıp listview'e basmanız gereklidir. Fakat burda şu handikap ortaya çıkıyor (benim çok başıma geldi), kişi son 2 yıllık tarih aralığı vermişse program en az 700 VT ye tek tek bağlanıp, verileri alıp view'e basacak. Sizce ne kadar hızlı olabilir?
veya mesela 300. vt ye geldi ve VT bozulmuş, raporun yada listenin ortasında programda bir kırılma olacaktır.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen pasa_yasar »

Sqlite kullandım bazı projelerimde. Index yapısı falan bozulduğunda kurtaramıyorsun. Müşterilerim ve ben zor durumda kalmıştık. Güçlü kurtarma araçları da yok. Sqlite basit işler için kullanabilirsin bence. Daha iyi işler için ve gömülü istiyorsan interbase,sqlcompact(sql server),mysql kullanabilirsin diye düşünüyorum. Rehber, Geçici işlem verileri için SQLite kullanabilirsin.
En son pasa_yasar tarafından 14 May 2015 10:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen esistem »

Sqlite ı ben el terminallerinde kullandım, müşterimin birinde 3 el terminalinde her gün sipariş alınıp araç yazıcısından fatura kesiliyordu. 8 yılda sanırım 3 yada 4 kez veri kaybı yaşadık fakat bu bile yetiyor tabi, günlük bütün yapılan satışlar ve tahsilatlar kayıp olmuştu herhangi bir şekilde de geri alamadık o yüzden pek güvenmiyorum.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen brs »

Setup haline getirmeden programı exe ile çalıştırıyorum, bu nedenden dolayı sorunsuz olarak sqlite databaseyi manuel oluşturuyorum,
manuel olarak MYSql oluşturmak istediğimde libmysql.dll sorunu ortaya çıkıyor bu durumu nasıl çözebilirim?
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen Battosai »

Kayıt sayısının fazla olması tüm Veritabanları için yavaşlama sebebidir. Fazla kayıt sayısı veritabanını çökertme sebebi sayılamaz. Bahsettiğiniz kayıt sayısı zaten çok değil. Sqllite adı üstünde "lite" olduğu için programınız dallanmaya,büyümeye başladığında farklı SQL ihtiyaçları hasıl olacaktır. Bu durumda Sqllite yetersiz kalabilir. Sqllite genel olarak karışık sorgulara ihtiyaç duyulmayan daha basit işlerde kullanılıyor. Ve oldukça başarılı bir veritabanıdır. Veri kaybı meselesine gelince bu mevzu sadece SQLlite ile alakalı değil tüm VT sistemlerinde karşılaşılabilir bir sorun. SQllite da transaction desteği var fakat biraz arama yaparsanız kullanıcıların ortak şikayeti güç kaybı ve sistemin ani kapanmasından kaynaklanan sorunları içeriyor. Bunların dışında veriler diske yazıldığı için diskteki en ufak bir sektör hatası yada bozulma diyelim yine veritabanını etkileyebilir. Güç kaybı ve ani kapanmalar tüm sistemler için bir veri kaybı sebebi olabilir.

Kısaca;
-Transaction kullanın
-Kullanıcılara veritabanı sunucuları(bilgisayarları artık vt. nerdeyse) için UPS kullanmalarını tavsiye edin hatta kullanmalısınız deyin.
-Dosya boyutu çok büyüyorsa veritabanını dönemlere veya seneye göre oluşturabilirsiniz. Bir çok program böyle yapıyor.
-Sqllite'ın dosya boyutu GB seviyesine çıktığında ne tür sorunlar çıkarabileceğini araştırın.
-Tüm sorgularınızı LIMIT ile sınırlayın. Desktop yazılım yapanlarda genelde bu önemsenmiyor sonra kayıt sayısı artınca SQL yavaşladı program kitlendi diye söylenmeye başlıyorlar. Programcı atıyor bir Ttable bileşeni "open" diyor sonra vayyy bu niye bu kadar yavaşladı :)
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Farklı Databasede İki Tarih Arasında Arama

Mesaj gönderen esistem »

Sayın brs, Firebird Embedded olayını bir araştırın. Bu forumda da embedded çalıştırma ile ilgili konular vardı.
Cevapla