mysql ve autoincrement alan

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
csyasar
Üye
Mesajlar: 646
Kayıt: 25 Şub 2004 10:14
Konum: Tokat

mysql ve autoincrement alan

Mesaj gönderen csyasar »

arkadaşlar çalışma esnasında mysql tablonun autoincrement alana attığı değeri nasıl bulurum. yani kısaca şu olcak:

CR_KOD= PRS00000001 gibi bi değer. sondaki 1 auto increment alandan alınacak.

CR_REF_NO=1 autoincrement alan. değeri her kayıtta artıcak.

istediğim şey. tabloya insert denildiğinde autoincrement alan hemen otomatik değer göstersin. bende onun kulağından tutup CR+9tane sıfır+1(CR0000000001) bu şekilde değerleyeyim. bunu nasıl yaparız. yoksa farklı bir tabloda her tabloya ait 1 adet integer alan bulundurup ordan kendi elimle 1 arttırıp müşteri no'sunu kendim mi vereyim.

eldeki malzemeler:
* 1 kg delphi7
* 500gr mydac
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Mysql değilde başka bir veri tabanı kullansaydın bir insert trigger ı ile cr kodunu otomatik hesaplatırdın.

Delphide de field ın display özelliğini CR####### yaparak bu şekil bir görünüm sağlayabilirsin.Yani id sabit kalır ancak dediğin şekilde gözükür.

Forumda arama yaparsan bu konu hakkında bilgiye ulaşabilirsin.
En son Ali Erdoğan tarafından 17 May 2005 04:42 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

şöyle bir yol izlesen nasıl olur,
Table ın BeforePost olayında Max id yi bulup,
AfterInsert te onu bir arttırarak istediğin karakterlerin önüne getirebilirsin..
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
söyle bir önerim olabilir MySQL de ilgili tablonun sıradki Id numarasını SHOW TABLE STATUS FROM ... cümlesiyle elede edeceğin RecortSEt içerisinde arama yaparak bulabilirsin sana Parametre olarak vereceğin tablonun sıradaki ID nosunu veren basit bir fonksiyon yazabilirim fikir olması açısından;

Kod: Tümünü seç

function IdBul(TabloAdi: String): Double;
var
qIDBul:TQuery;
begin
  try
    qIDBul:=Tquery.create(nil);
     with qIDBul do
      begin
        DatabaseName:='database_adı';
        sql.add('SHOW TABLE STATUS FROM '+DatabaseName);
        Active:=true;
        first;
         while not eof do
          begin
            if Fields[0].AsString=TabloAdi then
               begin
                 Result:=FieldByName('Auto_increment').AsCurrency;
                 break;
               end;
            next;
          end;
      end;
  finally
    qIDBul.free;
  end;
end;
kullanımı ,

Kod: Tümünü seç

Showmessage('Sıradaki ID No :'+CurrToStr(IdBul('Musteri')));
kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

uğraşmanıza gerek yok. mysql'in sonraki versiyonlarında bu zaten otomatik olarak kaydı post ettiğinizde görünüyor. eski verisiyonlarda ise post ettikten sonra select komutu ile en son auto increment değerini tutanm değişkeni çağırabiliyorsunuz. şimdi hatırlamıyorum ama çok önemliyse bakayım tekrar. bende programı bu şekilde yazmıştım baktım post edince değer gözüküyor yeni versiyonda ona göre düzeltmiştim. [/code]
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

Peki Firebird de bu olay nasıl oluyor bir fikriniz var mı ???
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
sitede çok konuşuldu :ara
başlamak için işinize yarayacak bir makale,
http://www.delphiturkiye.com/index.php? ... utoinc.htm
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

Açıkcası ço fazla işime yaradığını söyleyemiyeceğim. Sanırsam anlatılan DB de otomatik olarak ID oluşturulup onun kontrolü ile ilgili Stored Procedure yazıp onu çağrıyorsunuz insertten önce.

Benim aradığım ise ben insert yaptıktan sonra oluşan ID numarasını almak. Benle beraber başkalarıda insert yapmış olabilir. O yüzden en yüksek olan ID yi almak işime gelmiyor. Inserte yaptığım verilerle sorgulama yapıp ona göre en yüksek ID yi çekiyorum fakat çok kullanılıcılı ortamda unique olmayabilecek verilerle çalışmak pek hoşuma gitmiyor. PHP den alıştığım bir fonk. olan ve mysql de geçerli mysql_insert_id () fonksiyonunu arıyorum açıkcası yada onun işlevini gerçekleştirebilicek bir fonksiyon örneği...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
şimdi siz Firebir de mi nsıl yapılacağını soruyorsunuz yoksa MySQL de
mi? , firebird de, autoinc alanı siz generatorler ile yapabilirsiniz ve kontrol sizde olur insert ederken bu bilgiye ihtiyacınız olmak orunda olduğundan insert sonrasında aynı SP yi çağırark sıradaki ID yi basit bir şekilde alaiblirsiniz. MySQL de yukarıda bahsettiğim geçen yöntemin sağlam olduunu düşünüyorum.
Volkan KAMADAN
www.polisoft.com.tr
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

Firebird kullanıyorum.

Acaba Trigger kullanarak yapılan autoinc fieldlerden böyle bir almak mümkün mü ?


Mysql den bahsetmemin nedeni PHP de olan mysql_insert_id() fonksiyonunun yaptığı işi yapacak bir fonksiyon aramam.
Cevapla