Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi Date - Sql Datetime
#1
Selamlar Arkadaşlar. İlk Konumu Açıyorum. Tüm Paylaşımlarınız için teşekkür ederim .

 qryRapor.Parameters.ParamByName('TTITARHBAS').Value := TTbaslangic.Date;
    qryRapor.Parameters.ParamByName('TTITARHBIT').Value := TTBitis.Date;

şeklinde iki tarih parametresini SP de karşılığı DateTIME olan iki alana gönderiyorum.
SET @SQL = @SQL + ' T.TTI_TARIH >= ''' + 
  CONVERT(NVARCHAR(8),@TTITARHBAS,112) +
 ''' AND T.TTI_TARIH < ''' +
 CONVERT(NVARCHAR(8),DATEADD(DAY,1,@TTITARHBIT),112)+''''
diye bir filtreleme yaparken eger datetime compenentinden boş gönderirsem " invalid character value for cast specification" 
hatası alıyorum.

delphi de debug ettiğimde datetime eger boş ise value "-700000" olarak gidiyor SQL serverda bu durumu yakalayamıyorum.
 Eger boş ise bu filtrelemeyi yapma şeklinde bir kontrolde yapamıyorum sql server neye ceviriyor yakalamadım . byardımcı olabilir misiniz ?
Cevapla
#2
@HuseyinF Bu işlemleri yapmanın bir çok yöntemi var fikir oluşturması açısından aklıma gelen bir kaçtnesini paylaşayım
1. Delphi tarafında TTbaslangic.Date'i kontrol edersin boşsa SP'ye null geçersin

2. SP içerisinde gelen parametreleri kontrol edersin ve local bir değişken yapıp atamam yaparak bu değişkenleri SP içerisinde kullanabilrsin böylece sana senin istediğin dışında birşey gelse bile sen istediğin gibi kullanmış olursun 
Örneğin
Procedure SPXXXX
....
@pBasTar DATETIME,
@pBitTar DATETIME
As
BEGIN
   DECLARE @BasTar DATETIME,
       @BitTar DATETIME
IF @pBasTar IS NULL BEGIN SET @BasTar = '19000101' else Set @BasTar = @pBasTar end
IF @pBitTar IS NULL BEGIN SET @BasTar = '21001231' else Set @BitTar = @pBitTar end
........
.....
    Select *  From  TableX
Where  (Tarih >= @BasTar AND Tarih <= @BitTar)
.......
.....
end
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#3
(18-07-2019, Saat: 09:31)HuseyinF Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Selamlar Arkadaşlar. İlk Konumu Açıyorum. Tüm Paylaşımlarınız için teşekkür ederim .

 qryRapor.Parameters.ParamByName('TTITARHBAS').Value := TTbaslangic.Date;
    qryRapor.Parameters.ParamByName('TTITARHBIT').Value := TTBitis.Date;

şeklinde iki tarih parametresini SP de karşılığı DateTIME olan iki alana gönderiyorum.

SET @SQL = @SQL + ' T.TTI_TARIH >= ''' + 
  CONVERT(NVARCHAR(8),@TTITARHBAS,112) +
  ''' AND T.TTI_TARIH < ''' +
  CONVERT(NVARCHAR(8),DATEADD(DAY,1,@TTITARHBIT),112)+''''


diye bir filtreleme yaparken eger datetime compenentinden boş gönderirsem " invalid character value for cast specification" 
hatası alıyorum.

delphi de debug ettiğimde datetime eger boş ise value "-700000" olarak gidiyor SQL serverda bu durumu yakalayamıyorum.
 Eger boş ise bu filtrelemeyi yapma şeklinde bir kontrolde yapamıyorum sql server neye ceviriyor yakalamadım . byardımcı olabilir misiniz ?

Merhabalar,

Öncelikle hoş geldiniz.

1) Delphide TDate parametre gönderirken kontrol edin. Eğer boş ise siz otomatik bir tarih aralığı gönderin. veya kullanıcıya tarih boş geçilemez uyarısı verdirin.
veya
2) SQL Server da Stored Procedure' de; eğer gelen değerler NULL ise boş gelen tarihleri SET ederek yine kendiniz bir tarih atayın ve rapora ulaşın.


Where kısmında >= ve <= yerine
Between
komutunu kullanabilirsiniz.

Where T.TTI_TARIH Between :tarih1 and :tarih2 

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#4
(18-07-2019, Saat: 09:53)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.@HuseyinF Bu işlemleri yapmanın bir çok yöntemi var fikir oluşturması açısından aklıma gelen bir kaçtnesini paylaşayım
1. Delphi tarafında TTbaslangic.Date'i kontrol edersin boşsa SP'ye null geçersin

2. SP içerisinde gelen parametreleri kontrol edersin ve local bir değişken yapıp atamam yaparak bu değişkenleri SP içerisinde kullanabilrsin böylece sana senin istediğin dışında birşey gelse bile sen istediğin gibi kullanmış olursun 
Örneğin
Procedure SPXXXX
....
@pBasTar DATETIME,
@pBitTar DATETIME
As
BEGIN
   DECLARE @BasTar DATETIME,
       @BitTar DATETIME
IF @pBasTar IS NULL BEGIN SET @BasTar = '19000101' else Set @BasTar = @pBasTar end
IF @pBitTar IS NULL BEGIN SET @BasTar = '21001231' else Set @BitTar = @pBitTar end
........
.....
    Select *  From  TableX
Where  (Tarih >= @BasTar AND Tarih <= @BitTar)
.......
.....
end

Çok teşekkürler . TcxDateEditten tarih boş gidince SQL tarafında IS NULL ile kontrol edemiyorum. Sanırım SQL de DATETIME alana NULL Gönderme olayı baştan yani tanımdan patlıyor. Bir bakacam tekrar teşekkür ederim

(18-07-2019, Saat: 09:53)hi_selamlar Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(18-07-2019, Saat: 09:31)HuseyinF Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Selamlar Arkadaşlar. İlk Konumu Açıyorum. Tüm Paylaşımlarınız için teşekkür ederim .

 qryRapor.Parameters.ParamByName('TTITARHBAS').Value := TTbaslangic.Date;
    qryRapor.Parameters.ParamByName('TTITARHBIT').Value := TTBitis.Date;

şeklinde iki tarih parametresini SP de karşılığı DateTIME olan iki alana gönderiyorum.

SET @SQL = @SQL + ' T.TTI_TARIH >= ''' + 
  CONVERT(NVARCHAR(8),@TTITARHBAS,112) +
  ''' AND T.TTI_TARIH < ''' +
  CONVERT(NVARCHAR(8),DATEADD(DAY,1,@TTITARHBIT),112)+''''


diye bir filtreleme yaparken eger datetime compenentinden boş gönderirsem " invalid character value for cast specification" 
hatası alıyorum.

delphi de debug ettiğimde datetime eger boş ise value "-700000" olarak gidiyor SQL serverda bu durumu yakalayamıyorum.
 Eger boş ise bu filtrelemeyi yapma şeklinde bir kontrolde yapamıyorum sql server neye ceviriyor yakalamadım . byardımcı olabilir misiniz ?

Merhabalar,

Öncelikle hoş geldiniz.

1) Delphide TDate parametre gönderirken kontrol edin. Eğer boş ise siz otomatik bir tarih aralığı gönderin. veya kullanıcıya tarih boş geçilemez uyarısı verdirin.
veya
2) SQL Server da Stored Procedure' de; eğer gelen değerler NULL ise boş gelen tarihleri SET ederek yine kendiniz bir tarih atayın ve rapora ulaşın.


Where kısmında >= ve <= yerine
Between
komutunu kullanabilirsiniz.

Where T.TTI_TARIH Between :tarih1 and :tarih2 

Kolay gelsin.

durumu SQL tarafında yönetemessem 1. yazdıgınızı yapacagım çok teşekkürler
Cevapla
#5
@HuseyinF TcxDateEdit nesnesinin cxDateEdit1.EditValue değerini alırsan null değerini kullanabilirsin
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#6
(18-07-2019, Saat: 15:11)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.@HuseyinF TcxDateEdit nesnesinin cxDateEdit1.EditValue değerini alırsan null değerini kullanabilirsin

Çok teşekkürler . Şöyle Halletim bir tane bool alan tanımladım SP de  ve dateedit null ise 0 gonderdim . Bu şekilde sp tarafında kontrol edebildim.
Cevapla
#7
@HuseyinF Direkt EditValue değerini parametreye basabilirsin böylece kontrol etmene gerek kalmaz
....
XTable.Close;
XTable.Sql.Text := .'Exec  SPXXXXXX BasTar BitTar'
XTable.Parameters.Parambyname('BasTar').Value := cxBasTar.EditValue;
XTable.Parameters.Parambyname(''BitTar).Value := cxBitTar.EditValue;
XTable.Open
...
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi IDE midas.dll Çakışması Hayati 6 249 25-10-2019, Saat: 23:30
Son Yorum: Tuğrul HELVACI
  Delphi Rest Api yhackup 20 3.737 01-10-2019, Saat: 18:30
Son Yorum: Mert_37
  Delphi'den SP ile kayıt Aktolgali 4 256 30-09-2019, Saat: 23:05
Son Yorum: Aktolgali
  Delphi & C# & Java Tuğrul HELVACI 25 1.497 30-09-2019, Saat: 10:36
Son Yorum: Tuğrul HELVACI
  Delphi Yeni Sürümlerde Fonksiyon Tanımlama Hayati 4 224 30-09-2019, Saat: 10:05
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi