DBGrid'teki kayıtları farklı tablolarda işleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

DBGrid'teki kayıtları farklı tablolarda işleme

Mesaj gönderen husonet »

Arkadaşlar DBGrid'teki kayıtları farklı tablolarda işlemeyi nasıl yapabilirim olay kısaca şu Devir kayıtlarını DBGrid de yapıyorum ben bu yaptığım kayıtları hareketler tablosuna Devir tablosuna ve CariKart tablosunda işlem yapacağım ama nasıl bir yöntem izleyerek DBGrid'deki ve tablodaki kayıtları tarattırmalıyım. Düşüncelerinizi belirtirseniz sevinirim.

İyi Çalışmalar.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Eğer bu bir DBGrid ise zaten bir datasource'u var demektir o zaman dogrudan Dataseti üzerinden bir dongü içinde kayıtlar üzerinde gezerek yapmak istediğiniz yapabilirsiniz gibime geliyor tabi ihtiacı doğru anladıysam. Aslında en güzel çözüm eğer bir takım tablolardan bir seyler alınıp diğer bir takım tablolara birşeyler işleme işini bir stored procedure ile yapmaktır. Hem çok daha güvenli hem de çok daha yüksek perofrmans ile ve hatta bir çok durumda daha az kod ile yapmanız mümkün olabilmektedir.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Fahrettin abi bu işlemi İrsaliye kesimi olarak düşünebilirsin bir fiş işleniyor ve işlenen fiş için DBGrid nesnesi kullanılıyor fiş kesilirken fiş tablosuna DBGrid datasete bağlı olduğu için hiç bir uğraşı vermeden kayıt yapıyor ama bu DBGrid deki kayıtları Stok tablosundaki kayıtları buldurup stok kartlarını bulduktan sonra adetlerini yükseltmem veya düşürmem gerekiyor ben bu tip bir işlem olarak kullanacağım. Bunu direk tablodan yapsam İrsaliye numarasını ve stok kodunu taratmam gerekecek kayıtlar mükerrer olmasın diye ama DBGriddeki satırları taratırsam sadece Stok Kodu yeterli olabilecek çünkü fiş tablosunda birden fazla aynı koda sahip satır bulunabilir. Ben sizce DBGrid deki satırlarımı tarattırsam yoksa Fiş Tablosundaki irsaliye No su ile Stok kodunu Stok tablosundamı taratayım ve bu işlemi While döngüsü ilemi yapayım yoksa SQL mi kullanayım burada çelişkideyim.

Ayrıca ilgilendiğiniz için teşekkür ederim.

İyi Çalışmalar.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Oncelikle sunu sorayim veritabanı olarak ne kullanıyorsun? Eger interbase veya benzeri bir trigger destegi olan veritabanı kullanıyorsan bu problem trigger ve stored procedure kullanımı icin cok tipik bir ornek.
viewtopic.php?t=644 linkindeki makaelyi belki okumussundur zaten. Dikkatli incelersen tam olarak senin soyledigin isin ornegi var orada: Soyle ki URUN_SATIS demek zaten bir fatura veya irsaliyedeki detay tablodaki grid icindeki urunlerdir. bu tablonun trigger'ina gerekli kodlari yzarak sen o gride bir satir girdigin anda ilgili urun kartindaki stok miktarini ilgili adet kadar azaltmaktasın. Yada girilen bir satiri sildiginde de azalan miktar iade edilmektedir. Boylece zaten senin her satiri girerken silerken veya edit ederken stok miktarlari ile ilgili islemleri trigger ve stored procedure'ler arka planda yapmaktalar. Ve de bu islemleri sonradan bir defada taratarak yapmanin bir cok dezavantajinin hic biri trigger ile calismada yoktur. Cok daha az kod yazarsin. Hem de sorunsuz kod yazmıs olursun.... Hic bir surette hata yapmayacak bir kod. Kayıtların toplu taratılarak islem yapılmasında bir cok sorun olabilir mesela en olmadik yerde elektrik kesilmesi. Koddaki buglar... vs... Oysa triggerlarda bug olacak kadar kod bile yazmaya gerek kalmadan bu is cozulebilir. Eger makalede yapılanlari denemediysen soyle 1 saatini ayirarak bos bir interbase veritabanı üzerinde kodlari dene. tablo cerate kodlari dahil hepsi var zaten. Olayın sonuclarini gorunce bence alternbatif bir sey dusunmeye gerek kalmayacak.

Tabi eger paradoks kullanıyorsan butun bunlari geri aliyorum. Ve en azindan interbase'e gecmeyi hararetle tavsiye ediyorum....
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Makalenizi daha önceden okumuştum çok yararlı bir makale elinize sağlık.
Hocam malesef bu projeye ACCESS veritabanı ile başladım. O yüzden nasıl nerden bu olayı yapsam diyorum ve en kısa zamanda bu porejeyi bitirip interbase ile ilgileneceğim.

İlginiz İçin Teşekkür Ederim.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

O zaman delphi tarafinda kodla işi yapmaktan başka çare yok.. Belki kodlama mantıgını trigger ve stored procedure'larin calisma mantiginda yapabilirsiniz... Dataset tarafinda after post ve after delete'te biraz kod ile bunu yapabilirsiniz. Afterpost da eğer bir insert ise o miktari stoktan dusmek için bir query ile update calistirirsiniz. Eger bir edit işlemi ise before editte miktari alip afoter postta da aradaki farki yine ekleme ya da negatifse tabi cikarma olmus olacak yapabilirsiniz. After delete'de de yine miktar degerini before delete'te alarak o miktari stoga geri iade edebilirsiniz..

Bu sadece alternatif yöntemlerden birisi olabilir ama belki triggerlar ile çalışmaya hazirlik anlaminda faydali olur diye oneriyorum....
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Fahrettin abi teşekkür ederim bu akşam yazmaya başlayacağım.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Fahrettin abi dediğiniz şekilde olayları bitirmek üzereyim yalnız kafama bir konu takıldı Kaydetmeden çık butonuna tıkladığım zaman ben nasıl bir yöntem izlemeliyim.


İlgileriniz için teşekkür ederim.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Zaten gerekli işlemleri afterpost'ta yapacaginiz için kaydetmeden ciktiğinizda da o kod çalışmamış olacak. İlave bir şey yapmaya gerek kalmaz.
Kullanıcı avatarı
safak
Şafak EBESEK
Mesajlar: 165
Kayıt: 05 Ağu 2003 04:39
Konum: Istanbul
İletişim:

Mesaj gönderen safak »

Aşağıdaki yöntem, database den ve programlama dilinin olanaklarından bağımsız bir yaklaşım:

1.Hareketlerin bulunduğu tablodan ilgili fişin kayıtlarını çekip geçici bir tabloya aktarın. (2 kopya halinde biri A, diğeri B olsun)

2 A tablosunu gride alıp üzerinde çalışın

3. İşlem sonucunu onaylamazsanız geçici tabloları silin, menüye dönün.

4. B tablosundaki tüm nümerik alanları - yapın. A tablosuyla toplayın. Böylece nelerin ne kadar dğiştiğini anlarsınız. Bu tablo C tablosu olsun.

5.Hareketlerden ilgili fişin kayıtlarını silin. A tablosunu hareketler tablosuna ekleyin.

6. Toplamların tutulduğu tablodaki değerleri, Ctablosundakiler kadar değiştirin.

7. A,B,C tablolarını silin.

Not: Sistem çok kullanılıcılı çalışıyorsa, ilgili fişe girilmesine izin vermeyin.

Kolay Gelsin
Cevapla