Rakam ve Karakterli Toplama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 859
Kayıt: 28 Nis 2005 04:29

Rakam ve Karakterli Toplama

Mesaj gönderen ozcank » 15 Nis 2019 10:00

Arkadaşlar Merhaba ; Tablodaki bir alanım Efatura gereği hem Karakter hemde rakam ifadesi alıyor bende son rakamı bir artırmalıyım şöyle bir kod yaptım ama bu seferde içerisinde yer alan sıfırları siliyor. Çıkmaza girdim yardımcı olabilir misiniz?

Tablodaki Alanın aldığı değer : "GSM000000452689"
Kodda şunu yaptım;
ilk 3 değeri aldım "GSM"

Sonra son 12 değeri "000000452689"
sonra bir arttırmak istedim bu sefer de rakamı karaktere çevirince sıfırlar gitti bir arttı şöyle oldu
Sonra son 12 değeri "452690"
Birleştirince "GSM452690" aradaki sıfırlar kayboldu

Kod: Tümünü seç

procedure TForm23.DBGrid1DblClick(Sender: TObject);
Var
EFATSERI,EFATSERISN:AnsiString;
begin
FatuNo.Close;
FatuNo.SQL.Clear;
FatuNo.SQL.Text:='select MAX(NUMARA) AS SONKAYIT from TBLFATUNO WHERE SUBE_KODU=''0'' AND TIP=''1'' AND NUMARA LIKE ''000%''';
FatuNo.Open;
 
Edit2.Text :=FatuNo.FieldByName('SONKAYIT').Text;
 
EFATSERI := AnsiLeftStr((Edit2.Text),3);
EFATSERISN := AnsiMidStr((Edit2.Text),4,12);
EFATSERILK.Text := EFATSERI;
EFATSERSON.Text := EFATSERISN;
 
Edit2.Text:=(EFATSERILK.Text + IntToStr(StrToInt(EFATSERSON.Text)+1));
Edit5.Text :=FatuNo.FieldByName('SONKAYIT').Text;
Edit7.Text:=Label19.Caption+Edit2.Text+DBEdit2.Text;
Yapmak istediğim "GSM00000000452690" 15 haneye tamamlamak.

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2147
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: Rakam ve Karakterli Toplama

Mesaj gönderen freeman35 » 15 Nis 2019 10:21

string.LeftPad
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 !!!

ozcank
Üye
Mesajlar: 859
Kayıt: 28 Nis 2005 04:29

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ozcank » 15 Nis 2019 11:10

freeman35 yazdı:
15 Nis 2019 10:21
string.LeftPad

Kod: Tümünü seç

Edit2.Text:=(EFATSERILK.Text + IntToStr(StrToInt(EFATSERSON.Text)+1));
Bu alanı mı tekrar string.LeftPad ile çevirmeliyim ?

ozcank
Üye
Mesajlar: 859
Kayıt: 28 Nis 2005 04:29

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ozcank » 16 Nis 2019 10:10

Arkadaşlar,
Tabloda Kayıtlı Son Değer : 000000000415832
bu değeri bu şekilde bir artırmak : 000000000415833
SQL de de denedim cevirmeye çalıştım sonuç aynı.
Ilk Üç rakamı Edit alanında seri takip isterse "GSM", "ASM" her ne olursa verebilir diyede ayırdım.
Sıfırları yok etmemesi için ne yapabilirim?

Kod: Tümünü seç

SELECT CAST(MAX(NUMARA) AS NVARCHAR (15)) +1  AS SONUC1 FROM TBLFATUNO WHERE SUBE_KODU='0' AND TIP='1' AND NUMARA LIKE '000%'
GROUP BY NUMARA
bu cümlenin sonucu : 415833

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

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ihalilcoban » 16 Nis 2019 07:26

Merhaba.

Bir ara benzer bir yapıya ihtiyacım olmuştu. Kullandığım şekliyle bir örnek ekliyorum. Umarım işinize yarar.

İyi çalışmalar.
Dosya ekleri
numarator.zip
(205.14 KiB) 12 kere indirildi

aligel54
Üye
Mesajlar: 32
Kayıt: 20 Nis 2009 10:34

Re: Rakam ve Karakterli Toplama

Mesaj gönderen aligel54 » 17 Nis 2019 02:29

Aşağıdaki şekilde bir fonksiyon oluşturabilirsin.

Kod: Tümünü seç

Function SayiToSTR(GelenSayi:Int64; ToplamUzunluk:Integer):String;
var
  i:integer;
  Uzunluk:Integer;
  Yazi:String;
begin
  Yazi := inttostr(GelenSayi);
  Uzunluk := Length(Yazi);
  for i := Uzunluk to ToplamUzunluk - 1 do Yazi := '0' + Yazi;
  Result := Yazi;
end;
Kullanımı:

Kod: Tümünü seç

Sayi := 123456  + 1;  // >>123457
Yazi := 'GSM'+SayiToSTR(Sayi, 12);  // yazi = 'GSM000000123457'

aligel54
Üye
Mesajlar: 32
Kayıt: 20 Nis 2009 10:34

Re: Rakam ve Karakterli Toplama

Mesaj gönderen aligel54 » 17 Nis 2019 04:00

Biraz düşününce fonksiyon oluşturmadan tek satırda da halledebileceğin bir çözüm buldum.

Kod: Tümünü seç

Yazi := StringReplace(format('GSM%12d', [Sayi]), ' ', '0', [rfReplaceAll]);
Eğer string uzunluğunun değiştirilebilir olmasını istiyorsan, yani 12 karakterden farklı olma ihtimali varsa aşağıdaki şekilde değiştirebilirsin.

Kod: Tümünü seç

Uzunluk := 12;
Yazi := StringReplace(format('GSM%'+format('%d', [Uzunluk])+'d', [Sayi]), ' ', '0', [rfReplaceAll]); 

ozcank
Üye
Mesajlar: 859
Kayıt: 28 Nis 2005 04:29

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ozcank » 17 Nis 2019 05:32

Arkadaşlar Teşekkür ederim bu şekilde çözdüm paylaşmak istedim.

Kod: Tümünü seç

procedure TForm23.DBGrid1DblClick(Sender: TObject);
Var
EFATSERI:String;
EFATSERISN:Integer;
begin
FatuNo.Close;
FatuNo.SQL.Clear;
FatuNo.SQL.Text:='select MAX(NUMARA)+1 AS SONKAYIT from TBLFATUNO WHERE SUBE_KODU=''0'' AND TIP=''1'' AND NUMARA LIKE ''000%''';
FatuNo.Open;
 
Edit2.Text :=FatuNo.FieldByName('SONKAYIT').AsString;
 
EFATSERI := AnsiLeftStr((Edit2.Text),3);
EFATSERISN := StrToInt(Edit2.Text);
EFATSERILK.Text := EFATSERI;
EFATSERSON.Text := Format('GSM%.12d',[EFATSERISN]);
 
Edit5.Text :=FatuNo.FieldByName('SONKAYIT').AsString;
Edit2.Text:=EFATSERSON.Text;
 
Edit7.Text:=Label19.Caption+Edit2.Text+DBEdit2.Text;
 
end;
Sonuç istediğim gibi
GSM000000415833


Arkadaşlar bu şekilde çözdüm bunu da paylaşmak istedim ;

Kod: Tümünü seç

EFATSERSON.Text := EFATSERI + Format('%.12d',[EFATSERISN]);
Emeği geçen herkesin yüreğine sağlık. İlgi ve alakanızdan dolayı çok teşekkür ediyorum.

Cevapla