Delphi'de DataGrid Üzerinde Direkt Oynama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
A.Slm;
Hocam dbgrid'in oncolexit eventinde, form üzerindeki tüm butonları, dbgriddblclick ve timer ları görmemize rağmen dbgridcolumn ları göremiyorum...
Hocam dbgrid'in oncolexit eventinde, form üzerindeki tüm butonları, dbgriddblclick ve timer ları görmemize rağmen dbgridcolumn ları göremiyorum...
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Toplam Tutar
Fieldını Calculated yaparsan bunlara gerek kalmaz.
Fieldını Calculated yaparsan bunlara gerek kalmaz.
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Conari hocam, toplam için hesaplamayı miktar field'ının onchance eventinde halletmiştim, calculated field için tekrardan table hazırlamak zorunda kalacağım..
(

Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Table üzerinde MIKTAR OnChange olayında
ile gerekli hesaplamayı yaptırıyorum. Ancak şimdi DBGrid üzerinde MIKTAR ve FİYAT kolonlarında manuel oynama yapabileceğimizden, yukarıdaki kodu sadece barkodlu okumada ve MIKTAR sütununda değişiklik yapmadığımız zaman kullanabileceğiz. MIKTAR sütununda değişiklik yaptığımızda, örneğin miktarı 1 den manuel olarak 4 yaptık diyelim, ENTER tuşu ile FIYAT sütununa geçmem ve FIYAT sütununda eğer değişikliğim varsa değiştirip, değişiklik yoksa ENTER tuşu ile geçerek toplama ulaşmam lazım. FIYAT sütununun ENTER' ına da MIKTAR'ın OnChange'inde olduğu gibi bir kod yazıp, altta Toplam Tutarı gösteren pencereyi de göz önüne alarak bir kod yazmam lazım...
Tüm bunlar için;
1. MIKTAR'ın Onchange olayının kodunu sadece manuel değişiklik yapılmadığı zaman kullanmamız lazım.
2. MIKTAR da manuel değişiklik yaptığımız zaman ENTER ile FIYAT kolonuna geçmemiz lazım.
3.FIYAT da değişiklik yapsakda yapmasakda fiyat kolonunu ENTER ile geçerken bir kod yazarak TOPLAM a ulaşmamız lazım.
Tüm bunları nasıl yapmamız lazım?
Ayrıca;
aslangeri hocam, dbgrid'in oncolexit eventinde, form üzerindeki tüm butonları, dbgriddblclick ve timer ları görmemize rağmen dbgridcolumn ları göremiyorum. Bir ayar falan mı yapmam lazım acaba??
conari hocam, calculatedfield ile kolay halledebileceğimi yazmışsınız, o durumda MIKTAR'ın onchange olayını iptal etmem mi gerekir? Bir de calculated field 'ı forumdan nasıl yapıldığını araştırdım. İlgili table daki TOPLAM Field'ını calculated'a çevirmem mümkün müdür? Table üzerinde New Field olarak yeni calculated field tanımlamaya çalıştığımda 'Data Field not permitted on open Dataset' uyarısı almaktayım. Yukarıda saydığım maddeleri calculatedfield ile kolaylıkla halledebileceksem tabi ki onu tercih etmek isterim. Calculated field olarak TOPLAM'ı tanımladığımız zaman dbgrid column larında ne değişiklik yaparsak yapalım (ister manuel ister aynı barkodu tekrar tekrar okutarak) tüm bu işlemleri halledebilecek miyiz??
Kod: Tümünü seç
procedure Tform4.Table3MIKTARChange(Sender: TField);
begin
table3TOPLAM.AsCurrency:= table3MIKTAR.AsInteger*table3FIYAT.AsCurrency;
table3KAR.AsCurrency:= table3MIKTAR.AsInteger*table3KARBI.AsCurrency;
end;
Tüm bunlar için;
1. MIKTAR'ın Onchange olayının kodunu sadece manuel değişiklik yapılmadığı zaman kullanmamız lazım.
2. MIKTAR da manuel değişiklik yaptığımız zaman ENTER ile FIYAT kolonuna geçmemiz lazım.
3.FIYAT da değişiklik yapsakda yapmasakda fiyat kolonunu ENTER ile geçerken bir kod yazarak TOPLAM a ulaşmamız lazım.
Tüm bunları nasıl yapmamız lazım?
Ayrıca;
aslangeri hocam, dbgrid'in oncolexit eventinde, form üzerindeki tüm butonları, dbgriddblclick ve timer ları görmemize rağmen dbgridcolumn ları göremiyorum. Bir ayar falan mı yapmam lazım acaba??
conari hocam, calculatedfield ile kolay halledebileceğimi yazmışsınız, o durumda MIKTAR'ın onchange olayını iptal etmem mi gerekir? Bir de calculated field 'ı forumdan nasıl yapıldığını araştırdım. İlgili table daki TOPLAM Field'ını calculated'a çevirmem mümkün müdür? Table üzerinde New Field olarak yeni calculated field tanımlamaya çalıştığımda 'Data Field not permitted on open Dataset' uyarısı almaktayım. Yukarıda saydığım maddeleri calculatedfield ile kolaylıkla halledebileceksem tabi ki onu tercih etmek isterim. Calculated field olarak TOPLAM'ı tanımladığımız zaman dbgrid column larında ne değişiklik yaparsak yapalım (ister manuel ister aynı barkodu tekrar tekrar okutarak) tüm bu işlemleri halledebilecek miyiz??
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Kaldıracaksınız.
FieldKind özelliğinden değiştirebilirsiniz.
Sadece Tablonun onCalcFields eventine.
yazman yeterli.
FieldKind özelliğinden değiştirebilirsiniz.
Sadece Tablonun onCalcFields eventine.
Kod: Tümünü seç
table3TOPLAM.value:= table3MIKTAR.value*table3FIYAT.value;
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
conari hocam;
MIKTAR'ın Onchange event'ini TOPLAM'ı calcultedfield yaptıktan sonra TABLE'ın OncalsField'ına yazdım ve MIKTAR onchange'i iptal ettim. Bu şekilde program çalışıyor fakat bu seferde 'stack everflow' hatası veriyor.
stackoverflow da kısır döngüye soktuğum söyleniyor. Ne yapmalıyım?
MIKTAR'ın Onchange event'ini TOPLAM'ı calcultedfield yaptıktan sonra TABLE'ın OncalsField'ına yazdım ve MIKTAR onchange'i iptal ettim. Bu şekilde program çalışıyor fakat bu seferde 'stack everflow' hatası veriyor.

Re: Delphi'de DataGrid Üzerinde Direkt Oynama
breakpoint koyup debug et. oncalcFields eventine oradan mı geliyor. Bu şekilde bir şey söylenemez.
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Hocam olay şu;conari yazdı:breakpoint koyup debug et. oncalcFields eventine oradan mı geliyor. Bu şekilde bir şey söylenemez.
Tablonun onCalcFields eventine sadece
Kod: Tümünü seç
table3TOPLAM.value:= table3MIKTAR.value*table3FIYAT.value;
Ancak;
Bir de ben MIKTAR onchange olayında bir de KAR hesaplattırıp onu da ayrı bir yerde tutup raporlama yapıyordum o da üstteki kodun altında
Kod: Tümünü seç
table3KAR.AsCurrency:= table3MIKTAR.AsInteger*table3KARBI.AsCurrency;
Tüm bunlar tabi ki tampon table üzerinde SATIŞ EKRANINDA görüntülenmekte ve KAYDET butonu ile de ilgili veriler ilgili yerlere gönderilmekte ama mesela KAR Field'ı satıcıya özel bir husus olduğu için SATIŞ PENCERESİ'nde unvisible olarak yer almakta...
Şimdi hocam, calculatedfield ile TOPLAM satırını hallettik ama alttaki TOPLAM TUTAR kısmına da bunu aksettirmemiz lazım, birkaç satır satış olduğunda da bunu döngü ile çevirip TOPLAM ları toplayıp sonucu TOPLAM TUTAR'da gösterebilmeliyiz ve üstte de belirttiğim gibi KAR kısmını da halletmemiz lazım...
Çok başınızı ağrıtıyorum kusura bakmayın..
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
şöle bir döngü ile toplattır.
Kod: Tümünü seç
var toplam....
begin
toplam:=0;
Adotable.first;
while not(Adotable.Eof) do
begin
toplam := toplam + table3TOPLAM.value;
Adotable.Next;
end;
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Hocam S.A.
Yukarıda verdiğiniz yöntemi uyguladım, table3calcfields da. Ancak programı stack overflow' a soktum, hatayı da anlayabilmiş değilim.
Yukarıdaki kodda table7 de satışlar toplamını TTUTAR olarak tutmaktayım. Ayrıca table7 için KAR olarak bir field'ım daha var ancak TOPLAM calcField'ı sadece table3TOPLAM işlemini kabul etti, table3KAR işlemini altına eklediğimde tekrar stackflow hatası alıyorum. İşler iyice karıştı, çok basitçe halledebileceğimi düşündüğüm bir olay içinden çıkılmaz bir hal aldı diyebilirim.
(
Yukarıda verdiğiniz yöntemi uyguladım, table3calcfields da. Ancak programı stack overflow' a soktum, hatayı da anlayabilmiş değilim.
Kod: Tümünü seç
procedure Tform4.Table3CalcFields(DataSet: TDataSet);
var
i: Integer;
top:Double;
begin
table3TOPLAM.AsCurrency:= table3MIKTAR.AsInteger*table3FIYAT.AsCurrency;
table3.First;
top:=0;
while not table3.Eof do
begin
top:= top+table3TOPLAM.Value;
table3.Next;
end;
table7TTUTAR.AsCurrency:=top;
end;
end.

Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Durumu genel olarak özetlemeye çalışarak toparlayayım...:

Uploaded with ImageShack.us
Table1 Stokları tuttuğum dosya.
Table3 Satış Penceresinde tampon dosya
Table7 Toplam Tutar ve Toplam Kar'ı tuttuğumuz, alttaki TOPLAM penceresinde TOPLAMSATIS'ı gösterdiğimiz yer.
edit1.onkeypress event'inde (BARKOD Penceresi) table1 den table3'e aktarımları, kısaca söylemek gerekirse SATIŞ işlemini gerçekleştiriyoruz. Bu event de aynı ürün tekrar okutturulursa vs. her türlü işlemi yaptırıyoruz.
Problem : Satış ekranı üzerindeki dbgrid in MIKTAR ve FIYAT column larında manuel oynama yapabilmek istiyoruz.
Bunun için;
Daha önce table3MIKTAR.onchange event inde bulunan
kodu kaldırılarak, kodun yerine table3TOPLAM Field ı Calcfield haline dönüştürülüp, table3 OnCalcField event ine
kodu yazıldı ama stackflow hatası alındı, bunun üzerine yalnızca
kodu yazılarak stackflow dan kaçıldı ancak Problem1 burada oluştu ve KAR denetimi kontrol dışı kaldı...***PROBLEM 1***
Üstteki kod yazıldıktan sonra alttaki TOPLAM SATIŞ kısmını düzenlemek için table3TOPLAM Field ının OnCalcFields ına ekleme yapıldı:
Bu şekilde çalıştırılan programda yine stackoverflow hatası alındı...***PROBLEM 2***
Durum bundan ibaret, bir el atalım arkadaşlar...

Uploaded with ImageShack.us
Table1 Stokları tuttuğum dosya.
Table3 Satış Penceresinde tampon dosya
Table7 Toplam Tutar ve Toplam Kar'ı tuttuğumuz, alttaki TOPLAM penceresinde TOPLAMSATIS'ı gösterdiğimiz yer.
edit1.onkeypress event'inde (BARKOD Penceresi) table1 den table3'e aktarımları, kısaca söylemek gerekirse SATIŞ işlemini gerçekleştiriyoruz. Bu event de aynı ürün tekrar okutturulursa vs. her türlü işlemi yaptırıyoruz.
Problem : Satış ekranı üzerindeki dbgrid in MIKTAR ve FIYAT column larında manuel oynama yapabilmek istiyoruz.
Bunun için;
Daha önce table3MIKTAR.onchange event inde bulunan
Kod: Tümünü seç
table3TOPLAM.Ascurrency := table3MIKTAR.Asinteger*table3FIYAT.Ascurrency;
table3KAR.Ascurrency := table3MIKTAR.Asinteger*table3KARBI.Ascurrency;
Kod: Tümünü seç
table3TOPLAM.Ascurrency := table3MIKTAR.Asinteger*table3FIYAT.Ascurrency;
table3KAR.Ascurrency := table3MIKTAR.Asinteger*table3KARBI.Ascurrency;
Kod: Tümünü seç
table3TOPLAM.Ascurrency := table3MIKTAR.Asinteger*table3FIYAT.Ascurrency;
kodu yazılarak stackflow dan kaçıldı ancak Problem1 burada oluştu ve KAR denetimi kontrol dışı kaldı...***PROBLEM 1***
Üstteki kod yazıldıktan sonra alttaki TOPLAM SATIŞ kısmını düzenlemek için table3TOPLAM Field ının OnCalcFields ına ekleme yapıldı:
Kod: Tümünü seç
procedure Tform4.Table3CalcFields(DataSet: TDataSet);
var
i: Integer;
top:Double;
begin
table3TOPLAM.AsCurrency:= table3MIKTAR.AsInteger*table3FIYAT.AsCurrency;
table3.First;
top:=0;
while not table3.Eof do
begin
top:= top+table3TOPLAM.Value;
table3.Next;
end;
table7TTUTAR.AsCurrency:=top;
end;
end.
Durum bundan ibaret, bir el atalım arkadaşlar...
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Adotable1 oncalc da döngüye sokma.
denemedim ama calcfieldın changene yazmayı dene.
Başta da disablecontrol sonda enable kontrol yaparsan iyi olur.
denemedim ama calcfieldın changene yazmayı dene.
Başta da disablecontrol sonda enable kontrol yaparsan iyi olur.
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
CalcField'ın Onchange olayınaconari yazdı:Adotable1 oncalc da döngüye sokma.
denemedim ama calcfieldın changene yazmayı dene.
Başta da disablecontrol sonda enable kontrol yaparsan iyi olur.
Kod: Tümünü seç
procedure Tform4.Table3TOPLAMChange(Sender: TField);
var
i:Integer;
top:double;
begin
top:= 0;
for i:= 1 to table3.RecordCount do
begin
table3.Edit;
top:= top+table3TOPLAM.AsCurrency;
table3.Next;
end;
table7TTUTAR.AsCurrency:= top;
end;
Bir de şu var ; Calculated Field olan TOPLAM ın onchange'ine bu kodu yazdığımız zaman dbgrid ile hiç oynamadan yapacağımız satışlarda sıkıntı olmaz mı? Çünkü TOPLAM alanı boşken yapılan satışta veya dolu iken yapılan diğer satışlarda da bu kod devreye girecek??
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
while not table3.Eof do Şeklinde vermiştim kodu.
Başındada active kontrol yaparsınız.
birde tablo3 edit modda olmayacak.
table7 edit modda olmalı.
Ayrıca satışda, DBgridin boş olması gibi bir durum nasıl oluyor ki...
Başındada active kontrol yaparsınız.
birde tablo3 edit modda olmayacak.
table7 edit modda olmalı.
Ayrıca satışda, DBgridin boş olması gibi bir durum nasıl oluyor ki...
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Hocam table3 edit modda olmayacak diyorsunuz, ben de aynı fikirdeyim amaconari yazdı:while not table3.Eof do Şeklinde vermiştim kodu.
Başındada active kontrol yaparsınız.
birde tablo3 edit modda olmayacak.
table7 edit modda olmalı.
Ayrıca satışda, DBgridin boş olması gibi bir durum nasıl oluyor ki...
"table3:Dataset not in edit or insert mode " hatası alıyorum, bunun üzerine kodda bir yerlerde table3 için edit mode koymaya çalışıyorum, nereye koyarsam koyayım yine aynı hatayı alıyorum, sıyırmaya az kaldı anlayacağınız..
Active control nasıl yapılıyor hocami onu bilmiyorum..