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
s.a.
ekranda tarihi saati gösteren bir yer var.
bak bakalım oralar sürekli değişiyormu?
ekranda tarihi saati gösteren bir yer var.
bak bakalım oralar sürekli değişiyormu?
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: Delphi'de DataGrid Üzerinde Direkt Oynama
Hocam, timer detay, asıl olayı bir çözebilirsek güzel olacak...

DBGrid de oynama yaptık, sonuç aşağıda...

DBGrid de oynama yapmadan evvel BARKOD Edit'inin OnKeyPress eventinde işimi şu şekilde hallediyordum...
Daha sonra table3calcfield'ını oluşturduk
Ve bu durumda doğal olarak en alttaki TOPLAM kısmını kontrol edemiyorum. Çünkü table3calcfield durumuna geçtiğimizde table7 yi kontrol edemedim. Bunu nasıl çözeriz??

DBGrid de oynama yaptık, sonuç aşağıda...

DBGrid de oynama yapmadan evvel BARKOD Edit'inin OnKeyPress eventinde işimi şu şekilde hallediyordum...
Kod: Tümünü seç
procedure Tform4.Edit1KeyPress(Sender: TObject; var Key: Char);
var
i :integer;
top,kart:double;
begin
table1.Open;
table1.Filtered:= false;
table7.Edit;
table7MIKTAR.AsString:= edit3.Text;
if key = #13 then begin
if not table1.FindKey([edit1.text]) then
begin
ShowMessage ('Kayıt Bulunamadı');
end
else
begin
table1.Open;
table1.Edit;
table3.edit;
table1.FindKey([edit1.text]);
if table1BARKOD.Text = table3BARKOD.Text then
begin
table3.Edit;
table3MIKTAR.Value := table3MIKTAR.Value+table7MIKTAR.Value;
table3.First;
edit3.Text:='1';
top:=0;
kart:=0;
for i:= 1 to table3.RecordCount do
begin
top:= top+ table3TOPLAM.AsCurrency;
kart:= kart+ table3KAR.AsCurrency;
table3.Next;
table1.Close;
end;
table7TTUTAR.AsCurrency:= top;
table7TKAR.AsCurrency:= kart;
end
else
begin
table1.Open;
table3.Edit;
table3.FindKey([edit1.text]);
if table3BARKOD.Text = table1BARKOD.Text then
begin
table3.edit;
table3MIKTAR.Value := table3MIKTAR.Value+table7MIKTAR.Value;
table3.First;//Table3 Tampon Table olarak kullanıldı, bu bakımdan POST komutu yok.
Edit3.Text:='1';
top:=0;
kart:= 0;
for i:= 1 to table3.RecordCount do
begin
top:= top+ table3TOPLAM.AsCurrency;
kart:= kart+ table3KAR.AsCurrency;
table3.Next;
table1.Close;
end;
table7TTUTAR.AsCurrency:= top;//Satış Ekranı sağ alttaki TOPLAM kısmını table7TTUTAR da kontrol ediyorum.
table7TKAR.AsCurrency:= kart;//table7TKAR'ı burada kaydedip başka yerde (Kasa Defterinde) kontrol ediyorum.
end
else
begin
table1.Open;
table3.Insert;
table3BARKOD.Text := table1BARKOD.Text;
table3MAL.Text := table1MAL.Text;
table3FIYAT.AsCurrency := table1FIYAT.AsCurrency;
table3MIKTAR.Value := table7MIKTAR.Value;
table3TOPLAM.AsCurrency := table3MIKTAR.Value*table3FIYAT.AsCurrency;//Bu satırı TOPLAM Field'ını oluşturunca kaldırdık.
table3KARBI.AsCurrency:= (table1FIYAT.AsCurrency-table1MALIYET.AsCurrency);
table3KAR.AsCurrency:= table3MIKTAR.Value*table3KARBI.AsCurrency;
Edit3.Text:= '1';
table3.first;
top:= 0;
kart:= 0;
for i:= 1 to table3.RecordCount do
begin
top:= top+ table3TOPLAM.AsCurrency;
kart:= kart+ table3KAR.AsCurrency;
table3.Next;
table1.Close;
end;
table7TTUTAR.AsCurrency:= top;
table7TKAR.AsCurrency:= kart;
end;
end;
end;
Edit1.SetFocus;
Edit1.Text :='';
end;
end;
Kod: Tümünü seç
procedure Tform4.Table3CalcFields(DataSet: TDataSet);
begin
table3TOPLAM.Value:= table3MIKTAR.Value*table3FIYAT.Value;
end;
Ve bu durumda doğal olarak en alttaki TOPLAM kısmını kontrol edemiyorum. Çünkü table3calcfield durumuna geçtiğimizde table7 yi kontrol edemedim. Bunu nasıl çözeriz??
En son canset tarafından 25 Şub 2011 10:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Form a bir tane query koy.
connection kısmına Tablelara koyduğun connectionı göster, sonra.
connection kısmına Tablelara koyduğun connectionı göster, sonra.
Kod: Tümünü seç
procedure Tform4.Table3CalcFields(DataSet: TDataSet);
var
begin
table3TOPLAM.AsCurrency:= table3MIKTAR.AsInteger*table3FIYAT.AsCurrency;
AdoQuery1.SQL.text:='select sum(miktar*fiyat) as toplam from table3 where faturano=islemno';//Burada sende fatura no yok nasıl maskeleyeceksin bilemiyorum...table3 te işlem yapıp boşaltıyormusun kayıtta bilemiyorum.Birdaha gözden geçir. :idea: :?:
AdoQuery1.open;
table7TTUTAR.AsCurrency:=AdoQuery1.fielbyname('Toplam').value;
AdoQuery1.close;
end;
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Conari hocam, forma Query mi koyacağım yoksa AdoQuery mi?
Eğer AdoQuery ise ConnectingString adlı bir sayfa açılıyor. Oradan use connection string tıklıyorum; media catalog, microsotf jet, microsoft ole, msdatashape vs. vs. çıkıyor, orada takıldım.
Bir de kod içerisinde de belirttiğin gibi, table3 de kayıt yaptırmıyorum, onu tampon table olarak kullanıyorum, bu bakımdan where kısmını kullanmazsak olmuyor mu??
Eğer AdoQuery ise ConnectingString adlı bir sayfa açılıyor. Oradan use connection string tıklıyorum; media catalog, microsotf jet, microsoft ole, msdatashape vs. vs. çıkıyor, orada takıldım.
Bir de kod içerisinde de belirttiğin gibi, table3 de kayıt yaptırmıyorum, onu tampon table olarak kullanıyorum, bu bakımdan where kısmını kullanmazsak olmuyor mu??
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Query=AdoQuery
ConnectingString leri kullandı isen o şekilde kullan, Ben ADoConnection compenentini kullandığını düşünmüştüm.
ConnectingString parametresini ADotable ları nasıl yaptı isen o şekilde yap.
Tampon ise where kısmınıda kaldır tabi.
ConnectingString leri kullandı isen o şekilde kullan, Ben ADoConnection compenentini kullandığını düşünmüştüm.
ConnectingString parametresini ADotable ları nasıl yaptı isen o şekilde yap.
Tampon ise where kısmınıda kaldır tabi.
Kod: Tümünü seç
AdoQuery1.SQL.text:='select sum(miktar*fiyat) as toplam from table3';
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Fields altında da olabilir Delphi açık değil bakamıyorum. Şunları dene.
Kod: Tümünü seç
AdoQuery1.fields[0].value
AdoQuery1.fieldvalues['TOPLAM']
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Calcfields'a Query i Fields parametresi ile dediğiniz şekilde yerleştirdim. Programı çalıştırdığımda tampon table için (table3) table does not exit uyarısı aldım. Tampon table da TOPLAM alanı calculated field idi, onu data field haline getirdiğimde program çalışıyor ama toplamalar yok tabi ki.
Yani query ile calculated field çakıştı gibi bir hal oldu, birinden birini kaldırırsam program çalışıyor ama istediğimiz işlemi yaptıramıyoruz halen.
Yani query ile calculated field çakıştı gibi bir hal oldu, birinden birini kaldırırsam program çalışıyor ama istediğimiz işlemi yaptıramıyoruz halen.
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Queryi DIPTOPLAM Olarak değiştir.
;
Query1.fieldvalues['DIPTOPLAM'];
Kod: Tümünü seç
Query1.SQL.text:='select sum(miktar*fiyat) as DIPTOPLAM from table3'
Query1.fieldvalues['DIPTOPLAM'];
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
S.Aleyküm;
Bu sitede yazan üstadlar için aslında çok basit olduğuna inandığım sorunumun çözümünde, problemi tam olarak yansıtamadığım kanaati ile tekrardan resim yolluyorum. Yukarıdaki mesajlarımda kullandığım kodları da detaylı olarak paylaşmıştım. Sorunun çözümüne katkıda bulunacak tüm hocalarımdan Allah şimdiden razı olsun.
Saygılarımla..

Ama dbgrid columnlarında oynama yaptığımda alttaki TOPLAM kısmında kontrolü kaybediyorum.

Bu sitede yazan üstadlar için aslında çok basit olduğuna inandığım sorunumun çözümünde, problemi tam olarak yansıtamadığım kanaati ile tekrardan resim yolluyorum. Yukarıdaki mesajlarımda kullandığım kodları da detaylı olarak paylaşmıştım. Sorunun çözümüne katkıda bulunacak tüm hocalarımdan Allah şimdiden razı olsun.
Saygılarımla..

Ama dbgrid columnlarında oynama yaptığımda alttaki TOPLAM kısmında kontrolü kaybediyorum.

Re: Delphi'de DataGrid Üzerinde Direkt Oynama
A.S.
Projenin bir kısmını paylaş istersen burada yapalım. işlem bir sorgu çekip dönen sonucu yazdırmaktan ibaret.
Projenin bir kısmını paylaş istersen burada yapalım. işlem bir sorgu çekip dönen sonucu yazdırmaktan ibaret.
Bir kelimenin anlamını öğretsen bile yeter..



Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Conari hocam, 5.sayfanın 2. mesajında kodu yollamıştım ama gözünüzden kaçtı herhalde, tekrar yolluyorum.
DBGrid de oynama yapamazken, edit1 in onkeypress olayında işimi bu şekilde görmekteydim.
table3 tampon table olarak kullanıldı, o yüzden post komutu yok, post komutuna takılmayınız...
table1 den barkod ile ürünü çekip, table3 de gösterip, table7 de de kayıt yapıyoruz, olay bu..
Daha sonra table3'ün CalcField'ını oluşturduk..
Bu koda birşeyler ilave etmeliyiz diye düşünüyorum ama dbgrid ile oynama yapmadığımız zamanlardaki pozisyona da eklediğimiz kod uyum sağlasın.
DBGrid de oynama yapamazken, edit1 in onkeypress olayında işimi bu şekilde görmekteydim.
table3 tampon table olarak kullanıldı, o yüzden post komutu yok, post komutuna takılmayınız...
table1 den barkod ile ürünü çekip, table3 de gösterip, table7 de de kayıt yapıyoruz, olay bu..
Kod: Tümünü seç
procedure Tform4.Edit1KeyPress(Sender: TObject; var Key: Char);
var
i :integer;
top,kart:double;
begin
table1.Open;
table1.Filtered:= false;
table7.Edit;
table7MIKTAR.AsString:= edit3.Text;
if key = #13 then begin
if not table1.FindKey([edit1.text]) then
begin
ShowMessage ('Kayıt Bulunamadı');
end
else
begin
table1.Open;
table1.Edit;
table3.edit;
table1.FindKey([edit1.text]);
if table1BARKOD.Text = table3BARKOD.Text then
begin
table3.Edit;
table3MIKTAR.Value := table3MIKTAR.Value+table7MIKTAR.Value;
table3.First;
edit3.Text:='1';
top:=0;
kart:=0;
for i:= 1 to table3.RecordCount do
begin
top:= top+ table3TOPLAM.AsCurrency;
kart:= kart+ table3KAR.AsCurrency;
table3.Next;
table1.Close;
end;
table7TTUTAR.AsCurrency:= top;
table7TKAR.AsCurrency:= kart;
end
else
begin
table1.Open;
table3.Edit;
table3.FindKey([edit1.text]);
if table3BARKOD.Text = table1BARKOD.Text then
begin
table3.edit;
table3MIKTAR.Value := table3MIKTAR.Value+table7MIKTAR.Value;
table3.First;//Table3 Tampon Table olarak kullanıldı, bu bakımdan POST komutu yok.
Edit3.Text:='1';
top:=0;
kart:= 0;
for i:= 1 to table3.RecordCount do
begin
top:= top+ table3TOPLAM.AsCurrency;
kart:= kart+ table3KAR.AsCurrency;
table3.Next;
table1.Close;
end;
table7TTUTAR.AsCurrency:= top;//Satış Ekranı sağ alttaki TOPLAM kısmını table7TTUTAR da kontrol ediyorum.
table7TKAR.AsCurrency:= kart;//table7TKAR'ı burada kaydedip başka yerde (Kasa Defterinde) kontrol ediyorum.
end
else
begin
table1.Open;
table3.Insert;
table3BARKOD.Text := table1BARKOD.Text;
table3MAL.Text := table1MAL.Text;
table3FIYAT.AsCurrency := table1FIYAT.AsCurrency;
table3MIKTAR.Value := table7MIKTAR.Value;
table3TOPLAM.AsCurrency := table3MIKTAR.Value*table3FIYAT.AsCurrency;//Bu satırı TOPLAM Field'ını oluşturunca kaldırdık.
table3KARBI.AsCurrency:= (table1FIYAT.AsCurrency-table1MALIYET.AsCurrency);
table3KAR.AsCurrency:= table3MIKTAR.Value*table3KARBI.AsCurrency;
Edit3.Text:= '1';
table3.first;
top:= 0;
kart:= 0;
for i:= 1 to table3.RecordCount do
begin
top:= top+ table3TOPLAM.AsCurrency;
kart:= kart+ table3KAR.AsCurrency;
table3.Next;
table1.Close;
end;
table7TTUTAR.AsCurrency:= top;
table7TKAR.AsCurrency:= kart;
end;
end;
end;
Edit1.SetFocus;
Edit1.Text :='';
end;
end;
Kod: Tümünü seç
procedure Tform4.Table3CalcFields(DataSet: TDataSet);
begin
table3TOPLAM.Value:= table3MIKTAR.Value*table3FIYAT.Value;
end;
Re: Delphi'de DataGrid Üzerinde Direkt Oynama
S.A. Cümleten;
Alttaki TOPLAM kısmını başka bir table da kontrol ettiğimizi belirtmiştik. Bu sefer başka bir yöntemle denemek istedim. Alttaki TOPLAM ı kontrol ettiğimiz table7 içinde kullandığımız TTUTAR kısmını CalcField olarak belirledim ve table7'nin OnCalcField'ında bu işi çözmeye çalıştım.
(Devre dışı bıraktığım alanlar, KAR kontrolü yapıyordu ancak Stack Overflow hatasından kaçmak için devre dışı kaldılar, ona sonra değiniriz.)
Son durum şu şekilde...

Satış için barkod okuttuğumuz zaman, alttaki TOPLAM'ı alamıyoruz ancak;
barkod okuttuğumuz edit'e herhangi bir sayı, rakam , barkod vs girmeye başladığımız anda döngü aktif olup TOPLAM'ı alıyor. Yani ilgili edit'e ilk rakamı girerken table7CalcField'ı aktif oluyor anladığım kadarı ile...Daha öncesinde aktif olmuyor. Bunu nasıl çözeriz???

Alttaki TOPLAM kısmını başka bir table da kontrol ettiğimizi belirtmiştik. Bu sefer başka bir yöntemle denemek istedim. Alttaki TOPLAM ı kontrol ettiğimiz table7 içinde kullandığımız TTUTAR kısmını CalcField olarak belirledim ve table7'nin OnCalcField'ında bu işi çözmeye çalıştım.
Kod: Tümünü seç
procedure Tform4.Table7CalcFields(DataSet: TDataSet);
var
i:Integer;
top,kart:Double;
begin
top:=0;
{kart:=0;}
table3.First;
for i:=1 to table3.RecordCount do
begin
top:= top+table3TOPLAM.AsCurrency;
{kart:= kart+table3KAR.AsCurrency;}
table3.Next;
end;
table7TTUTAR.AsCurrency:= top;
{table7TKAR.AsCurrency:= kart;}
end;
Son durum şu şekilde...

Satış için barkod okuttuğumuz zaman, alttaki TOPLAM'ı alamıyoruz ancak;
barkod okuttuğumuz edit'e herhangi bir sayı, rakam , barkod vs girmeye başladığımız anda döngü aktif olup TOPLAM'ı alıyor. Yani ilgili edit'e ilk rakamı girerken table7CalcField'ı aktif oluyor anladığım kadarı ile...Daha öncesinde aktif olmuyor. Bunu nasıl çözeriz???

Re: Delphi'de DataGrid Üzerinde Direkt Oynama
Sanırsam; table7CalcField erken devreye giriyor ve top:=0 satırından sonra toplamı sıfırlıyor, bu yüzden 2.döngüde ancak toplamı görebiliyor gibi bir durum var.
CalcField alanların öncelik sırasını nasıl ayarlayabilirim, çözüm olur mu acaba??
CalcField alanların öncelik sırasını nasıl ayarlayabilirim, çözüm olur mu acaba??