Interbase de Tarih Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
şahmeran
Üye
Mesajlar: 17
Kayıt: 06 Ağu 2003 09:37
Konum: İstanbul

Interbase de Tarih Sorunu

Mesaj gönderen şahmeran »

S.A

Arkadaşlar benim sorunum tarihle ilgili. Database olarak interbase kullanıyorum programdan database bir tarih kayıt ederken:

mesela tarih "12.10.2003" olsun bu tarih database "12.10.2003 00:00" olarak kaydediyor burası tamam herhalde. Ama databaseden tarihi aldığım zaman "15.05.19041" olarak alıyor. Bunun ayarlamasını nasıl yapabilirim?
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

DB'ye tarihi kaydederken neyi kullanıyorsun? DBDateEdit?, DateEdit, veya doğrudan SQL cümlesi ile veya SQL Cümlesinde parametre olarak mı?

İstersen source'unun o bölümünü gönder...

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
şahmeran
Üye
Mesajlar: 17
Kayıt: 06 Ağu 2003 09:37
Konum: İstanbul

Mesaj gönderen şahmeran »

Tarihi TDateTimePicker dan alıyorum.

Kod: Tümünü seç

 
                Q_Kaydet.ParamByName('p_Ariza_Kodu').AsInteger :=  Q_Max_Ariza_KoduMAX.Value + 1;
                Q_Kaydet.ParamByName('p_Bil_Seri_No').AsString := E_Seri_No.Text;
                Q_Kaydet.ParamByName('p_Tarih').AsDate := date1.Date;
                Q_Kaydet.ParamByName('p_Kullanici_Adi').AsString := E_Kullanici_Adi.Text;
                Q_Kaydet.ParamByName('p_Kullanici_Bolumu').AsString := ComboBox1.Text;
                Q_Kaydet.ParamByName('p_Sikayet').AsString := E_Sikayet.Text;
                Q_Kaydet.ParamByName('p_Bil_Model_No').AsString := E_Model_No.Text;
                Q_Kaydet.ParamByName('p_Muhasebe_Kodu').AsString := E_Muhasebe_Kodu.Text;
                Q_Kaydet.ParamByName('p_Bolge_Adi').AsString := ComboBox2.Text;
                Q_Kaydet.ExecSQL;
İlgilendiğiniz için teşekkür ederim
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selam,

AsDate olarak değil de, AsDateTime olarak yap

yani

Kod: Tümünü seç


Q_Kaydet.ParamByName('p_Tarih').AsDateTime := Trunc(date1.Date);

şeklinde kullanırsan sorun kalmaz sanırım. Trunc etmemizin sebebi. tarih ve saati atarken sadece günü (tarihi) atabilmen için. Aksi takdirde datetime pickerda date atarken benim de anlayamadığım bir biçimde illa saati de atıyor. Bunu engellemek için Trunc etmek gerekiyor. (FB/IB'de)

Bu arada db'de tarih alanı TimeStamp olarak kullandın değil mi?

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

İnterbase de tarih alanının TIMESTAMP değil DATE olarak oluştur. Ancak Delphi 5 kullanıyorsan Delphi 5 DATE alanını desteklemeyecektir. IB 6.01 ve Delphi 6 Kullanıyorsan DATE alanını kullanabilirsin. Ancak Timestamp da kullansan tarih alanını düzgün alman gerekiyor. Program kodlarını kontrol et...
Kullanıcı avatarı
mpolat
Üye
Mesajlar: 96
Kayıt: 30 Ağu 2003 01:19
Konum: Malatya

Mesaj gönderen mpolat »

acizane bir öneri de benden DBDateTimePicker adında bir komponent var kullanışlı güzel bi komponent nerden indirdiğimi hatırlayamadım ama google'dan aratırsanız sonuç alabilirsiniz sanırım.
Kolay Gelsin...
"İlmin anası sormaktır"
şahmeran
Üye
Mesajlar: 17
Kayıt: 06 Ağu 2003 09:37
Konum: İstanbul

Mesaj gönderen şahmeran »

Merhaba

Arkadaşlar öncelikle ilgilendiğiniz için hepinize çok teşekkür ederim.

Delphi 5 ve interbase 5.5 i kullanıyorum. Interbasede tarihle ilgili sadece DATE var. TIMESTAMP yok. Tarihle ilgili kolona geldiğim zaman domain diye birşey var oradan RDB$TIMESTAMP i seçtim yine olmadı.

Kuri_TLJ, göndermiş olduğunuz kodu

Kod: Tümünü seç

Q_Kaydet.ParamByName('p_Tarih').AsDateTime := Trunc(date1.Date); 
denedim olmadı.

Databasede tarih düzgün gibi, mesela programdan database 13.10.2003 tarihini kaydettiğim zaman '13.10.2003 00.00' olarak kaydediyor. Fakat programdan o tabloyu listelediğim zaman tarihi 19.05.1175 olarak gösteriyor.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Allah Allah !

Nasıl yani verdiğiniz kod örneği hata mı veriyor?

Interbase 6.0 ve Delphi 5.0 ile, FireBird 1.01, 1.03 versiyonlarında sorunsuz olarak işlem yapabiliyorum ben.

Freeman35 kardeş sen ne diyorsun bu işe?

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Sorun listeleme sorunu olmasın sakın.

Yani eğer mesela SQL Explorer'dan baktığınız veya listelediğiniz aman tarihi düzgün grebiliyorsanız. Veya sql explorer'dan tarih girişini düzgün olarak girebiliyorsanız ve de bu girilen tarihleri hala programdan listelerken bozuk görüyorsanız, listeleme sırasındaki ilgili componentte bir sorun olabilir bi display format filan verilmiş olabilir. Kullanıdğınız sql cümlesi de önemli o cümleyi aynen sql explorer'da çalıştırdığınızdaki sonuç doğru ise listeleme sorunu olduğundan emin olabiliriz. eğer sql explorer'da da listelenirken sorunlu ise listeleme kodunu da bir gönderin orada da bir hata olabilir bu durumda.

Kolay gelsin....
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Eğer veritabanında TIMESTAMP yani hem tarih hem saat olarak tutacaksan ve böyle kullanmak istiyorsan;

Q_Kaydet.ParamByName('p_Tarih').AsDateTime := date1.Date; ile tarih kısmı tamam fakat saat kısmını sıfırlamış olursun.

veritabanından da alırken dikkat edeceğin sadece tarih mi lazım? Sadece tarih lazım diyorsan o zaman alanın tipini DATE seçmeliydin. Yok ilerde saat kısmı da gerekebilir diyorsan, o zaman TARIH+SAAT ten sadece TARIH i çekmen gerekiyor. Onu da ;

Date1.Date := StrToDate(FormatDateTime('dd.mm.yyyy', Q_Kaydet.ParamByName('p_Tarih').AsDateTime)); ile çekebilirsin.

Kolay gelsin.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Freeman35 derki :lol: :P
walla çok tuhaf.
Öncelikle IB 5x de dialect 1 kullanılır. yani Date diye geçen tip TimeStamp yani Tarih ve saat bilgisini içerir. IB6x den sonra çıkan dialect3 de tarih ve saati ayırabilirsiniz.
Soruna gelince. Neden parambyname ???? kayıt yapıyorsun madem neden direk olarak query kullanmıyorsun. fieldbyname().AsDateTime de geç. Geç kelimesi baştan savmak olarak anlaşılmasın. Ben sürekli bunu kullanırım.
IBX kullan ve bunun da yanılmıyorsam 8. update i çıktı. Mustafa sitenin bi yerine linklerini koymuştu.Borlandın sitesinden bulabilirsin bunu.
DateTime bir alana sadece tarih yazdırmak istiyorsan şunu kullanabilirsin

Kod: Tümünü seç

  xx.AsDateTime := Date1.Date + Time('00:00:01');
Kurili kardeşimin söylediklerine ek olarakta tarih bilgisi aslında real bir sayıdır. Bunun Tam sayı kısmı Tarih bilgisini ondalık kısmı ise saat bilgisini içerir.
DateTime ile ilgili olarakta TField ın DisplayFormat diye bir property si vardır buna gösterilmesini istediğin formatı verirsen o formatta gösterilir.
Yani : 14/10/2003 14:05:30 tarih bilgisi ve verdiğim format sa şu
dd mmm yyyy ddd
sonucu : 14 Ekm 2003 Sal olur
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 !!!
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Düzeltme; Önceki mesajımda copy/paste ile yaptığım ParamByName ler FieldByName olacak...

gözünden kaçmayan Freaman35 buçuğa teşekkürler :D hayret edecek bir şey yok aceleye gelmiştir kardeş, ne kızıyon :wink:
Cevapla