Arka planda kitlenmeden çalışacak uygulama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- pasa_yasar
- Üye
- Mesajlar: 570
- Kayıt: 07 Haz 2004 12:35
Re: Arka planda kitlenmeden çalışacak uygulama
o zaman ağırlaşmaz mı çok fazla kod kullanmış olmaz mıyım acaba. Her işlemde ekrana bilgi vermek için durdurmak çok 3 - 4 kat geç işlemi bitirir gibi geliyor bana. deneyiyem yine de
Re: Arka planda kitlenmeden çalışacak uygulama
pek ihtimal vermiyorum açıkçası tabi bilgisayarın performansıda önemli bu işlemde
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Re: Arka planda kitlenmeden çalışacak uygulama
Size thread önerecektim ama yazdığınız kodu görünce bu önerimden tamamen vazgeçtim. Önce onları düzeltmeli ve belirli bir disipline alışmalısınız ondan sonra sorunlarınız zaten otomatikman azalacaktır.
Nedir kodunuzda gözlemlediğim sorunlar, onları da paylaşayım:
Kolay gelsin.
Nedir kodunuzda gözlemlediğim sorunlar, onları da paylaşayım:
- 1- İsimlendirme kurallarına uymuyorsunuz. Örneğin; AdoQuery1, UniQuery2, UniQuery8, UniQuery700 gibi. Bu tarz isimlendirilen nesneler ile çalışırken, çok kısa bir zaman içinde yolunuzu kaybeder, bir çok hata yapmaya elverişli ortamı hazırlarsınız.
2- Veritabanınızdaki herhangi bir tabloya kayıt ekleyebilmek adına çok ilginç bir yol seçmişsiniz kendinize. Örneğin;yazmışsınız. Ardından da Append ile bu tabloya kayıt ekliyorsunuz. Madem ilgili tabloya kayıt ekleme amacındasınız, neden tablonun tüm kayıtlarını çekiyorsunuz ? En azından şöyle yapabilirdiniz;Kod: Tümünü seç
UniQuery700.sql.add('select * from proautoid');
Gerçi bunu da asla tavsiye etmem. Rica ederim, hangi veritabanını kullanıyorsanız o veritabanı içinde Stored Procedure nasıl yazılırı araştırın.Kod: Tümünü seç
UniQuery700.sql.add('select * from proautoid where 1 = 2');
3-Tabloyu açtıktan sonra Append metodunu çağırıp hemen ardından Post etmenizin mantığını anlamadım.!Kod: Tümünü seç
UniQuery700.close; UniQuery700.sql.clear; UniQuery700.sql.add('select * from proautoid'); UniQuery700.open; UniQuery700.Append; UniQuery700.Post;
4-Hiç şık bir çözüm değil.Kod: Tümünü seç
Trim(cxComboBox1.Text)<>'Seçim Yok'
5-cxComboBox1 nesnenize kullanıcı yazma imkanına sahip ise; çok büyük ihtimalle hatalara açık bir kod. Aynı zamanda şık da değil. Onun yerine belki de;Kod: Tümünü seç
AdoQuery1.FieldByName(cxComboBox1.Text).AsString
gibi bir kod kullanabilirsiniz.Kod: Tümünü seç
var Field : TField; begin ... ... Field := AdoQuery1.FindField(cxComboBox1.Text); if Field <> nil then begin ... end; .. .. end;
6-Bir field'ın değerinin bu şekilde kullanılması pek çok hataya açık bir duruma sokabilir sizi. Veritabanındaki ilgili kaydın, Ürün yerine Urün olarak değiştirilmesi dahi kodunuzu çalışmaz kılabilir. Bunun yerine eğer bu alan bir yada birden fazla sabit değer içerek ise, ilgili alanı string olarak değil belki de sayısal olarak tanımlamalı ve tabloya da bir check constraint yazmalısınız. Bu sayede daha güvenli kodlarınız olur.Kod: Tümünü seç
AdoQuery1.FieldByName(cxComboBox15.Text).AsString)='Ürün'
7- Code indent'e dikkat etmiyorsunuz.
8-Yukarıdaki kodunuzda yanlış anlamadı isem; birim tablosundaki en son kullanılan birim kodunu almaya çalışıyorsunuz. Bu durumda, neden SELECT TOP 1 ... FROM Birim ORDER BY BirimCode DESC gibi bir SQL yazmıyorsunuz onu da anlamadım. Tüm birim kayıtlarını getirmenin bir anlamı yok ki.Kod: Tümünü seç
UniQuery7.close; UniQuery7.sql.clear; UniQuery7.sql.add('select birimcode from birim'); UniQuery7.sql.add('where birimcode<>'''''); UniQuery7.sql.add('order by birimcode ASC'); UniQuery7.open; UniQuery7.last; UniQuery6.Append; if UniQuery7.recordcount=0 then begin UniQuery6.FieldByName('birimcode').AsString:='000001'; end else begin UniQuery6.FieldByName('birimcode').AsString:=numarator(UniQuery7.fieldbyname('birimcode').asstring); end;
9- Hepsi bir yana ilk söylemem gerekeni şimdi söyleyeyim. Asla Delphi içinde SQL sorguları yazmayın. Tecrübelerime ve bildiklerime istinaden söylüyorum. Bunun aksinin mantıklı olduğunu iddia eden birileri olursa eğer, http://delphiforumu.com/questions/297/d ... page=1#338 linkinde paylaştıklarımı okuduktan sonra, buradan tartışmaya devam edebiliriz.
Kolay gelsin.
- pasa_yasar
- Üye
- Mesajlar: 570
- Kayıt: 07 Haz 2004 12:35
Re: Arka planda kitlenmeden çalışacak uygulama


Kod: Tümünü seç
UniQuery700.sql.add('select * from proautoid');
4-5-6. Bu alan stoklardaki alanları eşleştiriyor. Excelden çektiği başlığıa göre eşleştirme yapıyor. Exceldeki başlık farklı olabilir. A sütunu Stok kodu gibi
7. Code indente artık dikkat etmeye başladım. Düzeltiyorum.
8. evet birim tablosundaki son kodu alıyorum. Onu hemen düzeltiyorum.
- pasa_yasar
- Üye
- Mesajlar: 570
- Kayıt: 07 Haz 2004 12:35
Re: Arka planda kitlenmeden çalışacak uygulama
Delphi ustalarından bir süre eğitim almak lazım. Çok eksiğim var. Gün gibi ortaya çıkyor. Forumdaki ustalar ortaklaşa bir kitap veya pdf hazırlasalar çok iyi olur.