arkadaşlar;
...
var
tarih:TDate;
begin
tarih:=NOW+StrtoInt(Edit1.text);
Query1.close;
Query1.SQL.clear;
Query1.SQL.add('select * from co.db');
Query1.SQL.add('Where ODEMETARIHI BETWEEN ' +#39+DateTostr(now)+#39 + 'AND' + #39 + DatetoStr(tarih) + #39);
Query1.open;
bu sorgu çalışıyor! yalnız;
sql sorgusunda edit1.text'in değerine mesela 10 yazınca yanlış listeleme yapıyor.
doğru değerleri getirmesi için tarih değişkenini:
tarih:=NOW+(Edit1.Text)+31 şeklinde değiştirmeniz yani sonuna +31 eklemeniz gerekiyor. bu şekildeki değişiklikleri yapınca program düzenli olarak çalışıyor.
Sorum şu:
Bu sorgu sorun çıkarmadan düzenli olarak çalışır mı?
yoksa ben mi yanlışlık yapıyorum?
bana göre kodlarda bi yanlışlık yok. sadece tarih değişkenini neden belirttiğim gibi değiştirmem gerekti onu anlamadım.
Kolay gelsin!
SQL tarih sorgulama hatası (BETWEEN)
yapmak istedigin bugunun tarihi ile 10 yada degisken bir gun arası sorgulama yapmak ise basit toplama yerine IncDay gibi fonksiyonları kullan
bende d5 oldugundan bu fonk yok ama muhtemelen d6 yada d7 de var
ornek kullanım
bende d5 oldugundan bu fonk yok ama muhtemelen d6 yada d7 de var
ornek kullanım
Kod: Tümünü seç
Example code : A simple example of increment and decrement
// Full Unit code.
// -----------------------------------------------------------
// You must store this code in a unit called Unit1 with a form
// called Form1 that has an OnCreate event called FormCreate.
unit Unit1;
interface
uses
DateUtils, // Unit containing the IncDay command
SysUtils,
Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm} // Include form definitions
procedure TForm1.FormCreate(Sender: TObject);
var
myDate : TDateTime;
begin
// Set up our date just before the end of the year 2000
myDate := EncodeDate(2000, 12, 30);
ShowMessage('myDate = '+DateToStr(myDate));
// Add 10 days to this date
myDate := IncDay(myDate, 10);
ShowMessage('myDate + 10 days = '+DateToStr(myDate));
// Subtract 12 days from this date
myDate := IncDay(myDate, -12);
ShowMessage('myDate - 12 days = '+DateToStr(myDate));
end;
end.
/////////////////////////////////////////////////////////
sonuc:
myDate = 30/12/2000
myDate + 10 days = 09/01/2001
myDate - 12 days = 29/12/2000
ÜŞENME,ERTELEME,VAZGEÇME
@gkimirti dediği işini görür. Merakımdan soruyorum, Neden Edit Kullanıyorsun, DateTimePicker değil ?
...
var
begin
tarih:=NOW+StrtoInt(Edit1.text);
Query1.close;
Query1.SQL.clear;
Query1.SQL.add('select * from co.db');
Query1.SQL.add('Where ODEMETARIHI BETWEEN ' +#39+DateTostr(now)+#39 + 'AND' + #39 + DatetoStr(tarih) + #39);
Query1.open;
..
yerine
SQL runtimeda değişmiycekse yani parametrelerin dışında 1 kez yaman yeterli
Kullanım içinde
...
gibi bir kod kullanırsan sanırım daha iyi olur.
Kolay gele
...
var
begin
tarih:=NOW+StrtoInt(Edit1.text);
Query1.close;
Query1.SQL.clear;
Query1.SQL.add('select * from co.db');
Query1.SQL.add('Where ODEMETARIHI BETWEEN ' +#39+DateTostr(now)+#39 + 'AND' + #39 + DatetoStr(tarih) + #39);
Query1.open;
..
yerine
SQL runtimeda değişmiycekse yani parametrelerin dışında 1 kez yaman yeterli
Kod: Tümünü seç
...
//FormShow Event ı olabilir
Query1.close;
Query1.SQL.clear;
Query1.SQL.add('select * from co.db');
Query1.SQL.add('Where ODEMETARIHI BETWEEN :_IlkTarih AND :_SonTarih);
........
...
Kod: Tümünü seç
Query1.Close;
Query1.Prepare;
Query1.ParamByName('_IlkTarih').AsDateTime := TDate(DateTimePicker1.Date);
Query1.ParamByName('_SonTarih').AsDateTime := TDate(DateTimePicker2.Date);
Query1.Open;
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!