Rakam ve Karakterli Toplama

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

Rakam ve Karakterli Toplama

Mesaj gönderen ozcank »

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: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Rakam ve Karakterli Toplama

Mesaj gönderen freeman35 »

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: 925
Kayıt: 28 Nis 2005 05:29

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ozcank »

freeman35 yazdı: 15 Nis 2019 11: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: 925
Kayıt: 28 Nis 2005 05:29

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ozcank »

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
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ihalilcoban »

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
(204.32 KiB) 120 kere indirildi
aligel54
Üye
Mesajlar: 41
Kayıt: 20 Nis 2009 11:34

Re: Rakam ve Karakterli Toplama

Mesaj gönderen aligel54 »

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: 41
Kayıt: 20 Nis 2009 11:34

Re: Rakam ve Karakterli Toplama

Mesaj gönderen aligel54 »

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: 925
Kayıt: 28 Nis 2005 05:29

Re: Rakam ve Karakterli Toplama

Mesaj gönderen ozcank »

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