Accessteki Gibi Otomatik Sayı

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ı
fanibiri
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 08:55
Konum: Antalya
İletişim:

Accessteki Gibi Otomatik Sayı

Mesaj gönderen fanibiri »

Formunuza olan üyeliğimi Kabul ettiğiniz için çok Teşekkür ederim.Delphi Türkiye gerçektende çok güzel ve yararlı bir portal Bu Güzel insanlarla birşeyler payalaşabileceğim için Şanslıyım. Soruma Gelince
gerçektende basit bir şey olsa gerek ama delphide yapamadım ve sinirim bozuluyor. Birçok Kişiye sordum Fakat Yanıt Alamadım Tabloları Adotable yada query ile bağlıyorum....

Ado ile db3.mdb mi bağladım. iki adet tablom var

1. tablo : urunler = muskodno = otomatik sayı...

2.Tablo : musteriler urunlerid = otomatik sayı....

görüldüğü üzere urunler ve musteriler tablosunda muskodno ve urunlerid otomatik sayı... tekrarı olmayan ve daima 1 artan...

delphide dbeditlere tüm fieldsları bağladım yeni bir kayıt yap dediğim zaman istiyorum ki otomatikman muskodno kısmı atsın...

çünkü ben musteriler tablomdaki muskodno , ad,soyad kısımlarını birleştirip bir müşteri kodu oluşturuyorum ( muskodno+ad+soyad)

Accessde bu işlem çok basit accesste yapmış olduğum forma yeni kayıt ekle diyorum formun firma alanına bilgi girer girmez muskodno kısmı son kayı100 de ise otomatik olarak 101 oluyor ama delphide malesef bunu başaramadım..... yardımcı olursanız çok sevinirim bir çok kişiye sordum ama malesef doğru yanıt alamadım şimdiden Teşekkür Ederim. Saygılarımla...
Bilenler Lütfen Bilmeyenlere Anlatsın....
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

global bir değişken tanımlayın ,
tablonun OnBeforeInsert inde bu global değişkeni ID ye eşitle

Kod: Tümünü seç

var
  DEGISKEN : integer;

TabloOnBeforeInsert
begin
  Tablo.Last;
  DEGISKEN := Tablo.FieldByName('ID').AsInteger;
end
ve sonrada bu değeri 1 arttır

Kod: Tümünü seç

TabloOnBeforeInsert
begin
  Tablo.FieldByName('ID').AsInteger := DEGISKEN + 1 ;
end
Kullanıcı avatarı
fanibiri
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 08:55
Konum: Antalya
İletişim:

Deniyorum

Mesaj gönderen fanibiri »

Vallaha çok teşekkür ederimbeyefendi fakat malum acemilik kötü birşey ve herkez acemilik çekmiştir.
unit 2 nin kod bölümüne girdim verdiğiniz kodları şöyle yazdım

Kod: Tümünü seç

var
  Form2: TForm2;
   var
DEGISKEN : integer;
implementation
yani sadece var degisken : integer; yazdım
sonra adotable1 in üzerine tıklayıp before insert olayınada

Kod: Tümünü seç

Begin 
adoTable1.Last;
  DEGISKEN := adoTable1.FieldByName('muskodno').AsInteger;
     adoTable1.FieldByName('muskodno').AsInteger := DEGISKEN + 1 ;
end;
olayını yazdım kayıt ekle deyince hata verdi özür dilerim acemiyimde :(
Bilenler Lütfen Bilmeyenlere Anlatsın....
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

hatanın içeriğini de yazarsan daha çabuk yanıt alırsın.
Kullanıcı avatarı
fanibiri
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 08:55
Konum: Antalya
İletişim:

Mesaj gönderen fanibiri »

haklısınız özür dilerim yeniyimde...
diyorki ;
project project1.exe raised exception class eDatabaseError with message Ado table1:dataset not in edit or insert mode process stoped use step or run continue
diyor...
Bilenler Lütfen Bilmeyenlere Anlatsın....
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Edit modeda olmadan tabledaki değerleri değiştiremezsin, o yüzden son yazdığın koda bir de adoTable1.Edit; ekle birde öyle dene.
Kullanıcı avatarı
fanibiri
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 08:55
Konum: Antalya
İletişim:

malesef efendim

Mesaj gönderen fanibiri »

Yok efendim malesef beforeinsert olayının başına ve sonunda adotable1.edit; eklememe rağmen yine aynı hatayı veriyor sanırım küçük bir detay var ama göremiyorum. özür dilerim formuda meşgul ediyorum...
musteriler ve urunler tabloları datasource1 datasource2 adotable1 ve adotable2 ile bağlanmış durumda malum ikisinin ilişkisi içinde adotable2yi adotable 1 ile bağladım...
Bilenler Lütfen Bilmeyenlere Anlatsın....
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Estağfirullah.... herkesin burada olmasındaki amaç birbirine yardım etmek ve gerektiğinde de yardım olmak. Bilgi duzeyinden bağımsız olarak tabi ki....
Yalnız yeterki forum kurallarına uymuş olalım... Bu konuda hassasız.

Şimdi sizin meselede oguzozturk74 arkadaşımızın önerdiği yöntem işe yarar fakat ufak bir nokta gözden kaçmış.

Kod: Tümünü seç

TabloOnBeforeInsert
begin
  Tablo.FieldByName('ID').AsInteger := DEGISKEN + 1 ;
end
Bu kodu Beforeinsert te yazmak pek uygun olmaz zira dediğiniz edit modda olmama hatasi verir. Tabloyu bu eventte edit moda geçirmek de pek mumkun olmayabilir zira zaten insert isleminden onceki son anda bu evente ugranmış oluyor...
Dolayısıyla yapmanız gereken tek şey bu kodu

Kod: Tümünü seç

Tablo.FieldByName('ID').AsInteger := DEGISKEN + 1 ;
after insert eventeine yazmak olacak. Olası hataları mesajın içeriği ve yazdığınız kod ile birlikte verirseniz Allah'ın izniyle birlikte aşarız bu problemi....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Kod: Tümünü seç

update tableMusteri set musterikod = musteriid&musteriadi&musterisoyadi
 where musterikod=null
bu sql i adocommand a yapıştır ve kayıt işleminden sonra adocommand ı execute ile çalıştır.Access te bu sql çalışıyor fakat sql server veya firebird ile çalıştırmak istersen musteriid alanında int-->str dönüşümü yaptırman ve & yerine + oparötörü kullanman gerekebilir.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Afedersiniz sonraki beforeInsert i copy-paste ile almıştım , afterinsertt olarak değiştirmeyi unutmuşum .
Ancak Fahrettin abinin cevabını okuduktan sonra farkedebildim.
Kullanıcı avatarı
fanibiri
Üye
Mesajlar: 21
Kayıt: 05 Nis 2005 08:55
Konum: Antalya
İletişim:

olmadı ama oldu :)

Mesaj gönderen fanibiri »

Ne diyeyim yaa olmadı dedim ama birini Before insert e birinide After inserte ekledim oldu Ne güzel insanlarsınız ALLAH razı olsun Bu kodlar sorunsuz ÇAlışır değilmi umarım Ado ile DElphide bir sorun çıkmadan Güzel şeyler Yapabilirim Şimdiden Çok Teşekkür eder Küçüklerin Gözlerinden Büyüklerin Ellerinden öperim SAygılarımla.... :)
Bilenler Lütfen Bilmeyenlere Anlatsın....
Cevapla