Satır satır text içine bilgi yazmak.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Satır satır text içine bilgi yazmak.

Mesaj gönderen vipaydin »

Merhaba.

B2006 ve MSSQL kullanıyorum.
Benim sorunum basit bir SELECT ifade sonucunu satır satır, görerek text içine yazmak.
Tablo içerisinde 1000 tane kayıt varsa, query çalışmaya başladığı zaman bu 1000 tane satırın text içinde görünmesini istiyorum. Sırayla değişerek query'i tamamlasın.

while döngüsünü kullanmak istedim ama query başladığı zaman text içine yazmadan sonuç bitiyor ve text içine son kayıtın bilgileri geliyor.

Ayrıca declare cursor ifadesi ile dönen query sonucunu satır satır işlemek istedim, bunda da sonuç aynı. Query çalışıyor, text içine bir bilgi yazmıyor (veya yazıyorsa ekranda görünmüyor) ve son kayıtın bilgileri geliyor.

Tşk.ederim kolay gelsin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
query yi normal griddegösterdiğiniz zaman 1000 satır geliyormu.
belki kayıtları çekerken bi sıkıntı vardır.
sql kodunuzu ve text e eklemek için kullandığınız kodları gönderirseniz bi bakalım. :wink:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

a.s

DBGrid'lerde sorun yok. Kayıtların hepsi geliyor. Query ise basit bir SELECT cümlesi. SELECT * from Table1 gibi.

Benim tek istediğim bu query sonucunun text içinde değişerek gözükmesi.
Table1 içinde dosya isimleri olduğunu düşünürsek Edit1 içinde sırayla bu dosya isimlerini görmek istiyorum.

Şöyle bir şey denedim ama olmadı.

Kod: Tümünü seç

AdoQuery1.sql.clear;
adoQuery1.close;
AdoQuery1.connection:=Form1.AdoConnection;

AdoQuery1.sql.add('SELECT * from Table1');
AdoQuery1.Open;

while AdoQuery1.Eof=False do
begin
Edit1.Clear;
Edit1.Text:=AdoQuery1.FieldsByName('Dosya_Ismi').AsString;
AdoQuery1.Next;
end;
Tşk.ederim..
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

burda en son kaydı görmeniz normal çünkü işlemler hızlı bir şekilde gerçekleştiği için siz sadece son kaydı göryrosunuz. arada bilgisayarı bekletecek işlemler yapmanız istediğiniz sonucu almanızı sağlayabilir.

Kod: Tümünü seç

applicaiton.procesmessages;
sleep(100);
vs,
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

döngü de her seferinde edit i temizliyor ve editin üstüne yazıyorsunuz doğal olarak en son da en son kaydı edit e ekliyor.

Kod: Tümünü seç

while AdoQuery1.Eof=False do 
begin 
Edit1.Text:= edit1.text + AdoQuery1.FieldsByName('Dosya_Ismi').AsString; 
AdoQuery1.Next; 
end; 
böylece tüm dosya isimleri eklenir edit içine ama amcı anlamdım. Edit de bukadar dosya ismi ne içindir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Tşk.ederim yanıtlarınız için.

Amacı, kullanıcıların işlem adımlarını görmelerini sağlamak. Öbür türlü yüklü bir query çalıştığı zaman kullanıcı programın kilitlendiğini zannediyor. Sonra task manager aracılığıyla görevi sonlandırma işlemine devam ediyorlar.

Bu şekilde olursa işlemin devam ettiği görülecektir.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
o zaman progres bar kullanmayı deneyin. :wink:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

aslangeri yazdı:s.a.
o zaman progres bar kullanmayı deneyin. :wink:
Veya alternatif olarak bir label e döngü içinde yüzde şeklinde sonucu gösterebilirsin .
aktarılan/ toplam kayıt :wink:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

Porocccesbar ve/veya label ile birlikte
döngü bloğu içine

Kod: Tümünü seç

Application.ProccessMessagesİ
yazarak programın kilitlenmesini (kilitlenmiş gibi görünmesini) engelleyebilirsin.
Kolay gelsin
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Tekrar merhaba.

Peki yukarıdaki işlemler herhangi bir SELECT ifadesi değilde, INSERT INTO ifadesi içinde geçerli mi?

Ben şöyle bir kod yazdım. Yapmak istediğim ise elimde bir tane tablo var, aynı özelliklere ve alanlara sahip ikinci bir tablo oluşturdum. Birinci tablodaki kayıtları ikinci tabloya birebir aktarılacak.

Kod: Tümünü seç

AdoQuery1.SQL.Add('SELECT * FROM öncekitable');
AdoQuery1.Open;

ProgressBar1.Min:=0;
ProgressBar1.Max:=AdoQuery1.RecordCount;

AdoQuery2.SQL.Add('INSERT INTO sonrakitable (alanlarım..)');
AdoQuery2.SQL.Add('SELECT alanlarim FROM öncekitable');
AdoQuery2.ExecSQL;

while AdoQuery1.Eof=false do
begin
ProgressBar1.Position:=ProgressBar1.Position+1;
Application.ProcessMessages;
Sleep(5);
AdoQuery1.Next;
end;

Burada da kayıtlar tek tek aktarılırken ProgressBar a hareket vermeyi düşünmüştüm.
Tabloda yaklaşık 100 sütun ve 17.000 adet satır kaydı var.

Tşk.ederim kolay gelsin




.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
gönderdiğin kodla yaparsan olmaz.
orda queryi exec etmeden öcne bir form oluşturup kullanıcıya lütfen bekleyiniz tarzında bir yazı verdikten sonra queryi exec etmen lazım. exec den sonra da kullanıcıya gösterdiğin formu kapatırsan kullanıcı işlemin bittiğini anlar.
çünkü exec dediğin zaman kayıtları aktarmadan alt satırlara geçmeyecektir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

a.s

Cevabın için teşekkür ederim sevgili aslangeri.

Peki bu noktada bana önerin ne olabilir? Daha öncede bahsettiğim gibi 100 sütun ve 17.000 satır kaydı var tabloda. En az 5 dakika bekleme yapacak. Bu 5 dakika kullanıcı tarafında uzun bir süre. Öyle bir şey yapmalıyım ki kullanıcı bu süre içerisinde herhangi bir işlem yapmadan beklesin.

Değerli önerilerin için ayrıca teşekkür ederim.

Saygılarımla....
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

vipaydin yazdı:a.s

Cevabın için teşekkür ederim sevgili aslangeri.

Peki bu noktada bana önerin ne olabilir?
......

Değerli önerilerin için ayrıca teşekkür ederim.

Saygılarımla....
asıl bu nazik tutumun için ben teşekkür ederim.
ancak bir önceki mesajımda önerimi belirtmiştim. tekrar edeyim.
öncelikle üzerinde bir animasyon olan form hazırla. (windows dosya kopyalarken çıkan pencere gibi).
sonra

Kod: Tümünü seç

AdoQuery2.SQL.Add('INSERT INTO sonrakitable (alanlarım..)');
AdoQuery2.SQL.Add('SELECT alanlarim FROM öncekitable');
try
//burada animasyon formunu show et //showmodal değil show.
//formun stylı da fsstayontop olsun.
AdoQuery2.ExecSQL; 
//burdada animasyon formunu kapat.
except
//eğer bir hata olursa animasyon formu üstte olduğu için hata mesajı görünmeyebilir.
//burdada animasyon formunu kapat.
//e on:exception.... gibisinden giderek hata mesajını yakala. ve kullanıcıya bildir.
end;
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla