Delphi Can
SQl tarih Sorunu - Baskı Önizleme

+- Delphi Can (http://www.delphican.com)
+-- Forum: Delphi (http://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (http://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: SQl tarih Sorunu (/showthread.php?tid=4165)



SQl tarih Sorunu - Bay_Y - 09-11-2019

Herkese hayırlı istirahatler ..

Aşağıda anlatmak istedim umarım anlatabilmişimdir. Windows Tarih ayarım görüldüğü gibi SQl üzerinden de Windowsdakini kullan ı seçtim , Delphi de anaformumun içine tarih formatını set etmeye çalıştım , Ama ne yaptıysam kayderken yine İngilizce formatında farklı kaydediyor sağ alt köşede bir örneği var buna kayıt işlemlerinde sıkıntıya sebeb oluyor.
Bu konuda örneride bulunabilecek biri varsa çok sevinirim.

Şimdiden Teşekkürler iyi dinlenmeler.




E9IZAS.jpg


Cvp: SQl tarih Sorunu - serdar - 09-11-2019

Merhaba 
Msql 'in tarih kayıt formatı yyyy-mm-dd şeklindedir. 
Siz veri tablosuna farklı format mı gırmek ıstıyorsunuz? veya
Dephi tarafında istediğiniz formattamı göstermeye caışıyorsunuz?

eğer ado kullanıyorsanız

procedure TData.ADOConnection1AfterConnect(Sender: TObject);
begin
if Sender is TADOConnection then TADOConnection(Sender).Execute('set dateformat dmy');
end;

yapmanız sorunu cozebilir


Cvp: SQl tarih Sorunu - Bay_Y - 09-11-2019

(09-11-2019, Saat: 09:34)serdar Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba 
Msql 'in tarih kayıt formatı yyyy-mm-dd şeklindedir. 
Siz veri tablosuna farklı format mı gırmek ıstıyorsunuz? veya
Dephi tarafında istediğiniz formattamı göstermeye caışıyorsunuz?

eğer ado kullanıyorsanız

procedure TData.ADOConnection1AfterConnect(Sender: TObject);
begin
if Sender is TADOConnection then TADOConnection(Sender).Execute('set dateformat dmy');
end;

yapmanız sorunu cozebilir

Öncelikle teşekkür ediyorum cevap için .

Doğrudur ado kullanıyorum , aslında sorunum şu StoreProcedure ile yaptığım kayıtlarda sorun yaşıyorum tarih gönderirken tarih boş ise sorun oluyor bunun önüne geçmek için bir çözüm arıyordum.


SQl tarih Sorunu - serdar - 09-11-2019

Ben o durumlarda
Adosp.FieldByName('Tarih').Asvariant:=null;
şeklinde kullanıyorum. Bi deneyin isterseniz


SQl tarih Sorunu - Bay_Y - 09-11-2019

Teşekkür ederim sağolun Hemen deniyorum.


Cvp: SQl tarih Sorunu - csunguray - 09-11-2019

(09-11-2019, Saat: 09:24)Bay_Y Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Herkese hayırlı istirahatler ..

Aşağıda anlatmak istedim umarım anlatabilmişimdir. Windows Tarih ayarım görüldüğü gibi SQl üzerinden de Windowsdakini kullan ı seçtim , Delphi de anaformumun içine tarih formatını set etmeye çalıştım , Ama ne yaptıysam kayderken yine İngilizce formatında farklı kaydediyor sağ alt köşede bir örneği var buna kayıt işlemlerinde sıkıntıya sebeb oluyor.
Bu konuda örneride bulunabilecek biri varsa çok sevinirim.

Şimdiden Teşekkürler iyi dinlenmeler.

MS SQL Server'da dil veya bölge ayarı bağımlı olmayan en güvenli TARİH formatı 'YYYYMMDD' şeklindedir. 'YYYY-MM-DD' şeklindeki tarih formatı bölge ve dil ayarlarına bağımlıdır ve farklı dil ve bölge ayarlarında farklı davranış gösterir. Güvenli TARİH + SAAT formatı ise 'yyyy-mm-ddThh:mi:ss.mmm' .

Daha önceki bir gönderide bilgi vermeye çalışmıştım. Onu incelerseniz faydalı olacağına inanıyorum.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.


SQl tarih Sorunu - mustafaozpinar - 09-11-2019

Bu konuda bir noktayı da belirtmek istiyorum. Tarihi farklı formatta gösteriyor, kayıt formatı hepsinde aynı. SQL server'in nasıl tuttuğunu bilmiyorum ama Delphi'de TDateTime tipi aslında Double'den (ya da Extended veya uygun farklı bir kayar noktalı sayı tipinden) türemiştir. Tarihi nasıl tuttuğuna gelirsek, 1-1-1900'den başlamak üzere gün sayısını integer kısmında, saat-dakika ve saniye'leri ise desimal kısımda tutar. Saat-dakika-saniyeleri 24 saate bölerek burada tutar.
Bu nedenle bir TDateTime değişkeninin desimal kısmını sıfırladığınız zaman TDate elde edersiniz.
Bu format şekli aslında birçok hesaplamayı da kolaylaştırır. Örneğin 2 tarih arasında kaç gün olduğunu bulmak için integer kısımlarının farkını almak yeterlidir.

MSSQL'de de bu şekilde, ancak onun tarih başlangıcı 31-12-1899'du sanırım. Yani böyle enteresan bir fark vardı. Bu da başıma bayağı bir dert olmuştu.
Yine MSSQL'de tarih formatını set edebileceğiniz bir komut da var.

SET DATEFORMAT { format | @format_var }
şeklinde kullanılıyor. Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. Eğer her SQL komutundan önce bunu kullanırsanız sorun ortadan kalkar sanırım.


Cvp: SQl tarih Sorunu - Bay_Y - 11-11-2019

(09-11-2019, Saat: 13:17)csunguray Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(09-11-2019, Saat: 09:24)Bay_Y Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Herkese hayırlı istirahatler ..

Aşağıda anlatmak istedim umarım anlatabilmişimdir. Windows Tarih ayarım görüldüğü gibi SQl üzerinden de Windowsdakini kullan ı seçtim , Delphi de anaformumun içine tarih formatını set etmeye çalıştım , Ama ne yaptıysam kayderken yine İngilizce formatında farklı kaydediyor sağ alt köşede bir örneği var buna kayıt işlemlerinde sıkıntıya sebeb oluyor.
Bu konuda örneride bulunabilecek biri varsa çok sevinirim.

Şimdiden Teşekkürler iyi dinlenmeler.

MS SQL Server'da dil veya bölge ayarı bağımlı olmayan en güvenli TARİH formatı 'YYYYMMDD' şeklindedir. 'YYYY-MM-DD' şeklindeki tarih formatı bölge ve dil ayarlarına bağımlıdır ve farklı dil ve bölge ayarlarında farklı davranış gösterir. Güvenli TARİH + SAAT formatı ise 'yyyy-mm-ddThh:mi:ss.mmm' .

Daha önceki bir gönderide bilgi vermeye çalışmıştım. Onu incelerseniz faydalı olacağına inanıyorum.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.


Teşekkür ederim , Genelde bende bunu kullanmaya çalışıyorum.

(09-11-2019, Saat: 15:40)mustafaozpinar Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Bu konuda bir noktayı da belirtmek istiyorum. Tarihi farklı formatta gösteriyor, kayıt formatı hepsinde aynı. SQL server'in nasıl tuttuğunu bilmiyorum ama Delphi'de TDateTime tipi aslında Double'den (ya da Extended veya uygun farklı bir kayar noktalı sayı tipinden) türemiştir. Tarihi nasıl tuttuğuna gelirsek, 1-1-1900'den başlamak üzere gün sayısını integer kısmında, saat-dakika ve saniye'leri ise desimal kısımda tutar. Saat-dakika-saniyeleri 24 saate bölerek burada tutar.
Bu nedenle bir TDateTime değişkeninin desimal kısmını sıfırladığınız zaman TDate elde edersiniz.
Bu format şekli aslında birçok hesaplamayı da kolaylaştırır. Örneğin 2 tarih arasında kaç gün olduğunu bulmak için integer kısımlarının farkını almak yeterlidir.

MSSQL'de de bu şekilde, ancak onun tarih başlangıcı 31-12-1899'du sanırım. Yani böyle enteresan bir fark vardı. Bu da başıma bayağı bir dert olmuştu.
Yine MSSQL'de tarih formatını set edebileceğiniz bir komut da var.

SET DATEFORMAT { format | @format_var }
şeklinde kullanılıyor. Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. Eğer her SQL komutundan önce bunu kullanırsanız sorun ortadan kalkar sanırım.

Bilgilendirme için çok teşekkürler.