Delphi'de DataGrid Üzerinde Direkt Oynama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

A.slm;

datagrid üzerinde oynayarak satılan malın miktarı ve fiyatı üzerinde kullanıcıya kolaylık sağlamaya çalışıyorum. Mesela 90 TL ye satılan ürünü indirip yapıp müşteriye 75 TL sattığımızı varsayalım. Ürün barkodundan okutulduğu zaman otomatikman stok kartından 90 TL satış fiyatı gelecek ekrana ve ben ekran üzerinden oynama yaparak 75 TL olarak girebileceğim veya aynı şekilde miktar ile grid üzerinde oynayabileceğim.

Ana amacım bu aslangeri hocam. Yazan arkadaşların yardımları ile o işi hallettik çok şükür ancak toplamda sıkıntı oluştu. Alttaki sayfanın toplam tutarına yaptığımız değişiklikleri yansıtamadım bir türlü...Dediğiniz teşhis doğru tablo için insert hatası alıyorum, null etme işinin mantığını anlayamadım, yapmaya çalıştım dediğiniz kod gibi ama şu hatayı alıyorum bu seferde:

Incompatible types: 'procedure untyped pointer or untypeda parameter' and 'Variant'

Yaptığınız eleştiride haklısınız, çok profesyonel değilim, hele ki bir hata kodu ile karşılaştığımda ne yapmam gerektiğini inanın bilmiyorum.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen aslangeri »

s.a.
önceki mesajdaki sehven "null" yazmışım o "nil" olacak.

Kod: Tümünü seç

  table3.OnCalcFields:=nil;
......
  table3.OnCalcFields:=Table3CalcFields;
gibi birşey olacak.
bileşenlere isim vermeniz sizin için iyi olacaktır. bir sene sonra tablo3 ün ne olduğunu hatırlayamayabilirsiniz ancak tfaturasatir gibi bir isim verdiğiniz zaman hatırlamanız daha kolay olacaktır.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

S.A.
table3TOPLAMChange ile table3CalcFields eventleri arasında program stack overflow oluyor.

Kod: Tümünü seç

procedure Tform4.Table3TOPLAMChange(Sender: TField);
var
top: double;
begin
top:=0;

table3.First;
while not table3.Eof do
begin

table7.Edit;
top:= top+table3TOPLAM.Value;
table7TTUTAR.AsCurrency:=top;

table3.Next;
end;

end;

end.
Yukarıdaki table3.first satırından sonra table3CalcFields'ın (aşağıda) begin satırına gidip işlemi yapıp dönüp tekrar üstteki kodun begin satırına gidiyor, onun da first satırından tekrar buraya dönüş oluyor ve stack overflow hatası veriyor. Yani yukarıda while not ile başlayan satıra erişemiyor program...

Kod: Tümünü seç

procedure Tform4.Table3CalcFields(DataSet: TDataSet);
var
i: Integer;
top:Double;

begin

table3TOPLAM.AsCurrency:= table3MIKTAR.AsInteger*table3FIYAT.AsCurrency;




end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen conari »

table3TOPLAM bilgisini bir Query ile toplat.

Kod: Tümünü seç

select sum(toplam) as toplam from table3 where ......
oncalc eventinde
Queryi requery ile tazele ve global olarak oluşurulan Top değişkenine at.
döngüyü kaldır..
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

Hocam table bileşeni kullanıyorum, query hiç kullanmadım şimdiye kadar, query bilmiyorum:((
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen conari »

query işlem yapmayacağın durumlarda daha kullanışlıdır.
Basit örnekleri sitede hemen bulabilirsin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

Table la yöntemi yok mu hocam, işler karışıyor yine?? Şimdi query ile boğuşturma beni..
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen sabanakman »

Veritabanı ile işiniz varsa SQL sorgular çalıştırmak size nefes almak kadar gerekli. Aksi halde SQL sorguları kullanmak niyetinde değilseniz adres etiket programından öte program yazmanız tavsiye olunmaz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

conari yazdı:table3TOPLAM bilgisini bir Query ile toplat.

Kod: Tümünü seç

select sum(toplam) as toplam from table3 where ......
oncalc eventinde
Queryi requery ile tazele ve global olarak oluşurulan Top değişkenine at.
döngüyü kaldır..
Conari hocam,

bu koddan anladığım kadarı ile table3 den TOPLAM'ı biryerlerden hesapla diyeceğiz...Ama bizim TOPLAM'a ulaşmamız için miktar ile fiyatı çarpmamız lazım bu aşamada. Where komutu şuradan hazır bir şeyi almak demek değil mi?? Aklımdan geçen şu:

Kod: Tümünü seç

select sum (TOPLAM)  from table3 where table3MIKTAR.AsInteger*table3FIYAT.AsCurrency;
ya da üstteki kod doğru mu oluyor? (bunu oncalc event inde yaptık)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen aslangeri »

s.a.

Kod: Tümünü seç

select sum(miktar*fiyat) as toplam from table3tablename where faturano=table3faturanumarası
gibi bişeyler olması lazım.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

A.Slm aslangeri hocam;

where den sonraki kısmı anlayamadım.

Yapmamız gereken şu değil mi?... table3 içerisindeki fiyat ve miktar kolonlarını çarp ve bir toplam olarak ata...faturano ile biz neyi teyit ediyoruz???

bir de paradox da bu sql sorguları sorun oluşturur mu?
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

Evet, Query ile ilgili çalışmamızı tamamladık ve mantığının table kontrolünden pek de farklı olmadığını gördük. (korktuğum gibi karmaşık değilmiş)

Şimdi kısaca toparlarsak;

Satış Ekranı üzerinde barkod okutturulan ürünün satış fiyatı ve miktarı üzerinde oynama yapmak istiyorduk. Oynama işini dbgrid özelliklerinden hallettik yalnız satışı yapılan ürünlerin fiyatlarının toplandığı toplam tutar'ı bir türlü becerememiştim.

Tavsiyeniz üzerine form'a 1 adet query ekledim, ilgili datasource'a bağladım, fields editörden alanları ekledim, active özelliğini true yaptım, string list editor'e

Kod: Tümünü seç

select * from NISTEK.db
kodunu ekleyerek database den bilgileri çektim.

query'nin calcfields'ına şu kodu yazdım:

Kod: Tümünü seç

select sum(MIKTAR*FIYAT) as TOPLAM from table3;
Ve undeclared identifier:'select' uyarısı aldım. :(
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen conari »

Yine karıştırmışsınız. o cümleyi Queryin SQL text kısmına yazmalısınız.

Kod: Tümünü seç

Query.SQL.text:='select sum(MIKTAR*FIYAT) as TOPLAM from table3';
şeklinde.
sonra query.open
sonra query den dönen sonucu ilgili bileşenlerde göstereceksiniz.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

conari yazdı:Yine karıştırmışsınız. o cümleyi Queryin SQL text kısmına yazmalısınız.

Kod: Tümünü seç

Query.SQL.text:='select sum(MIKTAR*FIYAT) as TOPLAM from table3';
şeklinde.
sonra query.open
sonra query den dönen sonucu ilgili bileşenlerde göstereceksiniz.
conari hocam biraz daha detaylı anlatırsan bu işi çözecez sonunda, neyi nereye yazacağımı detaylı bir şekilde tekrar yazabilir misin sana zahmet. Mesela query nin sql test i neresi?
Kullanıcı avatarı
canset
Üye
Mesajlar: 151
Kayıt: 19 Haz 2005 12:38

Re: Delphi'de DataGrid Üzerinde Direkt Oynama

Mesaj gönderen canset »

Breakpoint ike hata ararken form üzerindeki timer'da devamlı bir döngü olduğunu gördüm. Neden olabilir acaba, nasıl giderebilirim?

Resim

Uploaded with ImageShack.us
Cevapla