Delphi Excel Veri Aktarma Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
yazilimci76
Üye
Mesajlar: 6
Kayıt: 18 Ara 2017 09:18

Delphi Excel Veri Aktarma Sorunu

Mesaj gönderen yazilimci76 » 18 Ara 2017 10:15

Programım Delphi 7 üzerinde, access veritabanı kullanarak master-detail tablo yapısına sahip.
adoconnection, adotable ve datasource bileşenlerini kullanarak bağlantı sağladım.

Delphi 7 de dbgridde bulunan verileri excele
excel.cells[kacincikayit,2].value:=ADODataSet1aciklama.Value;
ADODataSet1.next;

komutları ile aktarırken açıklama alanı boş olan satırlara da bir önceki dolu olanın değerini aktarıyor arkadaşlar.
sebebi ne olabilir? boş olanları boş aktarması için ne yapmam gerekiyor?
En son yazilimci76 tarafından 22 Ara 2017 11:39 tarihinde düzenlendi, toplamda 5 kere düzenlendi.

yazilimci76
Üye
Mesajlar: 6
Kayıt: 18 Ara 2017 09:18

Delphi Excel Veri Aktarma Sorunu

Mesaj gönderen yazilimci76 » 22 Ara 2017 11:36

.
En son yazilimci76 tarafından 22 Ara 2017 02:05 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

ertank
Üye
Mesajlar: 1141
Kayıt: 11 Eyl 2015 11:45

Re: Delphi Excel Veri Aktarma Sorunu

Mesaj gönderen ertank » 22 Ara 2017 12:48

Merhaba,

Öncelikle ilk yazdığınız mesaj ile ikincisi benim anladığım kadarıyla aynı.

Excel aktarımında aşağıdaki gibi veri ataması yapmanızda fayda var.

Kod: Tümünü seç

Excel.Cells[KacinciKayit, 2].Value := ADODataSet1aciklama.AsString;
Ayıca aktardığınız veriden emin olmalısınız. Görünmeyen karakter(ler) var ise aktarım sırasında bunlar da soruna yol açabilirler.

yazilimci76
Üye
Mesajlar: 6
Kayıt: 18 Ara 2017 09:18

Re: Delphi Excel Veri Aktarma Sorunu

Mesaj gönderen yazilimci76 » 22 Ara 2017 01:57

Çok teşekkürler şimdi oldu. :)
sadece excel e aktarırken mi yoksa program içerisinde verileri toplatırken falan da bu şekilde mi kullanmak gerekiyor?
peki tabloda sayı, para birimi, tarih alanları da var.
onlarda nasıl kullanmam gerekiyor?

Kod: Tümünü seç

asInteger, asFloat, asDateTime varmış şimdi gördüm.
bir de tarih alanı boş olanları 0 olarak alıyor excel de onları 12:00:00 olarak gösteriyor böyle bir sorun var. :(
en doğru kullanım neyse onları da değiştireyim.


ilk mesajda farklı bir sorun vardı ama onu çözdüm. o yüzden değiştirmiştim.

ertank
Üye
Mesajlar: 1141
Kayıt: 11 Eyl 2015 11:45

Re: Delphi Excel Veri Aktarma Sorunu

Mesaj gönderen ertank » 22 Ara 2017 02:51

FieldByName('alanadi').Value şeklindeki erişim Variant şeklinde bir erişimdir. Variant veri tipinin birçok özelliği yanında en bilinen özelliği NULL değer olabilmesidir. Delphi'de diğer veri tipleri şimdilik NULL olamıyorlar. Gelecek Delphi sürümlerinde "nullable types" şeklinde bir özellik ekleneceği duyuruldu diye biliyorum.

Variant veri tipini bir database ile kullanmanın şahsi görüşüm tek sebebi bir database tablo alanına NULL değer atamak veya NULL kontrolü yapmak olmalıdır. Zira Variant atama yapılan veriyi kontrol etmez. Dolayısıyla

Kod: Tümünü seç

var
  V: Variant;
begin
  V := '33/12/2017';
  ShowMessage(DateToStr(VarToDateTime(V)));
end;
Mantık olarak hatalı ancak Delphi derleyicisi tarafından sorunsuzca kullanılabilir bir ifadedir. Ancak çalışma zamanında hataya yol açacaktır. Variant yerine database tablosu etkileşiminde ilgili kolon veri türüne uygun .AsString, .AsFloat, .AsDate, .AsDateTime, vb. veri türlerini kullanmak gerekir.

Bu veri türleri atama yaptığınız veya okuduğunuz değerin kontrolünü yaparlar. Yani eğer bir hatanız var ise atama anında ortaya çıkarırlar.

Delphi için tanımsız tarih 0 (sıfır) dır. Tarih formatında gösterimi "30/12/1899 12:00 am" şeklindedir.
http://docs.embarcadero.com/products/ra ... eTime.html

Excel ise 0 rakamını tarih formatında "00/01/1900 00:00:00" şeklinde gösterir. Excel için en küçük tarih değeri 1 olup "1/1/1900 12:00:00 am" şeklinde tarih olarak gösterir.
https://support.microsoft.com/en-us/hel ... s-in-excel

Kısacası aralarında kullanım farkı vardır. Bu anlamda aktarım sırasında tarih alanlarına, ondalıklı rakamlara ayrıca özen göstermeniz gerekir.

Excel aktarım kodunuzu ve aktarılan tablo database CREATE TABLE komutunu bir bütün olarak paylaşabilir misiniz?

Cevapla