Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird External Table Storage
#1
Merhabalar.

Kısaca yapmak istediğim şey, Firebird external tabloya dışarıdan binary fixed format olarak veri yazdırmak, akabinde external tablodan da esas tabloya aktarmak.

Char veya sayı biçimlerini binary veriye dönüştürebiliyorum. Ancak, "Date/Datetime/Timestamp" tiplerini dönüştüremedim.

Tek alandan oluşan ve tipi "Date" olan bir external tabloya "03.10.2018" tarihini sql insert yaptığımda 8 baytlık bir veri yazdı. Bu byte dizisi şu şekilde : { 253, 0, 0, 0, 26, 228, 0, 0 }

Bu dizinin eşiti olan sayı kaçtır ve "03.10.2018" tarihine ait bu sayıyı nasıl bulabilirim?

(Not: Visual Studio kullanıyorum)
Cevapla
#2
(04-10-2018, Saat: 14:05)anemos Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhabalar.

Kısaca yapmak istediğim şey, Firebird external tabloya dışarıdan binary fixed format olarak veri yazdırmak, akabinde external tablodan da esas tabloya aktarmak.

Char veya sayı biçimlerini binary veriye dönüştürebiliyorum. Ancak, "Date/Datetime/Timestamp" tiplerini dönüştüremedim.

Tek alandan oluşan ve tipi "Date" olan bir external tabloya "03.10.2018" tarihini sql insert yaptığımda 8 baytlık bir veri yazdı. Bu byte dizisi şu şekilde : { 253, 0, 0, 0, 26, 228, 0, 0 }

Bu dizinin eşiti olan sayı kaçtır ve "03.10.2018" tarihine ait bu sayıyı nasıl bulabilirim?

(Not: Visual Studio kullanıyorum)

Object Pascal'da TDate Time türü aslında kayan noktalı bir sayıdır(Double). Bu sayının tam kısmı 12/30/1899 tarihinden, OLE otomasyonu ve Microsoft Win32 uygulamaları tarafından kullanılan temel tarihten bu güne kadar geçen gün sayısını gösterir.(Daha önceki yılları belirtmek için eksi değerler kullanmak gerekir) ondalık kısmı ise zamanı gösterir. Örneğin : 3,75 değeri 1990 yılının 2 ocak tarihinde, öğleden sonra saat 6’ya (günün dörtte üçü) karşılık gelir. tarih eklemek veya çıkartmak için gün sayısını eklemeniz ve çıkartmanız yeterlidir. bu da günleri gün/ay/yıl temsili ile eklemekten daha kolaydır.

Hatırladığım kadarıyla firebirde aynı şekilde bu hesaplama ile bir test edin.

“Do. Or do not. There is no try.”
Cevapla
#3
(04-10-2018, Saat: 14:05)anemos Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhabalar.

Kısaca yapmak istediğim şey, Firebird external tabloya dışarıdan binary fixed format olarak veri yazdırmak, akabinde external tablodan da esas tabloya aktarmak.

Char veya sayı biçimlerini binary veriye dönüştürebiliyorum. Ancak, "Date/Datetime/Timestamp" tiplerini dönüştüremedim.

Tek alandan oluşan ve tipi "Date" olan bir external tabloya "03.10.2018" tarihini sql insert yaptığımda 8 baytlık bir veri yazdı. Bu byte dizisi şu şekilde : { 253, 0, 0, 0, 26, 228, 0, 0 }

Bu dizinin eşiti olan sayı kaçtır ve "03.10.2018" tarihine ait bu sayıyı nasıl bulabilirim?

(Not: Visual Studio kullanıyorum)

Visual Studio kullanıyorum yazmışsınız ama Delphi forumunda yazdığınız için Pascal'la yardımcı olabilirim Smile

Şu şekilde bir tip tanımı yaparsanız:
TTarihSayi = record
   case Boolean of
     True: (Tarih: array[1..8] of byte);
     False: (Sayi: double);
  end;
Bunu şöyle kullanabilirsiniz:
var
 dt: TDate;
 ts: TTarihSayi;
begin
  dt := StrToDate('03.10.2018');
  ts.Sayi := dt;
  // Artık burada ts.Tarih değişkeni 8 byte ile doludur. Bu Byte'ları kontrol ederek istediğiniz tarihe karşılık gelen byte dizisini bulmuş olursunuz
end;
There's no place like 127.0.0.1
WWW
Cevapla
#4
Cevaplar için her ikinize de teşekkür ederim.
Bu soruyu yabancı forumda da sordum ama yanıt alamadım. Delphi programcılarının Firebird ile yakın olduğunu biliyorum ve Firebird konuları için forumunuza üye oldum. Bu konu ile çalışan birileri vardır diyerek başlık açtım.

Cevaplarınız üzerinde çalışıp geri dönüş yapmaya çalışacağım.
Cevapla
#5
(05-10-2018, Saat: 00:38)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Object Pascal'da TDate Time türü aslında kayan noktalı bir sayıdır(Double). Bu sayının tam kısmı 12/30/1899 tarihinden, OLE otomasyonu ve Microsoft Win32 uygulamaları tarafından kullanılan temel tarihten bu güne kadar geçen gün sayısını gösterir.(Daha önceki yılları belirtmek için eksi değerler kullanmak gerekir) ondalık kısmı ise zamanı gösterir. Örneğin : 3,75 değeri 1990 yılının 2 ocak tarihinde, öğleden sonra saat 6’ya (günün dörtte üçü) karşılık gelir. tarih eklemek veya çıkartmak için gün sayısını eklemeniz ve çıkartmanız yeterlidir. bu da günleri gün/ay/yıl temsili ile eklemekten daha kolaydır.

Hatırladığım kadarıyla firebirde aynı şekilde bu hesaplama ile bir test edin.

64 bit Firebird'ü kaldırıp, 32 bit Firebird kurunca, "date" alanı için bu defa 8 yerine 4 baytlık veri yazdı.(64 bit ile de "date" idi)
Sonuç olarak sayılar doğru çıktı.

Peki 64 bit Firebird'ün "date" alanı için neden 8 baytlık veri yazdığı hakkında yorumunuz var mı? Çünkü 8 baytlık veriyi sayıya çevirdiğimde "1,23911822217751E-309" gibi tuhaf bir sayı geldi.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Firebird ile aynı server içindeki iki ayrı database deki tablolar arasında select serkansirin001@gmail.com 6 252 03-09-2019, Saat: 01:05
Son Yorum: mcuyan
  Alter Table Add Primary key(ID) çalıştıramadım 41linea41 5 405 25-06-2019, Saat: 20:57
Son Yorum: 41linea41
  Visual Studio Code kullanıcıları için Firebird Eklentisi rmzgenius 2 323 31-05-2019, Saat: 10:32
Son Yorum: edo
  Firebird Database Oluşturma SercanTEK 6 607 30-05-2019, Saat: 09:18
Son Yorum: rmzgenius
  Interbase/Firebird Veri Aktarımı [Ücretsiz] rmzgenius 0 279 19-03-2019, Saat: 09:11
Son Yorum: rmzgenius



Konuyu Okuyanlar: 1 Ziyaretçi