Fatura Hareketlerinde Fatura ID'si

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen nodetail »

S.A.

Uzun zaman oldu buralara uğramayalı,
Form içinde çok aradım ama sanırım ben bulamadım yada doğru aramayı yapamadım.
Soruma gelecek olursak;
Bir fatura veya irsaliye programı düşünün, fatura üst bilgisini girdiniz fatura hareketi gireceksiniz ama fatura üst bilgisi henüz kayıt edilmediği için hareket satırlarını bağlayabileceğiniz bir fatura ID yok elinizde, farklı yollardan çözüm aradım ama çoğu stabil değil. Bunun en mantıklı yolu veya çözümü nedir.
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen nodetail »

Bu arada sql vt ve cxgrid kullanıyorum
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen greenegitim »

başlık ve hareket tablosunu bir memory datasete veya sqlite ' a tutup en son işlem tamamlandığında database yazabilirsiniz.
Mücadele güzelleştirir!
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen ertank »

Aleykümselam,

Alternatif yöntem olarak direk database ve tablo üzerinde çalışabilmek adına master ve detail tabloları GUID kolon üzerinden eşleştirebilirsiniz. Veri girmeye başlamadan üreteceğiniz bir GUID veriyi her iki tabloda da kullanabilirsiniz.
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen nodetail »

İlginiz için teşekkürler arkadaşlar

Memory dataset kullanmışta olsam sonuçta bir id bağlantım olmayacak buradaki mantığı anlayamadım, sqlite ile ilgili bir bilgim yok o yüzden onuda eledim şimdilik.

GuId çok mantıklı ve kullanışlı geldi daha önce hiç denemedim ama teoride çok sevdim kendisini, ancak daha önce hiçbir program veri tabanında gördüğümü anımsayamadım belkide benim gözümden kaçmıştır. Guid avantaj ve dezavantajları nelerdir bilmiyorum ilerde bana sorun çıkarır mı acaba kendileri.

Yinede daha başka alternatif yöntem ve bilgilerinizi bekliyorum. En profesyonelce olanı bulmaya çalışıyorum.
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen nodetail »

memory dataset kullandığımda; kaydedilmiş bir faturayı açtığımda normal detail tabloyu yeniden memory dataset'e mi aktarmam gerekiyor yeni girişler için
m_yaprakci

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen m_yaprakci »

Belgeyi kaydedip id'yi kullanin. Hic ugrasmayin bence. Ornegin yeni irsaliye diyip formu actiniz.
Table1.insert;
Table1belgetarihi.value:=now;
Table1.post;
İd alaninizin siralamasinin ne oldugunun farketmedigi durumlarda.
İdlerin siralamasinin bi onemi varsa isler degisir tabi.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen ertank »

nodetail yazdı: 09 Ağu 2018 11:23 ancak daha önce hiçbir program veri tabanında gördüğümü anımsayamadım
SQL Server için uniqueidentifier kolon veri türü GUID oluyor.
PostgreSQL için uuid kolon veri türü GUID oluyor.
Bunun dışında birçok yaygın kullanılan database sistemi GUID kolon veri türü desteği sunmaktadır.

Birçok yerde kullanılan bir veri türüdür. Özünde büyük bir rakamsal alan olduğu için string alanlara göre performansı çok olumsuz etkilemez.

Dezavantaj olarak söylenebilecek: Çok çok düşük olmasına rağmen iki GUID değeri aynı olabilir. Bu durumda "key violation" hatası alabilirsiniz. Aynı GUId değeri arızalı donanımı olan bilgisayarlarda daha yüksek ihtimaldir. Ethernet kartı MAC adresi de GUID üretilirken kullanılan bilgiler arasında. Eski yıllarda "no-name" olarak tabir edilebilen iki ethernet kartı aynı mac adresine sahip olabiliyordu. Diğer taraftan teoride bizim dünya hayatımız iki tane aynı GUID değerini üretecek kadar uzun değildir.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen freeman35 »

Bu id ye neden takılıyorsunuz bu kadar? db ye beforeinsert trigger ekleyin ve prkey= max(prkey) +1; (function yada select yazın) ardışıklığı garanti edin. Sonuçta ardışık bir değer.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen nodetail »

Üstad ben mi yanlış anladım tamam id'yi unutalım diyelim.
beforeinsert'te prkey bile oluşturacak olsak kayıt tuşuna basmadan bir değer dönmeyecek bu durumda master tabloda halen detail tabloyu bağlayacak bir değer yok.

GuId ile memory dataset arasında kaldım gerçekten memory dataset'in bu durumdaki mantığınıda şu noktada anlayamadım;

Yeni kayıt > master girişini yaptık detail girişini memory dataset'e yazdık kaydettik asıl detail tabloya yazdırdık.
Peki kayıt düzenleme yapacağımız zaman yani satır ekleme çıkarma güncelleme yapacağımız zaman yeniden memory dataset'e mi alacağız veriyi
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen ertank »

nodetail yazdı: 10 Ağu 2018 09:35 Peki kayıt düzenleme yapacağımız zaman yani satır ekleme çıkarma güncelleme yapacağımız zaman yeniden memory dataset'e mi alacağız veriyi
İsterseniz sürekli memory table üzerinde tutun veriyi ve her defasında database'den okuyup memorytable üzerine alın. İsterseniz sadece yeni kayıt girişinde bu yöntemi izleyin. Düzenleme, ekleme ve silme için direk database tablosu üzerinden çalışın.

Her ikiside yapılabilir yöntemler. Hangisi sizin için daha faydalı ve kullanışlı ona sizin karar vermeniz gerekli.
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen nodetail »

Dostun senden Allah razı olsun, aydınlattığın için kafamda birçok şey aşıldı.
Bu konu altında yazmamın umarım bir mahsuru yoktur ama aklıma gelmişken sorayım dedim.
dediğin gibi satır ekleme silme güncelleme için direk database tablosunu kullandığımı varsayalım.
Cxgrid üzerinde yeni satır eklemek için append kullanıyorum,
güncelleme için direk hücreler üzerinde oynuyorum. peki kayıt tuşuna basmadan kaydetmesini nasıl engellerim.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen ertank »

Birçok farklı şekilde yapılabilir. İlk aklıma gelen:
- cxGrid.Tag özelliğini 1 yapın.
- Buton tıklama kodunda önce Tag değerini 0 yapın. Ardından kaydedin. Kayıt sonrası hemen eski değeri 1 haline geri getirin.
- İlgili TDataSet.OnBeforePost() olayında cxGrid.Tag = 0 ise kayıt girişine izin verin. farklı bir değer görür iseniz "Lütfen veri girişi için kayıt butonunu kullanın" gibi bir mesaj gösterebilirsiniz.
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen nodetail »

CxGrid Satır satır ekleme ve güncelleme yaptığından bu olmuyor.
satır değiştirince post etmek istediğinden dataset'i kitliyor.
yeni edite izin vermiyor.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Fatura Hareketlerinde Fatura ID'si

Mesaj gönderen ertank »

nodetail yazdı: 10 Ağu 2018 11:50 CxGrid Satır satır ekleme ve güncelleme yaptığından bu olmuyor.
satır değiştirince post etmek istediğinden dataset'i kitliyor.
yeni edite izin vermiyor.
Siz orjinal sorunuzda "birden fazla satırda değişiklik yapılsın ancak kaydet butonu ile hepsi database'e yazılsın" benzeri açık bir ifade kullanmadığınız için ben tek bir kayıt ile ilgili olduğunu düşünerek buna göre öneri sundum.

Satır değiştirince edit modundan çıkıp veriyi kayıt etme özelliği DBGrid türevlerinin hepsinde vardır. cxGird bu davranışı sergileyen tek grid bileşeni değildir.

Gerçekleştirmek istediğiniz yöntemi;
- Kullandığınız database erişim bileşenlerinin var ise "CachedUpdate" özelliğini kullanarak,
- TClientDataSet bileşeni kullanarak (cached update desteği vardır)
- Memory table kullanarak elde etmeniz mümkün

Eğer var ise database bileşenlerinin CachedUpdate özelliğini tercih edebilirsiniz. Kullandığınız bileşenlerin bu özelliği yok ise son bildirdiğiniz ihtiyacınıza yönelik yeni kayıt ve değişiklik işlemlerinin tamamında memorytable kullanmanız daha pratik olacaktır.

Değişiklik yapmadan önce database tablosu üzerindeki verileri bir şekilde memory table içine yüklemeniz ardından da sadece üzerinde değişiklik olan kayıtları database tablosu üzerinde güncellemeniz gerekecektir. Ya da eğer silinip yeniden kaydedilmesi sorun olmayacak ise eski kayıtların tümünü silip yeni son hallerini kaydedebilirsiniz.
Cevapla