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 10:35
Konum: Antalya

otomatik kod artırma

Mesaj gönderen comeng07 » 08 Ara 2018 12:21

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: 2981
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: otomatik kod artırma

Mesaj gönderen mkysoft » 08 Ara 2018 07:41

trigger kullanabilirsiniz. Kodu ve sayısal kısmını ayrı ayrı alanlarda tutmanız daha iyi olabilir.

Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 158
Kayıt: 05 Eki 2007 07:02

Re: otomatik kod artırma

Mesaj gönderen KoPilot » 08 Ara 2018 10: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.
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..

comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 10:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 » 16 Ara 2018 01: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.

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: otomatik kod artırma

Mesaj gönderen ihalilcoban » 16 Ara 2018 10:57

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 10:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 » 17 Ara 2018 02:16

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

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: otomatik kod artırma

Mesaj gönderen ihalilcoban » 17 Ara 2018 03:18

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: 307
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: otomatik kod artırma

Mesaj gönderen yusuf simsek » 18 Ara 2018 01:08

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: 158
Kayıt: 05 Eki 2007 07:02

Re: otomatik kod artırma

Mesaj gönderen KoPilot » 20 Ara 2018 08:41

comeng07 yazdı:
16 Ara 2018 01: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: 852
Kayıt: 28 Nis 2005 12:26
Konum: Simdilik Topragin Üstü

Re: otomatik kod artırma

Mesaj gönderen ikra » 21 Ara 2018 10: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.
kıdemsiz üye

Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 158
Kayıt: 05 Eki 2007 07:02

Re: otomatik kod artırma

Mesaj gönderen KoPilot » 23 Ara 2018 08:13

ikra yazdı:
21 Ara 2018 10: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 10:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 » 25 Ara 2018 07:17

KoPilot yazdı:
08 Ara 2018 10: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: 852
Kayıt: 28 Nis 2005 12:26
Konum: Simdilik Topragin Üstü

Re: otomatik kod artırma

Mesaj gönderen ikra » 26 Ara 2018 01:06

KoPilot yazdı:
23 Ara 2018 08:13
ikra yazdı:
21 Ara 2018 10: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

Kullanıcı avatarı
ihalilcoban
Üye
Mesajlar: 119
Kayıt: 10 Ara 2015 10:39
Konum: Gaziantep

Re: otomatik kod artırma

Mesaj gönderen ihalilcoban » 26 Ara 2018 06:16

comeng07 yazdı:
25 Ara 2018 07:17
KoPilot yazdı:
08 Ara 2018 10: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 10:35
Konum: Antalya

Re: otomatik kod artırma

Mesaj gönderen comeng07 » 27 Ara 2018 02:33

ihalilcoban yazdı:
26 Ara 2018 06:16
comeng07 yazdı:
25 Ara 2018 07:17
KoPilot yazdı:
08 Ara 2018 10: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