İki Tarih Arasında Listeleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

İki Tarih Arasında Listeleme

Mesaj gönderen pma »

Kiralanan adlı Tablomda Kiralanan filmleri kiralandığı tarihin kayıtlı olduğu ("K_Tarih") adlı alanım var datagridim de bu tablomu gösteriyorum

Kullanıcıya 2 adet datetimepicker dan başlangıç ve son tarih alıyorum bu iki tarih arasında Kiralanan filmleri Listeliyeceğim O aralıkta Kiralana filmler dışında olanlar gözükmeyecek filtre gibi

Nasıl Bir Kod İle Halledebilirim Not: Kullandığım veri tabanım paradox

Otomasyonumda Son eklenecek Parça Acill Yardım.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İki Tarih Arasında Listeleme

Mesaj gönderen brs »

Kod: Tümünü seç

SQL.Clear;
SQL.Add('SELECT * FROM arsiv WHERE TARIH BETWEEN :Tarih1 AND :Tarih2');
ParamByName('Tarih1').value:= FormatDateTime('yyyy-mm-dd', StrToDate(MaskEdit1.Text));
ParamByName('Tarih2').Value:= FormatDateTime('yyyy-mm-dd', StrToDate(MaskEdit2.Text));
Prepared:=True;
Open;
if IsEmpty then//Kayıt yoksa
begin
Label1.Caption:='Belirtilen Tarihler Arasında Kayıt Bulunamadı!';
end
else
begin
Label1.Caption:='kayıt var!';
end;
En son brs tarafından 23 May 2015 01:18 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: İki Tarih Arasında Listeleme

Mesaj gönderen pma »

brs sizn kodu şu şekilde biraz değiştirdim

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
Tarih1,Tarih2:String;
begin
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM mus_table WHERE K_Tarih BETWEEN :Tarih1 AND :Tarih2');
Query1.ParamByName('Tarih1').value:= DateToStr(DateTimePicker1.DateTime);
Query1.ParamByName('Tarih2').Value:= DateToStr(DateTimePicker2.DateTime);
Query1.Prepared:=True;
Query1.Open;
if Query1.IsEmpty then//Kayıt yoksa
begin
Form1.Caption:='Belirtilen Tarihler Arasında Kayıt Bulunamadı!';
end
else
begin
Form1.Caption:='kayıt var!';
end;
end;
end.
type of mismatch expression gibi bir hata aldı tip uyumsuzluğu hatası sanırım ama nerde bi hata yaptığımı bulamadım
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İki Tarih Arasında Listeleme

Mesaj gönderen brs »

Database deki "K_Tarih" alanın tarih alanı mı?

Bende sorun çıkmıyor...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: İki Tarih Arasında Listeleme

Mesaj gönderen pma »

evet kiralama işleminin yapıldığı gün database de K_Tarih Adlı Date Özellikli alanda

kodu çalıştırdığımda yazdığım hata geliyor

Benim Örneğim https://www.dropbox.com/s/6uo1vosxhepbr6i/deneme_1.rar
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: İki Tarih Arasında Listeleme

Mesaj gönderen pma »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
Tarih1,Tarih2:String;
begin
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM mus_table WHERE K_Tarih BETWEEN :Tarih1 AND :Tarih2');
Query1.ParamByName('Tarih1').AsDate:=(DateTimePicker1.DateTime);
Query1.ParamByName('Tarih2').AsDate:=(DateTimePicker2.DateTime);
Query1.Prepared:=True;
Query1.Open;
if Query1.IsEmpty then//Kayıt yoksa
begin
Form1.Caption:='Belirtilen Tarihler Arasında Kayıt Bulunamadı!';
end
else
begin
Form1.Caption:='kayıt var!';
end;
end;
end.
Sorunu Çözdüm Sadece Value leri AsDate yapıp çevirmeleri sildim şimdi çalışıyor İlgilendiğin İçin teşekkür Ederim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İki Tarih Arasında Listeleme

Mesaj gönderen brs »

Geçmiş olsun sevindim sorunu çözdüğüne ben database sqlite artık kullanıyorum o yüzden databaseyi inceleyemedim...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: İki Tarih Arasında Listeleme

Mesaj gönderen pma »

Bu kodları çalıştırdıktan sonra seçtiğim 2 tarih arasındaki veriyi yada verileri dbgrid de gösteriyor ama öyle kalıyor tekrar bütün tabloyu görmek için nasıl bir kod yazıcaz DBGrid.Refresh gibi bir kod lazım ama bir türlü bulamadım.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İki Tarih Arasında Listeleme

Mesaj gönderen brs »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
Tarih1,Tarih2:String;
begin
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM mus_table WHERE K_Tarih BETWEEN :Tarih1 AND :Tarih2');
Query1.ParamByName('Tarih1').AsDate:=(DateTimePicker1.DateTime);
Query1.ParamByName('Tarih2').AsDate:=(DateTimePicker2.DateTime);
Query1.Prepared:=True;
Query1.Open;
if Query1.IsEmpty then//Kayıt yoksa
begin

  Close;
      SQL.Clear;
      SQL.Add('Select * From mus_table order by ID DESC');   veya   SQL.Add('Select * From mus_table');
      Open;

Form1.Caption:='Belirtilen Tarihler Arasında Kayıt Bulunamadı!';
end
else
begin
Form1.Caption:='kayıt var!';
end;
end;
end.
En son brs tarafından 23 May 2015 01:18 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
pma
Üye
Mesajlar: 68
Kayıt: 26 Mar 2014 10:41

Re: İki Tarih Arasında Listeleme

Mesaj gönderen pma »

sizde çalıştımı bu kod ya bende çalışmıyor

SQL.Add('Select * From mus_table order by ID DESC'); yazdığımda "field in order by must be in result set" hatası veriyor run time da

SQL.Add('Select * From mus_table'); yazdığımda programı kapatıyor
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İki Tarih Arasında Listeleme

Mesaj gönderen brs »

Kullandığım bir kod paylaştım siz arşivden değil...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Re: İki Tarih Arasında Listeleme

Mesaj gönderen ender_arslanturk »

Selâmlar,

Kod: Tümünü seç

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From TabloAdi Where ID>0);
If CheckBox1.Checked=True Then Query1.SQL.Add('and Tarih>='+QuotedStr(DatetoStr(DateTimePicker1.Date)));
If CheckBox2.Checked=True Then Query1.SQL.Add('and Tarih<='+QuotedStr(DatetoStr(DateTimePicker2.Date)));
Query1.Open;

Prepare sorgu aynı şekilde kalırsa bir daha çalıştırıldığında hızlı çalışmasını sağlar. Ancak bir ilk prepare edildiğinde yavaştır. Sorgu şartları tekrar tekrar değişmesi ve prepare kullanılması sorgu performansının düşmesine sebep olacaktır. !

Ayrıca aynı şartlı sorgu için prepare kontrolünüzü zenginleştirmelisiniz..

Kod: Tümünü seç

If not Query1.Prepared Then
Query1.Prepare;
Bu gibi tarih sorgularını da müşteri seçimine bırakmak, kullanıcıya verimli bir kullanım sergileyecektir.


İyi çalışmalar.
Cevapla