otomatik kod artırma

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 11:35
Konum: Antalya

otomatik kod artırma

Mesaj gönderen comeng07 »

Merhaba arkadaşlar cari kartında cari kodu kısmına C0001 diye başlayıp sonra her yeni kart eklemek istediğimde C0002 diye 1 artırmak istiyorum.
Carikodu alanım string bir alan ve dataset kullandım. Nasıl yapıcağım hakkında yardımcı olursanız çok sevinirim.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: otomatik kod artırma

Mesaj gönderen mkysoft »

trigger kullanabilirsiniz. Kodu ve sayısal kısmını ayrı ayrı alanlarda tutmanız daha iyi olabilir.
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: otomatik kod artırma

Mesaj gönderen KoPilot »

Kod: Tümünü seç

function Numarator(no: string): string;

  function TersCevir(nu: string): string;
  var
    Cevrilen: string;
    i: Integer;
  begin
    Cevrilen := '';
    for i := length(nu) downto 1 do
    begin
      Cevrilen := Cevrilen + nu[i];
    end;
    Result := Cevrilen;
  end;

var
  Nmr, Temp: string;
  i, Tmp: Integer;
begin
  Nmr := TersCevir(no);
  Tmp := 0;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Nmr[i] = '9' then
    begin
      Nmr[i] := '0';
      continue;
    end
    else if (Nmr[i] < '9') and (Nmr[i] >= '0') then
    begin
      Temp := inttostr(StrToInt(Nmr[i]) + 1);
      Tmp := i;
      Break;
    end;
    if Nmr[i] = 'Z' then
    begin
      Nmr[i] := 'A';
      continue;
    end
    else if (Nmr[i] < 'Z') or (Nmr[i] >= 'A') then
    begin
      Temp := inttostr(ord(Nmr[i]));
      Temp := intToStr(StrToInt(Temp) + 1);
      Temp := Chr(StrToInt(Temp));
      Tmp := i;
      Break;
    end;
  end;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Tmp = i then
      if (Temp[1] <= '9') and (Temp[1] >= '0') then
        Nmr[i] := Temp[1]
      else
      begin
        Nmr[i] := Temp[1];
      end;
    Nmr[i] := Nmr[i];
  end;

  result := TersCevir(Nmr);
end;
sanırım Husonet'in yazdığı bir fonksiyon. Linkini bulamadım direkt kodları veriyorum.
Fonksiyona verilen stringi bir artırarak geri döndürüyor.
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 11:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 »

Merhaba arkadaşlar öncelikle cevaplarınız için teşekkürler sınavım vardı cevap yazamadım ama husonet in yazdığı kodu denedim ama sürekli 1 geri atıyor ben atıyorum kod C0001 ise C0002,C0003,... vb. diye her yeni kayıt eklemek istediğimde +1 devam etsin istiyorum.
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: otomatik kod artırma

Mesaj gönderen ihalilcoban »

Merhaba.

Normalde bu işlemi yapmak için kullanmanız gereken yöntem, veri tabanınızda Generator tanımlayıp otomatik olarak artmasını sağlamaktır. Kullandığınız veri tabanını bilmediğim için bir şey diyemeyeceğim. Manuel olarak kod üretmek istiyorsanız ufak bir örnek ekliyorum. Umarım işinizi görür.

Kolay gelsin.

http://s7.dosya.tc/server11/af6v7w/numarator.zip.html
comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 11:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 »

merhaba ihalilcoban kod için teşekkür ederim ama dediğiniz gibi manuel değilde veri tabanından artırmam gerekiyor SQL veri tabanı kullanıyorum biraz uğraştım id üzerinden açıla her sayfa için eklesin diye ama pek başarılı olamadım elinizde hazır kod varsa ya da yardımcı olursanız sevinirim
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: otomatik kod artırma

Mesaj gönderen ihalilcoban »

Merhaba.

SQL de AutoIncrement, PrimariKey, Identity konularına bakmanız gerekiyor. Mantığını çözerseniz zaten gerisi gelecektir.

Örnek olarak;

https://www.youtube.com/watch?v=h2wBnPN7FuA

Buraya bakabilirsiniz.
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: otomatik kod artırma

Mesaj gönderen yusuf simsek »

Ben bu işlem için veritabanında Ayarlar Tablosu [ TABLOADI (String) / KOD (String) / KAYITNO ( integer ) ] ile çözüyorum.

Kullanıcı istediği kısa kodu belirleyebiliyor -> [ C ]

POST işleminden önce de kodun kaç hane olmasını istiyorsan KOD ve KAYITNO değerinin arasına o kadar sıfır ekleyip işi bitirebilirsiniz...

Kod: Tümünü seç

function KodOlustur( AKod : string; ASonKayitNo : integer ) : string;
var
	sKod,
	sTmp : string;
const 
	cHaneSayisi = 5;
begin
	sKod := '';
	sTmp := '';
	
	while ( Length( sTmp ) )  < ( cHaneSayisi - Length( IntToStr( ASonKayitNo ) ) ) do 
	    sTmp := sTmp + '0';
	
	sKod := AKod + sTmp + IntToStr( ASonKayitNo ) ;
	
	Result := sKod;


end;

Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: otomatik kod artırma

Mesaj gönderen KoPilot »

comeng07 yazdı: 16 Ara 2018 02:39 Merhaba arkadaşlar öncelikle cevaplarınız için teşekkürler sınavım vardı cevap yazamadım ama husonet in yazdığı kodu denedim ama sürekli 1 geri atıyor ben atıyorum kod C0001 ise C0002,C0003,... vb. diye her yeni kayıt eklemek istediğimde +1 devam etsin istiyorum.
Kardeş bi yanlışlık yapmışsın belliki. kodu ben kullanıyorum hem de birçok programım da, düzgün çalışıyor.
Üstelik son hane rakam olursa rakam olarak artırıyor, harf olursa alfabetik sırayla artırıyor.
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: otomatik kod artırma

Mesaj gönderen ikra »

Firebird kullandiginizi varsayiyorum.bir storedprocedure tanimlarsiniz. Beforeinsert triggerinde call yaparsiniz.
Storedprocedure icinde, en son eklenmis olan C-Numarasini get eder, akabinde parse eder, integer deger elde edip Increment yapar, daha sonra elde ettiginiz bir üst rakami ayirdiginiz Char ile birlestirip createdNum seklinde suspend ettirirsiniz. Dönen deger tabloya insert edilir.
kıdemsiz üye
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: otomatik kod artırma

Mesaj gönderen KoPilot »

ikra yazdı: 21 Ara 2018 11:18 Firebird kullandiginizi varsayiyorum.bir storedprocedure tanimlarsiniz. Beforeinsert triggerinde call yaparsiniz.
Storedprocedure icinde, en son eklenmis olan C-Numarasini get eder, akabinde parse eder, integer deger elde edip Increment yapar, daha sonra elde ettiginiz bir üst rakami ayirdiginiz Char ile birlestirip createdNum seklinde suspend ettirirsiniz. Dönen deger tabloya insert edilir.
Hocam plaza ağzı gibi olmuş, helal olsun...
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 11:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 »

KoPilot yazdı: 08 Ara 2018 11:56

Kod: Tümünü seç

function Numarator(no: string): string;

  function TersCevir(nu: string): string;
  var
    Cevrilen: string;
    i: Integer;
  begin
    Cevrilen := '';
    for i := length(nu) downto 1 do
    begin
      Cevrilen := Cevrilen + nu[i];
    end;
    Result := Cevrilen;
  end;

var
  Nmr, Temp: string;
  i, Tmp: Integer;
begin
  Nmr := TersCevir(no);
  Tmp := 0;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Nmr[i] = '9' then
    begin
      Nmr[i] := '0';
      continue;
    end
    else if (Nmr[i] < '9') and (Nmr[i] >= '0') then
    begin
      Temp := inttostr(StrToInt(Nmr[i]) + 1);
      Tmp := i;
      Break;
    end;
    if Nmr[i] = 'Z' then
    begin
      Nmr[i] := 'A';
      continue;
    end
    else if (Nmr[i] < 'Z') or (Nmr[i] >= 'A') then
    begin
      Temp := inttostr(ord(Nmr[i]));
      Temp := intToStr(StrToInt(Temp) + 1);
      Temp := Chr(StrToInt(Temp));
      Tmp := i;
      Break;
    end;
  end;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Tmp = i then
      if (Temp[1] <= '9') and (Temp[1] >= '0') then
        Nmr[i] := Temp[1]
      else
      begin
        Nmr[i] := Temp[1];
      end;
    Nmr[i] := Nmr[i];
  end;

  result := TersCevir(Nmr);
end;
sanırım Husonet'in yazdığı bir fonksiyon. Linkini bulamadım direkt kodları veriyorum.
Fonksiyona verilen stringi bir artırarak geri döndürüyor.

Doģrudur yanlışlık yapmış olabilirim cok tecrubem yok 😊 fonksiyonu cari kartındaki text alana nasıl çağırıcağımı yazabilirmisiniz
Formun onshow kismina bu sekilde yapmistim calismadi
dbedit1.text:=numarator(dbedit1.text);
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: otomatik kod artırma

Mesaj gönderen ikra »

KoPilot yazdı: 23 Ara 2018 09:13
ikra yazdı: 21 Ara 2018 11:18 Firebird kullandiginizi varsayiyorum.bir storedprocedure tanimlarsiniz. Beforeinsert triggerinde call yaparsiniz.
Storedprocedure icinde, en son eklenmis olan C-Numarasini get eder, akabinde parse eder, integer deger elde edip Increment yapar, daha sonra elde ettiginiz bir üst rakami ayirdiginiz Char ile birlestirip createdNum seklinde suspend ettirirsiniz. Dönen deger tabloya insert edilir.
Hocam plaza ağzı gibi olmuş, helal olsun...
Tesekkür ederim :))
kıdemsiz üye
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: otomatik kod artırma

Mesaj gönderen ihalilcoban »

comeng07 yazdı: 25 Ara 2018 08:17
KoPilot yazdı: 08 Ara 2018 11:56

Kod: Tümünü seç

function Numarator(no: string): string;

  function TersCevir(nu: string): string;
  var
    Cevrilen: string;
    i: Integer;
  begin
    Cevrilen := '';
    for i := length(nu) downto 1 do
    begin
      Cevrilen := Cevrilen + nu[i];
    end;
    Result := Cevrilen;
  end;

var
  Nmr, Temp: string;
  i, Tmp: Integer;
begin
  Nmr := TersCevir(no);
  Tmp := 0;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Nmr[i] = '9' then
    begin
      Nmr[i] := '0';
      continue;
    end
    else if (Nmr[i] < '9') and (Nmr[i] >= '0') then
    begin
      Temp := inttostr(StrToInt(Nmr[i]) + 1);
      Tmp := i;
      Break;
    end;
    if Nmr[i] = 'Z' then
    begin
      Nmr[i] := 'A';
      continue;
    end
    else if (Nmr[i] < 'Z') or (Nmr[i] >= 'A') then
    begin
      Temp := inttostr(ord(Nmr[i]));
      Temp := intToStr(StrToInt(Temp) + 1);
      Temp := Chr(StrToInt(Temp));
      Tmp := i;
      Break;
    end;
  end;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Tmp = i then
      if (Temp[1] <= '9') and (Temp[1] >= '0') then
        Nmr[i] := Temp[1]
      else
      begin
        Nmr[i] := Temp[1];
      end;
    Nmr[i] := Nmr[i];
  end;

  result := TersCevir(Nmr);
end;
sanırım Husonet'in yazdığı bir fonksiyon. Linkini bulamadım direkt kodları veriyorum.
Fonksiyona verilen stringi bir artırarak geri döndürüyor.

Doģrudur yanlışlık yapmış olabilirim cok tecrubem yok 😊 fonksiyonu cari kartındaki text alana nasıl çağırıcağımı yazabilirmisiniz
Formun onshow kismina bu sekilde yapmistim calismadi
dbedit1.text:=numarator(dbedit1.text);
Öncelikle en son verilen cari kodu bulmanız gerekir. Artan şekilde gideceği için SQL MAX kullanarak cari kodu veri tabanından çekip, dbedit1.text:=numarator(TABLOCARI_KOD.VALUE); şeklinde kullanabilirsiniz.
comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 11:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 »

ihalilcoban yazdı: 26 Ara 2018 07:16
comeng07 yazdı: 25 Ara 2018 08:17
KoPilot yazdı: 08 Ara 2018 11:56

Kod: Tümünü seç

function Numarator(no: string): string;

  function TersCevir(nu: string): string;
  var
    Cevrilen: string;
    i: Integer;
  begin
    Cevrilen := '';
    for i := length(nu) downto 1 do
    begin
      Cevrilen := Cevrilen + nu[i];
    end;
    Result := Cevrilen;
  end;

var
  Nmr, Temp: string;
  i, Tmp: Integer;
begin
  Nmr := TersCevir(no);
  Tmp := 0;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Nmr[i] = '9' then
    begin
      Nmr[i] := '0';
      continue;
    end
    else if (Nmr[i] < '9') and (Nmr[i] >= '0') then
    begin
      Temp := inttostr(StrToInt(Nmr[i]) + 1);
      Tmp := i;
      Break;
    end;
    if Nmr[i] = 'Z' then
    begin
      Nmr[i] := 'A';
      continue;
    end
    else if (Nmr[i] < 'Z') or (Nmr[i] >= 'A') then
    begin
      Temp := inttostr(ord(Nmr[i]));
      Temp := intToStr(StrToInt(Temp) + 1);
      Temp := Chr(StrToInt(Temp));
      Tmp := i;
      Break;
    end;
  end;
  i := 0;
  while i < length(no) do
  begin
    i := i + 1;
    if Tmp = i then
      if (Temp[1] <= '9') and (Temp[1] >= '0') then
        Nmr[i] := Temp[1]
      else
      begin
        Nmr[i] := Temp[1];
      end;
    Nmr[i] := Nmr[i];
  end;

  result := TersCevir(Nmr);
end;
sanırım Husonet'in yazdığı bir fonksiyon. Linkini bulamadım direkt kodları veriyorum.
Fonksiyona verilen stringi bir artırarak geri döndürüyor.

Doģrudur yanlışlık yapmış olabilirim cok tecrubem yok 😊 fonksiyonu cari kartındaki text alana nasıl çağırıcağımı yazabilirmisiniz
Formun onshow kismina bu sekilde yapmistim calismadi
dbedit1.text:=numarator(dbedit1.text);
Öncelikle en son verilen cari kodu bulmanız gerekir. Artan şekilde gideceği için SQL MAX kullanarak cari kodu veri tabanından çekip, dbedit1.text:=numarator(TABLOCARI_KOD.VALUE); şeklinde kullanabilirsiniz.
Teşekkür ederim kardeşim
Cevapla