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?
Delphi Excel Veri Aktarma Sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 6
- Kayıt: 18 Ara 2017 10:18
Delphi Excel Veri Aktarma Sorunu
En son yazilimci76 tarafından 22 Ara 2017 12:39 tarihinde düzenlendi, toplamda 5 kere düzenlendi.
-
- Üye
- Mesajlar: 6
- Kayıt: 18 Ara 2017 10:18
Delphi Excel Veri Aktarma Sorunu
.
En son yazilimci76 tarafından 22 Ara 2017 03:05 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Delphi Excel Veri Aktarma Sorunu
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.
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.
Ö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;
-
- Üye
- Mesajlar: 6
- Kayıt: 18 Ara 2017 10:18
Re: Delphi Excel Veri Aktarma Sorunu
Ç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?
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.
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.
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.
Re: Delphi Excel Veri Aktarma Sorunu
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
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?
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;
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?