Query sonunucunu txt dosyaya yazmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Query sonunucunu txt dosyaya yazmak

Mesaj gönderen conari »

Kod: Tümünü seç

var f   : TextFile;
begin
 MyPath:=Extractfilepath(Application.ExeName);
  AssignFile(f, mypath+'SALES.txt');
  SalCurQuery.Open;
  Rewrite(F);
  With SalCurQuery do
    While NOT EOF do begin
      Writeln(f, Format('%d %s',[FieldByName('MUSTERI').AsInteger, FieldByName('STOK').AsString ,FieldByName('AY1_MIKTAR').AsInteger  ,FieldByName('AY2_MIKTAR').AsInteger,FieldByName('AY3_MIKTAR').AsInteger] ) );
      Next;
    end;
  CloseFile(f);
   End;
Arkadaşlar sadece ilk iki fieldı yazıyor nerede hata yapıyor olabilirim? :roll:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

Format tanımlamasında
Format('%d %s' kullanmışsınız bundan kaynaklanabilir.
5 alan kullanmışsınız ama formatta 2 alan için formatlama belirlemişsiniz.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Haklısın,
fakat miktar içi 12 ve tutar için 12 alan daha toplam 24 alan ediyor.

Kod: Tümünü seç

Format('%d %s %d %d %d %d %d %d %d %d %d %d %d %d'
şeklinde yazmak yerine farklı bir metodu olmalı diye düşünüyorum.
şu 12 tane daha %d ekledim.
tutarlar içinde %f Ekleyerek çözdüm..
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

%f. Bu temel konular için çevrim içi yardıma bakabilirsin fakat writeln prosedüründe de sınırsız parametre gönderebilirsin. Hiç format kullanmadan.

Kod: Tümünü seç

Writeln(f, Format('%d %s',[FieldByName('MUSTERI').AsInteger, FieldByName('STOK').AsString ,FieldByName('AY1_MIKTAR').AsInteger  ,FieldByName('AY2_MIKTAR').AsInteger,FieldByName('AY3_MIKTAR').AsInteger] ) );
yerine

Kod: Tümünü seç

Writeln(f, FieldByName('MUSTERI').AsInteger, ' ', FieldByName('STOK').AsString, ' ' ,FieldByName('AY1_MIKTAR').AsInteger, ' '  ,FieldByName('AY2_MIKTAR').AsInteger, ' ', FieldByName('AY3_MIKTAR').AsInteger);
kullanabilirsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Hoca dediğin gibi Formatı kaldırarak denedim fakat Currency olarak aldığım fieldlar 1.70928000000000E+0003 şeklinde geliyor.

Kod: Tümünü seç

FieldByname('AY1_TUTAR').AsCurrency 
Ayrıca başka başlık açmayım dedim. Her sütunun aynı hizada gitmesini istiyorum yani karakter sayıları hizalamyı etkilememeli .
Bunu nasıl yapabilirim :?: :cry:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

O halde : kullanarak biçimlendirmen gerekmektedir.

deger[:sayı[:sayı]] biçiminde kullanılır. Mesela bir değeri 15 karakterlik bir alan içinde yazılacaksa Deger:15 yazman gerekiyor. Deger:-15'te ise bu değer sağa yaslı olması gerekiyor. Test etmedim ama aklımda böyle kaldı. Reel sayılarda ondalık kısmına ayar çekilecekse (mesela 3 ondalıklı olacaksa) Sayi:15:3 şeklinde yazılmalıdır. Bu durumda 3'ü ondalığa ayrılmış 15 karakterlik bir alana sayı yazılır (mantık olarak tam kısmına 12 karakter kalır). Yine bu sayı sağa yaslanacaksa Sayi:-15:3 şeklinde yazılmalıdır. Daha kesin ve geniş bilgi için Ömer Akgöbek'in Pascal kitabındaki Write-Writeln konu anlatımını inceleyebilirsin.

Kod: Tümünü seç

Writeln(f, FieldByName('MUSTERI').AsInteger:-15, ' ', FieldByName('STOK').AsString:15, ' ' ,FieldByName('AY1_MIKTAR').AsInteger:15, ' '  ,FieldByName('AY2_MIKTAR').AsInteger:15, ' ', FieldByName('AY3_MIKTAR').AsInteger:15);
gibi .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

conari yazdı:Hoca dediğin gibi Formatı kaldırarak denedim fakat Currency olarak aldığım fieldlar 1.70928000000000E+0003 şeklinde geliyor.

Kod: Tümünü seç

FieldByname('AY1_TUTAR').AsCurrency 
Ayrıca başka başlık açmayım dedim. Her sütunun aynı hizada gitmesini istiyorum yani karakter sayıları hizalamyı etkilememeli .
Bunu nasıl yapabilirim :?: :cry:
Şaban hocam sayılar için vermiş metinler içinse boşlukbırak gibi bir fonksiyon yazıp metnin varolan uzunluğundan vt de ki boyunu çıkarıp araya sabit uzunluk içino lması gereken sayısyı bulmalısın.

boşluksayısı= vtdeki boyutu-length(kayıda girilen sayısı)
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

lonely yazdı:
conari yazdı:Hoca dediğin gibi Formatı kaldırarak denedim fakat Currency olarak aldığım fieldlar 1.70928000000000E+0003 şeklinde geliyor.

Kod: Tümünü seç

FieldByname('AY1_TUTAR').AsCurrency 
Ayrıca başka başlık açmayım dedim. Her sütunun aynı hizada gitmesini istiyorum yani karakter sayıları hizalamyı etkilememeli .
Bunu nasıl yapabilirim :?: :cry:
Şaban hocam sayılar için vermiş metinler içinse boşlukbırak gibi bir fonksiyon yazıp metnin varolan uzunluğundan vt de ki boyunu çıkarıp araya sabit uzunluk içino lması gereken sayısyı bulmalısın.

boşluksayısı= vtdeki boyutu-length(kayıda girilen sayısı)
İlk örneğim string değerler içinde çalışıyor.
sabanakman yazdı:O halde :...Deger:-15'te ise bu değer sağa yaslı olması gerekiyor. ...

Kod: Tümünü seç

...FieldByName('STOK').AsString:15...
Daha da ileri gidip,

Kod: Tümünü seç

...FieldByName('STOK').AsString:FieldByName('STOK').Size...
biçiminde değişken değerleri de kullanılabiliyor diye hatırlamaktayım :wink: İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Hoca ve lonely teşekkür ederim.
fakat bu şekilde currency alanlarım 1.70928000000000E+0003 bu şekilden geliyor kurtaramadım..
format vermeden yazmada, bunu nasıl halledeceğim.. :roll:
En son conari tarafından 01 Ağu 2007 12:50 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

sabanakman yazdı:O halde : kullanarak biçimlendirmen gerekmektedir.

deger[:sayı[:sayı]] biçiminde kullanılır. Mesela bir değeri 15 karakterlik bir alan içinde yazılacaksa Deger:15 yazman gerekiyor. Deger:-15'te ise bu değer sağa yaslı olması gerekiyor. Test etmedim ama aklımda böyle kaldı. Reel sayılarda ondalık kısmına ayar çekilecekse (mesela 3 ondalıklı olacaksa) Sayi:15:3 şeklinde yazılmalıdır. Bu durumda 3'ü ondalığa ayrılmış 15 karakterlik bir alana sayı yazılır (mantık olarak tam kısmına 12 karakter kalır). Yine bu sayı sağa yaslanacaksa Sayi:-15:3 şeklinde yazılmalıdır. Daha kesin ve geniş bilgi için Ömer Akgöbek'in Pascal kitabındaki Write-Writeln konu anlatımını inceleyebilirsin.

Kod: Tümünü seç

Writeln(f, FieldByName('MUSTERI').AsInteger:-15, ' ', FieldByName('STOK').AsString:15, ' ' ,FieldByName('AY1_MIKTAR').AsInteger:15, ' '  ,FieldByName('AY2_MIKTAR').AsInteger:15, ' ', FieldByName('AY3_MIKTAR').AsInteger:15);
gibi .
Hoca kusura bakma burası :shock: gözümden kaçmış teşekkür ederim :lol:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Ben şahsen hep format fonksiyonunu kullanıyor olsam da Currency alanlarını

Kod: Tümünü seç

FieldByname('AY1_TUTAR').AsCurrency 
şeklinde değil de

Kod: Tümünü seç

FieldByname('AY1_TUTAR').AsString
şeklinde kullanırsan sorun ortadan kalkması lazım..
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Her şey iyi güzel, aktarımımda problem yok format da istediğim gibi, fakat ;
txt belgeyi excel e drop(taşıdığımda) ettiğimde alanlar birleşik geliyor, manuel "metni sütunlara dönüştür" yapmam gerekiyor.

aralara boşluk koymuştum sanırım Tab koymam gerekli, fakat tab koyarsam, normal tab tuşuna basmak işimi görürmü yoksa kod olarak mı yazmam lazım?

Teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sTb
Üye
Mesajlar: 59
Kayıt: 06 Nis 2005 11:13
Konum: Eskişehir

Mesaj gönderen sTb »

Şöyle olabilir;aralara virgül koyup csv olarak kaydederseniz sütünlara ayrılmış olacaktır.
" Her bildiğin doğru olsun. Ama her doğruyu her yerde söylemek doğru değildir. "
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Excel'e Comobj olarak gönderebilirsin..

- Gönderdiktem sonra herhangi bir hesaplatma işlemi yapmıyorsan, veriyi Excel'e gönderirken başına ( ' ) tek tırnak koymalısın. Metin olarak kabul edilir. Hızlı sonuç alırsın.
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

CSV veya o şekilde yapmak işime yaramıyor.
Bu txt belge amerika gidiyor.(yani txt olarak istiyorlar Orda ne ile açıyorlar bilmiyorum).
As400 de falan bakıyorlar sanırım.
Bana verilen örnek formatı excel e drop ettiğimde otomatik sütunlar ayrılıyor.
:roll:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla