arkadaşlar şu koda bakabilir misiniz?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

arkadaşlar şu koda bakabilir misiniz?

Mesaj gönderen y.kulac »

s.a.
firebird 1.5 veritabanı ve ibx bileşin kullanıyorum

tabloya kayıt ekleme:

Kod: Tümünü seç

ibtable2.Append;
ve kaydet işlemi:

Kod: Tümünü seç

ibtable2.Edit;
ibtable2SAAT_TOPLAMI.Value:= ibtable2GUN1.Value+ ibtable2GUN2.Value 
 +ibtable2GUN3.Value + ibtable2GUN4.Value + ibtable2GUN5.Value+
                             ibtable2GUN6.Value+ ibtable2GUN7.Value +    
                             ibtable2GUN8.Value + ibtable2GUN9.Value + 
                             ibtable2GUN10.Value+ ibtable2GUN11.Value + 
                             ibtable2GUN12.Value + ibtable2GUN13.Value + 
                             ibtable2GUN14.Value + ibtable2GUN15.Value+
                             ibtable2GUN16.Value+ ibtable2GUN17.Value + 
                             ibtable2GUN18.Value +ibtable2GUN19.Value + 
                             ibtable2GUN20.Value + ibtable2GUN21.Value + 
                             ibtable2GUN22.Value + ibtable2GUN23.Value + 
                             ibtable2GUN24.Value + ibtable2GUN25.Value +
                             ibtable2GUN26.Value + ibtable2GUN27.Value + 
                             ibtable2GUN28.Value + ibtable2GUN29.Value +  
                             ibtable2GUN30.Value + ibtable2GUN31.Value;
//tahakkuk toplamı
ibtable2TAHAKKUK.Value:= ibtable2SAAT_TOPLAMI.Value * ibtable2SAAT_UCRETI.Value;
//gelir vergisi
ibtable2GELIR_VER.Value:= (ibtable2TAHAKKUK.Value * 15) / 100;
//damga vergisi
ibtable2DAMGA_VER.Value:= (ibtable2TAHAKKUK.Value * 6) / 1000;
//kesinti toplamı
ibtable2KESINTI_TOP.Value:=ibtable2GELIR_VER.Value+ibtable2DAMGA_VER.Value;
//net ödenen
ibtable2NET.Value:=ibtable2TAHAKKUK.Value-ibtable2KESINTI_TOP.Value;

ibtable2.Post;
Datamodule1.IBTransaction1.CommitRetaining;

//genel toplamlar
ibquery3.close;
ibquery3.SQL.Clear;
ibquery3.SQL.Add('Select sum(SAAT_TOPLAMI) as TSAAT,sum(TAHAKKUK) as TTAH,sum(GELIR_VER) as TGEL,sum(DAMGA_VER) as TDAM,sum(KESINTI_TOP) as TKES, SUM(NET) as TNET,sum(KATSAYI) as TKAT from EKDERS');
ibquery3.Open;

Memo1.Lines.Clear;
Memo2.Lines.Clear;
Memo3.Lines.Clear;
Memo4.Lines.Clear;
Memo5.Lines.Clear;
Memo6.Lines.Clear;
Memo7.Lines.Clear;

Memo1.Text:=ibquery3.fieldbyname('TSAAT').AsString;
Memo2.Text:=ibquery3.fieldbyname('TTAH').AsString;
Memo3.Text:=ibquery3.fieldbyname('TGEL').AsString;
Memo4.Text:=ibquery3.fieldbyname('TDAM').AsString;
Memo5.Text:=ibquery3.fieldbyname('TKES').AsString;
Memo6.Text:=ibquery3.fieldbyname('TNET').AsString;
Memo7.Text:=ibquery3.fieldbyname('TKAT').AsString;

Memo1.Text:=formatfloat('#####0.00',strtofloatdef(memo1.Text,0));
Memo2.Text:=formatfloat('#####0.00',strtofloatdef(memo2.Text,0));
Memo3.Text:=formatfloat('#####0.00',strtofloatdef(memo3.Text,0));
Memo4.Text:=formatfloat('#####0.00',strtofloatdef(memo4.Text,0));
Memo5.Text:=formatfloat('#####0.00',strtofloatdef(memo5.Text,0));
Memo6.Text:=formatfloat('#####0.00',strtofloatdef(memo6.Text,0));
Memo7.Text:=formatfloat('#####0',strtofloatdef(memo7.Text,0));
bu işlemlerden sonra kişinin adını kaydediyor.
ama diğer alanları doldurduğum halde kayıt yapmıyor.
veri girşini jvdbgrid ile yapıyorum. önce standart dbgrid ile yapıyordum.
ama kayıt işlemi olmayınca, bende jvdbgridi kullandım.

burada verileri giriyorum. kaydet diyorum. yukarıdaki koddaki ibquery3 ile yapması gereken genel toplam işleminide yapmıyor.

taki formu açıp kapatıyorum. kapatırken bütün tabloları queryleri kapatıyorum. tekrar formu açınca kişinin sadece adı soyadı saklı kalıyor.
diğer alanlar boş geliyor.

ayrıca yeni kayıt alanı açıyorum verileri giriyorum. Kaydet diyorum. yine aynı sorun. 2 gündür bu sorunla uğraşıyorum. ama sonuç elde edemedim.
acaba kodlamada bir hata mı yapıyorum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Şu kodlara baktım ve ilk gözüme çarpanı söyleyeyim ;)
ibtable2SAAT_TOPLAMI.Value:=.... gibi bir kod kullanmışsın ama Value variant tipinde olduğu için ben Variantlar a buz gibi soğukum. Bu variantlara arkanı yaslayıp hesaplama yapılmaz, böyle yarı yolda bırakırlar. .Value yerine en sağlıklı yöntem .AsFloat veya AsInteger gibi direk tipinde değer üreten metotları kullanmanız tavsiye olunur. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

teşekkür ederim. alanları dedğiniz gibi değiştirdim.
ama benim sorunum dbgridden girilen bilgiler veritabanına kaydedilmiyor.

dbgriddeki yapı şu şekilde
adı soyadı 1. gün 2.gün 3.gün ... 31. gün saat toplamı saat ücreti tah. toplamı

burada yeni kayıt diyorum. adını soyadını yazıyorum. günlerden bazılarını doldurup kaydet diyorum. ama formu açıp kapattıktan sonra bir bakıyorum, adı soyadı dışındaki hiçbir şey kaydedilemiş ve genel toplam hesaplanmamış. burada sorun dbgriddeki bazı değerlerin veritabanına kaydedilmememsi.

ama formu tekrar açıp kapattıktan sonra yazdığım değerler veritabanına kaydediliyor.

bu benim başıma daha öncede gelmişti. dbcomboxtaki verileri kaydetmiyordu. bende dbcombobox un onexitine kod yazmıştım o şekilde halletmiştim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kaydet dedikten sonra ya da AfterPost da IBTable.Transaction.CommitRetaining; diyor musun :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Formu kapatmaktan kasıt , program reset ise transaction commit edilmemiş olabilir. Bazen normal bir şekilde , bazen program reset yapıyorsanız, database'e kayıt etmeme nedeni bu olabilir. :!:
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

rsimsek yazdı:Kaydet dedikten sonra ya da AfterPost da IBTable.Transaction.CommitRetaining; diyor musun :?:
AfterPost olayında DataModule1.ibTransaction1.CommitRetaining kodu yazılı.

IBTable.Transaction.CommitRetaining; demişsiniz.

benim kod ile sizinkinin arasında fark var mı?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Tek Transaction var ise doğrudur.. Garanti olması açısından yazdığım daha anlaşılır olabilir. Tek Transaction olduktan sonra farkı yok.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

append ile yeni kayıt açtıktan sonra birde edit moduna mı getiryorsunuz. Ben mi yanlış anladım, yoksa ikisi ayrı işlem mi ? eğer aynı işlem ise append ile yeni kayıt açtıktan sonra edit demenize gerek yok, verileri alanlara eşitledikten sonra post etseniz yeter.
Master43
Üye
Mesajlar: 73
Kayıt: 17 Ara 2004 12:05

Mesaj gönderen Master43 »

Insert, Update, .. SQL lerini bi kontrol edin bence sonradan alan eklemiş ve güncellememiş olabilirsiniz
Cevapla