FieldByName('Alan1').asDateTime := Now Milisaniye sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
muratmutlu
Üye
Mesajlar: 57
Kayıt: 02 Tem 2005 02:44
Konum: Antalya

FieldByName('Alan1').asDateTime := Now Milisaniye sorunu

Mesaj gönderen muratmutlu »

Merhaba.

Herhangi bir adoquery de bulunan DateTime tipindeki bir alana veri kaydemek istiyorum.

Kod: Tümünü seç

GenerateTime := Now;
AdoQuery1.Append;
AdoQuery1.FieldByName('Alan1').AsDateTime := GenerateTime;
AdoQuery1.Post;
Yukarıdaki işlem çalışıyor ancak miliseconds bölümünü yazmıyor. Yani tarih "09.12.2013 12:25:33.587" gibi bir değerken o sadece "09.12.2013 12:25:33.000" değerini yazıyor ve miliseconds yerine "000" koyup geçiyor. SQL database tarafında ise insert into ya parametre olarak GetDate() dersem sondaki milisaniyelerle birlikte yazıyor.

Bunun yanısıra: programı debug edip GenerateTime değişkenine baktığımda bana "09.12.2013 12:25:33" olarak bir değer gösteriyor ancak ne zaman FormatDatetime('dd.mm.yyyy hh:mm:ss.zzz',GenerateTime) deyip bakarsam bu sefer "09.12.2013 12:25:33.587" olarak gösteriyor.

Yukarıdaki kodu AdoQuery1.FieldByName('Alan1').AsString := FormatDatetime('dd.mm.yyyy hh:mm:ss.zzz',GenerateTime); yapsam bile herhangi bir şey değişmiyor ve database e yine "09.12.2013 12:25:33.000" olarak yazıyor. Bu sorunu nazıl çözebilirim.

XE4
Win 7 32 bit
SQL Server 2008
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: FieldByName('Alan1').asDateTime := Now Milisaniye sorunu

Mesaj gönderen thelvaci »

Maalesef dediklerinizde haklısınız. Bir kısmı ADO ile ilgili, diğer kısmı TDateTimeField ile ilgili bir sıkıntı. Madem SQL Server 2008 kullanıyorsunuz, bu durumda veritabanı tarafındaki field'ınızın türünü datetime'dan datetime2 ye çekin, bu sayede Delphi tarafına TWideStringField olarak gelecek field. Ardından FormatDatetime ile string olarak gönderdiğiniz zaman verinizi istediğiniz mili saniye bilgisini elde etmiş olacaksınız.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: FieldByName('Alan1').asDateTime := Now Milisaniye sorunu

Mesaj gönderen mussimsek »

SQL Server tarafında alanın default değerini "getdate()" olarak verin. Hem daha doğru değer elde edersiniz, hem de client'ın tarih ve saati yanlışsa etkilenmezsiniz...

Kolay gelsin.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: FieldByName('Alan1').asDateTime := Now Milisaniye sorunu

Mesaj gönderen akdatilla »

S.A.
Cevaplar işe yaradımı/test etmedim ancak şöyle bir teknik işe yarayabilir.
Kullanıdığınız alan tipini double precision olarak değiştir.
Sonra asDatetime değil .Value:=deger olarak değer gir(Delphi datetime veri tipi double sayıdan gelir).
Kolay gelsin.
Cevapla