DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Evet Şaban Bey, büyük küçük harf düzenlemesini yapınca sorun ortadan kalktı ancak şimdi de mantıksal bir hata var, kodu yazdığımız yer sağlıklı olmadı sanki, çünkü ilk tampona aktarılan ürün görünmüyor, ikinci aktarılan üründen sonra sadece 1.ürünü görüyor, 3.cü aktarılan üründen sonra 1+2 ürün toplamını alıyor ve bu şekilde devam ediyor. Ayrıca dbgrid üzerinde yaptığımız değişikliği de görmüyor, değişiklikten sonra tampona aktarılan ürün ile birlikte son aktarılan ürünü görmüyor değişiklik+öncekileri görüyor, sonuç olarak hep bir adım geriden geliyor. Kodu başka nereye yerleştirebiliriz acaba?
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
s.a.
kodu nereye koydunuz bilmiyorum ama tampon tablonun afterpost eventina koyarsanız tampon tablodaki değişiklikleri kaydettiğiniz zaman toplam güncellenecektir.
kodu nereye koydunuz bilmiyorum ama tampon tablonun afterpost eventina koyarsanız tampon tablodaki değişiklikleri kaydettiğiniz zaman toplam güncellenecektir.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Şaban abinin kodunu tampon tablosunun postundan sonrasına koyarsan sorunun düzelmesi gerekiyor.
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
A.slm; ŞabanAkman, aslangeri ve orhancc...
tampon afterpost u olayı çözmüyor, yine geriden geliyor, datasource'un onchange'i dahil denemediğim event kalmadı zaten...
dbgrid de örneğin miktar sütununda oynama yaptığımızda calcfield olan tutar sütununda değişikliğe yol açan event hangisidir? O evente yazmam lazım diye düşünüyorum.
tampon afterpost u olayı çözmüyor, yine geriden geliyor, datasource'un onchange'i dahil denemediğim event kalmadı zaten...
dbgrid de örneğin miktar sütununda oynama yaptığımızda calcfield olan tutar sütununda değişikliğe yol açan event hangisidir? O evente yazmam lazım diye düşünüyorum.
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Projenin kodlarını göstermen mümkün mü ?
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Kod: Tümünü seç
unit Unitsatis;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, DB, ADODB, Mask, DBCtrls;
type
TFormsatis = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
DBGridurun: TDBGrid;
DBGridtampon: TDBGrid;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ADODataSeturun: TADODataSet;
DataSourceurun: TDataSource;
ADODataSettampon: TADODataSet;
DataSourcetampon: TDataSource;
Button1: TButton;
Button2: TButton;
edGenelToplam: TEdit;
ADOConnectionurun: TADOConnection;
ADODataSeturunBarkod: TIntegerField;
ADODataSeturunMal: TWideStringField;
ADODataSeturunGrup: TWideStringField;
ADODataSeturunFirma: TWideStringField;
ADODataSeturunIskonto: TIntegerField;
ADODataSeturunKdv: TIntegerField;
ADODataSeturunFiyat: TBCDField;
ADODataSeturunMaliyet: TBCDField;
ADODataSeturunMiktar: TIntegerField;
ADOQueryGenel: TADOQuery;
ADODataSettamponBarkod: TIntegerField;
ADODataSettamponMal: TWideStringField;
ADODataSettamponFiyat: TBCDField;
ADODataSettamponMiktar: TIntegerField;
ADODataSettamponTutar: TBCDField;
ADODataSettamponGenelToplam: TBCDField;
ADODataSettamponKar: TBCDField;
ADODataSettamponKarToplam: TBCDField;
ADODataSettamponIskonto: TBCDField;
procedure ADODataSettamponCalcFields(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure DataSourcetamponDataChange(Sender: TObject; Field: TField);
procedure ADODataSettamponAfterPost(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Formsatis: TFormsatis;
implementation
uses Uniturun;
{$R *.dfm}
procedure TFormsatis.ADODataSettamponCalcFields(DataSet: TDataSet);
begin
adodatasettampontutar.Value:= (adodatasettamponmiktar.Value*adodatasettamponfiyat.Value)-
(adodatasettamponmiktar.Value*adodatasettamponfiyat.Value*
adodatasettamponiskonto.Value)/100;
AdoqueryGenel.Recordset:= ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon');
EdGenelToplam.Text:= AdoQueryGenel.Fields[0].AsString;
{adoquery1.SQL.Text:= 'select sum(adodatasettampontutar.value) as toplam from TabloTampon';
adoquery1.Open;
adodatasettampongeneltoplam.Value:= adoquery1.fieldbyname('toplam').Value;
adoquery1.Close;} //DENEME
end;
procedure TFormsatis.Button1Click(Sender: TObject);
begin
formsatis.Hide;
formurun.show;
end;
procedure TFormsatis.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
adodataseturun.Open;
adodataseturun.Filtered:= false;
if key=#13 then begin
if not adodataseturun.Locate('barkod',edit1.Text, []) then
begin
Showmessage ('Kayıt Bulunamadı');
end else
begin
adodataseturun.Open;
adodataseturun.Edit;
adodatasettampon.Edit;
adodataseturun.Locate('barkod',edit1.Text, []);
if adodataseturunbarkod.Text=adodatasettamponbarkod.Text then
begin
adodatasettampon.Edit;
adodatasettamponmiktar.Value:= adodatasettamponmiktar.Value+1;
adodatasettampon.First;
end else
begin
adodataseturun.Open;
adodatasettampon.Edit;
adodatasettampon.Locate('barkod',edit1.text, []);
if adodatasettamponbarkod.Text=adodataseturunbarkod.Text then
begin
adodatasettampon.Edit;
adodatasettamponmiktar.Value:= adodatasettamponmiktar.Value+1;
adodatasettampon.First;
end else
begin
adodataseturun.Open;
adodatasettampon.Insert;
adodatasettamponbarkod.Text:= adodataseturunbarkod.Text;
adodatasettamponmal.Text:= adodataseturunmal.Text;
adodatasettamponiskonto.Value:= adodataseturuniskonto.Value;
adodatasettamponfiyat.AsCurrency:= adodataseturunfiyat.AsCurrency;
adodatasettamponmiktar.Value:=1;
adodatasettamponkar.AsCurrency:= (adodataseturunfiyat.AsCurrency-adodataseturunmaliyet.AsCurrency);
adodatasettamponkartoplam.AsCurrency:= adodatasettamponmiktar.Value*adodatasettamponkar.AsCurrency;
{AdoqueryGenel.Recordset:= ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon');
EdGenelToplam.Text:= AdoQueryGenel.Fields[0].AsString;} //DENEME
end;
end;
end;
edit1.SetFocus;
edit1.Text:='';
end;
end;
procedure TFormsatis.Button2Click(Sender: TObject);
var
i:Integer;
begin
adodatasettampon.First;
for i:= 1 to adodatasettampon.RecordCount do
begin
adodatasettampon.Delete;
end;
edit1.SetFocus;
edGenelToplam.Text:='';
end;
procedure TFormsatis.DataSourcetamponDataChange(Sender: TObject;
Field: TField);
var
i:double;
begin
{AdoqueryGenel.Recordset:= ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon');
EdGenelToplam.Text:= AdoQueryGenel.Fields[0].AsString;} //DENEME
{i:=0;
adodatasettampon.First;
while not adodatasettampon.Eof do
begin
i:= i+strtofloat(dbgridtampon.columns[4].Field.value);
adodatasettampon.Next;
end;
edGenelToplam.Text:= (floattostr(i)); } //DENEME
end;
procedure TFormsatis.ADODataSettamponAfterPost(DataSet: TDataSet);
var
i:double;
begin
{AdoqueryGenel.Recordset:= ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon');
EdGenelToplam.Text:= AdoQueryGenel.Fields[0].AsString;} //DENEME
end;
end.
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
s.a.
Kod: Tümünü seç
Procedure Hesapla(id:integer)
Begin
AdoqueryGenel.Recordset:= ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon where id<>'+inttostr(id));
EdGenelToplam.Text:= AdoQueryGenel.Fields[0].AsString;
End;
Kod: Tümünü seç
procedure TFormsatis.ADODataSettamponAfterPost(DataSet: TDataSet);
begin
hesapla(-1)
end;
Kod: Tümünü seç
procedure TFormsatis.ADODataSettamponCalcFields(DataSet: TDataSet);
begin
adodatasettampontutar.Value:= (adodatasettamponmiktar.Value*adodatasettamponfiyat.Value)-
(adodatasettamponmiktar.Value*adodatasettamponfiyat.Value*
adodatasettamponiskonto.Value)/100;
hesapla(adodatasettamponid.value);
EdGenelToplam.Text:= strtofloatdef(edGenelToplam.TExt,0)+adodatasettampontutar.value;
end;
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Sn. aslangeri yazdığınız procedure de
Undeclared Identifier: 'AdoqueryGenel'
hatası alıyorum, sebebi ne olabilir acaba?
Undeclared Identifier: 'AdoqueryGenel'
hatası alıyorum, sebebi ne olabilir acaba?
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Sorularınızın bu kadar olmaması lazım. Hata mesajı ingilizce ve zerre kadar ingilizce bilmeseniz bile hiç sözlüğünüz yoksa Google sözlük ile mesajı çözebilirsiniz. Delphiye yeni başlayan birisinin de ilk karşılaştığı ve durumun nereden kaynaklandığını algılayacağı en temel hata mesajıdır bu.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
type da query ekli ADOQueryGenel: TADOQuery; olarak, daha önce kendim procedure hiç oluşturmadım ama 'procedure hesapla' olarak pro çalışınca kendisi type satırının altına ekler diye düşünüyorum...
saban hocam bu işlem için kafam artık davul gibi, sinir oldum açıkçası kaç gündür bir toplam almada takıldım ilerleyemedim, benim anladığım formda adoguerygenel'i göremiyorum diyor ama herşey de tamam gibi...
saban hocam bu işlem için kafam artık davul gibi, sinir oldum açıkçası kaç gündür bir toplam almada takıldım ilerleyemedim, benim anladığım formda adoguerygenel'i göremiyorum diyor ama herşey de tamam gibi...
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
FormAdi.ADOQueryGenel.... şeklinde hangi formdaysa ilgili formun adını da ekleyerek dene...
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
Tşk ler Şaban hocam;
Aslangeri hocam size de ayrıyeten tşk. ederim, kodlar çok güzel çalıştı ancak bir yerde mantıksal hata var gibi, şöyle bir toplam hatasına rastladım..
100 barkod no'lu ürünü okuttuk, dbgrid den istediğimiz değişikliği yaptık, geneltoplam sorunsuz...
Üzerine 101 barkod no'lu ürünü okuttuk, dbgrdi den istediğimiz değişikliği yaptık, geneltoplam sorunsuz...
Üzerine 102 barkod no'lu ürünü okuttuk, dbgrdi den istediğimiz değişikliği yaptık, geneltoplam sorunsuz...
...
...
Ama;
Tüm yukarıdaki işlemlerden sonra 100 barkod nolu ürüne geri dönüp dbgrid üzerinde tekrar değişiklik yapacağımız zaman miktar sütununa veya fiyat sütununa tıkladığımız anda 100 barkod nolu ürünün tutarı kadar (miktar*fiyat) geneltoplam a ekleme yapıyor (dikkat edin, sadece miktar ya da fiyatta değişiklik yapmaya çalıştık, enter a basarak calcfield ı harekete geçirmedik), enter a bastığımızda ise GenelToplam haliyle 100 barkod nolu ürünün tutarı kadar farklı çıkıyor.
Ayrıca;
Yukarıdaki kodu şöyle değiştirdim
Aşağıdaki diğer kodda ise ise
Önce adodatasettamponid isimli yeni bir dataset oluşturup bağlantıları, alan tanımlarını ve calcfield alanı ayarladım, sonra şu kod ile değiştirdim
Değişiklikler bunlar, bu değişikliklerin yukarıdaki hataya sebep olduğunu zannetmiyorum...
Acaba yukarıda bahsettiğim GenelToplam hatasını nasıl giderebiliriz??
Aslangeri hocam size de ayrıyeten tşk. ederim, kodlar çok güzel çalıştı ancak bir yerde mantıksal hata var gibi, şöyle bir toplam hatasına rastladım..
100 barkod no'lu ürünü okuttuk, dbgrid den istediğimiz değişikliği yaptık, geneltoplam sorunsuz...
Üzerine 101 barkod no'lu ürünü okuttuk, dbgrdi den istediğimiz değişikliği yaptık, geneltoplam sorunsuz...
Üzerine 102 barkod no'lu ürünü okuttuk, dbgrdi den istediğimiz değişikliği yaptık, geneltoplam sorunsuz...
...
...
Ama;
Tüm yukarıdaki işlemlerden sonra 100 barkod nolu ürüne geri dönüp dbgrid üzerinde tekrar değişiklik yapacağımız zaman miktar sütununa veya fiyat sütununa tıkladığımız anda 100 barkod nolu ürünün tutarı kadar (miktar*fiyat) geneltoplam a ekleme yapıyor (dikkat edin, sadece miktar ya da fiyatta değişiklik yapmaya çalıştık, enter a basarak calcfield ı harekete geçirmedik), enter a bastığımızda ise GenelToplam haliyle 100 barkod nolu ürünün tutarı kadar farklı çıkıyor.
Ayrıca;
Kod: Tümünü seç
Procedure Hesapla(id:integer)
Begin
AdoqueryGenel.Recordset:= ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon where id<>'+inttostr(id));
EdGenelToplam.Text:= AdoQueryGenel.Fields[0].AsString;
End;
Kod: Tümünü seç
procedure Hesapla(id:integer);
Begin
Formsatis.AdoqueryGenel.Recordset:= formsatis.ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon');
formsatis.EdGenelToplam.Text:= formsatis.AdoQueryGenel.Fields[0].AsString;
End;
Kod: Tümünü seç
procedure TFormsatis.ADODataSettamponCalcFields(DataSet: TDataSet);
begin
adodatasettampontutar.Value:= (adodatasettamponmiktar.Value*adodatasettamponfiyat.Value)-
(adodatasettamponmiktar.Value*adodatasettamponfiyat.Value*
adodatasettamponiskonto.Value)/100;
hesapla(adodatasettamponid.value);
EdGenelToplam.Text:= strtofloatdef(edGenelToplam.TExt,0)+adodatasettampontutar.value;
end;
Kod: Tümünü seç
procedure TFormsatis.ADODataSettamponCalcFields(DataSet: TDataSet);
begin
adodatasettampontutar.Value:= (adodatasettamponmiktar.Value*adodatasettamponfiyat.Value)-
(adodatasettamponmiktar.Value*adodatasettamponfiyat.Value*
adodatasettamponiskonto.Value)/100;
Hesapla(formsatis.ADODataSettamponid.Fieldbyname('Tutar').AsInteger);
edGenelToplam.Text:= strtofloatdef(edGenelToplam.Text,0)+adodatasettampon.Fields[4].Value;
Acaba yukarıda bahsettiğim GenelToplam hatasını nasıl giderebiliriz??
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
s.a.
hesapla metoduna calc fields da yanlış değer gönderiyorsunuz ondan oluyor.
tutar değerini gönderimişsiniz.
orada ilgili satırın ID alanını göndermeniz lazım. ki ilgili satırı query toplamına eklemesin. onu calc fieldda hesapladığımız toplamı ekliyoruz.
hesapla metodundaki where i de kaldırmışsınız. söylediğiniz hatayı vermesi normal.
tampon tablonuza eğer yoksa "id" adında autoincrement bir alan ekleyin. yukarda söylediklerimide düzeltin öyle deneyin.
kolay gelsin.
hesapla metoduna calc fields da yanlış değer gönderiyorsunuz ondan oluyor.
tutar değerini gönderimişsiniz.
orada ilgili satırın ID alanını göndermeniz lazım. ki ilgili satırı query toplamına eklemesin. onu calc fieldda hesapladığımız toplamı ekliyoruz.
hesapla metodundaki where i de kaldırmışsınız. söylediğiniz hatayı vermesi normal.
tampon tablonuza eğer yoksa "id" adında autoincrement bir alan ekleyin. yukarda söylediklerimide düzeltin öyle deneyin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: DBGrid Üzerinde CalcField Sütunun Toplamını Almak
A.Slm;
tablotampon da id adlı autoincrement oluşturup, güncellemeleri yaptım, kodları da düzelttim ama aynı sorun halen devam ediyor.
tablotampon da id adlı autoincrement oluşturup, güncellemeleri yaptım, kodları da düzelttim ama aynı sorun halen devam ediyor.
Kod: Tümünü seç
procedure Hesapla(id:integer);
Begin
Formsatis.AdoqueryGenel.Recordset:= formsatis.ADOConnectionurun.Execute('select sum((Miktar*Fiyat)-((Miktar*Fiyat*Iskonto)/100)) from tablotampon where id<>'+inttostr(id));
formsatis.EdGenelToplam.Text:= formsatis.AdoQueryGenel.Fields[0].AsString;
End;
procedure TFormsatis.ADODataSettamponCalcFields(DataSet: TDataSet);
begin
adodatasettampontutar.Value:= (adodatasettamponmiktar.Value*adodatasettamponfiyat.Value)-
(adodatasettamponmiktar.Value*adodatasettamponfiyat.Value*
adodatasettamponiskonto.Value)/100;
Hesapla(formsatis.ADODataSettamponid.Fieldbyname('id').AsInteger);
edGenelToplam.Text:= strtofloatdef(edGenelToplam.Text,0)+adodatasettampon.Fields[4].Value;
end;
procedure TFormsatis.ADODataSettamponAfterPost(DataSet: TDataSet);
begin
hesapla(-1);
end;