Autoincremetle Kayıt

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mahmut
Üye
Mesajlar: 82
Kayıt: 21 May 2004 11:00
Konum: KONYA
İletişim:

Autoincremetle Kayıt

Mesaj gönderen mahmut »

İyi Aksamlar


Öncelikle sık sık soru sorarak kafanızı şişirdiğim için özür dilerim.
Sorum şu olacak veritabanında tanımladıgım autoincrement olayları
IBTable1.Post olayını yapmama ragmen autoincrement çalışmıyor ancak programı kapatıp açtıgım zaman numaraların arttıgını goruyorum. Ben program içerisinde direct olarak nasıl artırabilirm.

Bu olay sunun için gerekli yaptıgım 3 veritanındaki bilgileri 4'ncü veritabanına kaydedeceğim ama bunların ID numaralarıda gerekiyor.O Yüzdende soyle bir kod kullandım
Kaydet Butonumun içerisinde

Data.StokHareket.FieldByName('stokkodu').Asstring :=Data.BilgisayarStok.FieldByName('stokkodu').Asstring;
Data.StokHareket.FieldByName('urunadi').Asstring :=Data.BilgisayarStok.FieldByName('urunadi').Asstring ;
Data.StokHareket.FieldByName('urunserino').Asstring :=Data.BilgisayarStok.FieldByName('urunserino').Asstring;
Data.StokHareket.FieldByName('Birimi').Asstring :=Data.BilgisayarStok.FieldByName('Birimi').Asstring;
Data.StokHareket.FieldByName('BirimFiyati').AsFloat :=Data.BilgisayarStok.FieldByName('BirimFiyati').AsFloat;
Data.StokHareket.FieldByName('Stokgiris').AsFloat :=Data.BilgisayarStok.FieldByName('Stokgiris').AsFloat;
Data.StokHareket.FieldByName('StokCikis').AsFloat :=Data.BilgisayarStok.FieldByName('StokCikis').AsFloat;
Data.StokHareket.FieldByName('ToplamStok').AsFloat :=Data.BilgisayarStok.FieldByName('ToplamStok').AsFloat;
Data.StokHareket.FieldByName('Bilgisayarid').AsInteger :=Data.IBDataSet1.FieldByName('Otobilid').AsInteger;

Data.BilgisayarStok.Edit;
Data.BilgisayarStok.Post;
Data.StokHAreket.Edit;
Data.StokHAreket.Post;
Data.StokHAreket.Refresh;[/code]

Bu şekilde yaptıgımda Stokhareketteki OtobilID'nin degeri her zaman '0' luyor. YArdımlarınız için şimdiden Teşekkürler

İyi Akşamlar
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

Hocam autoincrement alanlara siz müdale edemezsiniz...

ibtable kullanıyorsunuz ama veri tabanınız interbase mi firibird mü ?

ayrıca ;

FireBird ise bir generator tanımlayıp trigger ile arttırmanız gerekir id
değerinizi...
örneğin ;

Kod: Tümünü seç

AS
BEGIN
  IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(CIFTCILER_ID_GEN, 1);
END
veya hutta autoincrement tanımladıgınız field ı integer tanımlayın... programı açtıgınızda gitsin son kaydı okusun daha sonra ona 1 ekleyip yeni kayda yazsın...

Kod: Tümünü seç

ibtable1.last;
deger:=ibtable1.fieldbyname('alan').asinteger;
ibtable.append;
deger:=deger+1;
ibtable1.fieldbyname('alan').asinteger:=deger;
şeklinde bu probleminizide giderebilirsiniz...

Kolay Gelsin..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Sitede IBDataset ve AutoIncrement ile ilgili makale var. Forumda da var.

Kolay gelsin.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

o alana iliskin bir generator olusturursanız ibdataset ten bu generatoru direkt kullanabilirsiniz. Her yeni kayıtta da otomatik artırılır
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

gkimirti yazdı:o alana iliskin bir generator olusturursanız ibdataset ten bu generatoru direkt kullanabilirsiniz. Her yeni kayıtta da otomatik artırılır
Gökmen Hocam'ın yöntemi en güzel yöntem yanlız bir şey eklemek istiyorum bunu Delphi 6 ve Delphi 7 kullanıyorsan yapabilirsin bu bildiğim kadarıyla Delphi 5 ve alt sürümlerinde yok.

Şayet Delphi 5 kullanıyorsan SP yazman gerekecek (Makale ve İpucu kısmında Şair abimin makalesi var)

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Delphi5 te de oluyor
ibx update yapınca bu ozellik geliyor
tabi ibx update 5.04 u yuklemek icin de delphi5 sp1 yuklemek gerekiyor.
ÜŞENME,ERTELEME,VAZGEÇME
mahmut
Üye
Mesajlar: 82
Kayıt: 21 May 2004 11:00
Konum: KONYA
İletişim:

Mesaj gönderen mahmut »

m4st3rmus yazdı:

Kod: Tümünü seç

ibtable1.last;
deger:=ibtable1.fieldbyname('alan').asinteger;
ibtable.append;
deger:=deger+1;
ibtable1.fieldbyname('alan').asinteger:=deger;
şeklinde bu probleminizide giderebilirsiniz...

Kolay Gelsin..
Hocam bu kod işimi gordu cok saolasın teşekkürler
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

önemli degil ,

Kolay Gelsin
mahmut
Üye
Mesajlar: 82
Kayıt: 21 May 2004 11:00
Konum: KONYA
İletişim:

Mesaj gönderen mahmut »

Merhaba

Kod: Tümünü seç

ibtable1.last; 
deger:=ibtable1.fieldbyname('alan').asinteger; 
ibtable.append; 
deger:=deger+1; 
ibtable1.fieldbyname('alan').asinteger:=deger
Daha önce yukarıdaki bir kod yardımıyla işimi hallediyordum fakat bir kaç arkadaştan bu yolun pek kullanışlı olmadıgını duydum Triger ile yapmamın daha dogru oldugu soylendi ben zaten bunu IbExpert kullanarak yapıyorum fakat program içerisinde Ibtable1.Post dediğimde otomatik olarak trigger çalışmıyor.
Ibtable'in Afterpost'unda
IBTransaction1.CommitRetaining; ile commit de yapıyorum ama bir türlü program çalışırken otomatik kayıt artmıyor.
Fakat ilginç bir sorun IBexpertde generator düzgün bir şekilde çalışıyor. Yani IBExpertte kayıt eklediğim zaman hiç prblem olmadan sayı artıyor
Delphi içinde ise veritabanını kapatıp tekrar actıgımzaman otomatik kayıt sayısının arttıgını görüyorum.
Gözden kaçırdığım bir şey var mutlaka ama ben bulamadım.

Yardımlarınız için Teşekkürler.

Delphi5 Professonial
Veritabanı : Firebird 1.5
Table :IBtable
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

mahmut bende de aynı şey oluyordu..

CommitRetaining olayından sonra table ı refresh edersen aslında triggerın çalıştığını göreceksin..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Eğer ilk mesajda yazdığın kod ise 1. Sen edit ediyorsun yani var olan bir kaydı değiştiriyorsun. 2 "Edit" ten önce atamaları yapıyorsun triggerlarla ilgili makaleler olucak onları oku

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
mahmut
Üye
Mesajlar: 82
Kayıt: 21 May 2004 11:00
Konum: KONYA
İletişim:

Mesaj gönderen mahmut »

hepinize ilginizden dolayı teşekkür ederim
Sayın Admin o makaleleri okudum ama gerek benim biraz yeni olmam gerekse delphi ile sürekli ilgilenemem ve sanırım birde delphi 5 kullanmam
olayları biraz uzatıyor.

Sayın Trsoft sizin soylediğiniz işlemide yaptım. Ama bende olmadı
Sanırım delphi5 ten kaynaklanan bir problem bu
Ben bunu Ibtable'ın afrterpostunda su kodlar ile olayı cozdum

Kod: Tümünü seç

Var
Eskiid:Integer;
Begin
    IBTransaction1.Commit;
     IbTable1.Open;
     Ibtable1.Last;
     Eskiid:=Ibtable1.Fieldbyname('otomatik').AsInteger;
     Ibtable1.Locate('otomatik',eskiid,[Lopartialkey]);

end;
Teşekkür ederim Başka bir arkadasın basına gelirse bu kesin bir cözüm gibi görünüyor
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Yaptığınız kodlama problem çıkartırsa Şair Abi min makalesini mutlaka okumanızı tafsiye ederim. viewtopic.php?t=332

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla