Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Rakam ve Karakterli Toplama
#11
(16-04-2019, Saat: 08:51)mrmarman Adlı Kullanıcıdan Alıntı: Havanda su dövülüyor.

@Tuğrul HELVACI cevabı vermiş neden gözden kaçırıyorsunuz? 

 
sonuc := format( 'GSM%.12d', [ rakam ]);

mrmarman hocam ben onu kaçırmadım 
Edit2.Text:= format( 'GSM%.12d', [1111]);
bu şekilde sorun yok. Fakat ben bur da ki [1111] değeri ;
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').Text;

SONKAYIT dan çekiyorum.

Edit2.Text:= format( 'EFA%.12d', [Edit2.Text]);
bu şekilde yapamadım.
Cevapla
#12
(16-04-2019, Saat: 10:10)OZCANK Adlı Kullanıcıdan Alıntı:
(16-04-2019, Saat: 08:51)mrmarman Adlı Kullanıcıdan Alıntı: Havanda su dövülüyor.

@Tuğrul HELVACI cevabı vermiş neden gözden kaçırıyorsunuz? 

 
sonuc := format( 'GSM%.12d', [ rakam ]);

mrmarman hocam ben onu kaçırmadım 
Edit2.Text:= format( 'GSM%.12d', [1111]);
bu şekilde sorun yok. Fakat ben bur da ki [1111] değeri ;
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').Text;

SONKAYIT dan çekiyorum.

Edit2.Text:= format( 'EFA%.12d', [Edit2.Text]);
bu şekilde yapamadım.

SONKAYIT alanınız NUMARA alanının en yüksek değerine 1 ekleyerek elde edildiğine göre; bu durumda, ilgili alanın (field'ın) değerini neden string olarak alıp kullanmaya çalışıyorsunuz ? (.Text)

Format fonksiyonun içinde belirtilen %d bir sayısal değer beklendiğini ifade eder, siz ise string bir değer geçmeye çalışıyorsunuz. İlgili Format fonksiyonunun içinde değeri FieldByName('SONKAYIT').AsInteger biçiminde geçerseniz sorun kalmayacak.

Ancak not olarak belirtmekte yarar görüyorum; projede ilerlemeden evvel kendinize de yatırım yapmaya zaman tanıyın.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#13
(16-04-2019, Saat: 10:41)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Ancak not olarak belirtmekte yarar görüyorum; projede ilerlemeden evvel kendinize de yatırım yapmaya zaman tanıyın.

+1
There's no place like 127.0.0.1
WWW
Cevapla
#14
(16-04-2019, Saat: 10:41)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(16-04-2019, Saat: 10:10)OZCANK Adlı Kullanıcıdan Alıntı: mrmarman hocam ben onu kaçırmadım 
Edit2.Text:= format( 'GSM%.12d', [1111]);
bu şekilde sorun yok. Fakat ben bur da ki [1111] değeri ;
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').Text;

SONKAYIT dan çekiyorum.

Edit2.Text:= format( 'EFA%.12d', [Edit2.Text]);
bu şekilde yapamadım.

SONKAYIT alanınız NUMARA alanının en yüksek değerine 1 ekleyerek elde edildiğine göre; bu durumda, ilgili alanın (field'ın) değerini neden string olarak alıp kullanmaya çalışıyorsunuz ? (.Text)

Format fonksiyonun içinde belirtilen %d bir sayısal değer beklendiğini ifade eder, siz ise string bir değer geçmeye çalışıyorsunuz. İlgili Format fonksiyonunun içinde değeri FieldByName('SONKAYIT').AsInteger biçiminde geçerseniz sorun kalmayacak.

Ancak not olarak belirtmekte yarar görüyorum; projede ilerlemeden evvel kendinize de yatırım yapmaya zaman tanıyın.

Tuğrul Hocam ; Benim +1 değer artırmakla sorunum yok sorunum;
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. 

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
Cevapla
#15
@Tuğrul HELVACI 'nın dediği, sizin gözden kaçırdığınız kısım "Edit2.Text:= format( 'EFA%.12d', [Edit2.Text]);" varya, hah oradaki "Edit2.text"in veri tipi "String", Integer değil, aynı kodun içinde "%.12d" geçen kısım ise sizden "Integer" tipinde bir parametre istiyor, siz ise oraya String bir parametre yazıyorsunuz. Yapamamanızın sebebi bu.
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#16
(16-04-2019, Saat: 11:03)OZCANK Adlı Kullanıcıdan Alıntı:
(16-04-2019, Saat: 10:41)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: SONKAYIT alanınız NUMARA alanının en yüksek değerine 1 ekleyerek elde edildiğine göre; bu durumda, ilgili alanın (field'ın) değerini neden string olarak alıp kullanmaya çalışıyorsunuz ? (.Text)

Format fonksiyonun içinde belirtilen %d bir sayısal değer beklendiğini ifade eder, siz ise string bir değer geçmeye çalışıyorsunuz. İlgili Format fonksiyonunun içinde değeri FieldByName('SONKAYIT').AsInteger biçiminde geçerseniz sorun kalmayacak.

Ancak not olarak belirtmekte yarar görüyorum; projede ilerlemeden evvel kendinize de yatırım yapmaya zaman tanıyın.

Tuğrul Hocam ; Benim +1 değer artırmakla sorunum yok sorunum;
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. 

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

Tuğrul Hocam Teşekkür ederim bu şekilde çözdüm paylaşmak istedim.

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 Smile
GSM000000415833

Son bir sorum;
EFATSERSON.Text := Format('GSM%.12d',[EFATSERISN]);

'GSM' Alanını ben parametrik yapmak istiyorum. Parametreler kısmım da "Form9.Edit3.Text" de 3 karakterlik "000" de olabilir "GSM" de olabilir bu değeri nasıl Format kısmına eklerim ?
şöyle yapıyorum olmuyor;
Format('Form9.Edit3.Text%.12d',[EFATSERISN]);
gibi olamaz mı?
Cevapla
#17
http://www.delphibasics.co.uk/RTL.asp?Name=format
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#18
Siz bence öncelikle Format fonksiyonunu bir araştırın.
There's no place like 127.0.0.1
WWW
Cevapla
#19
Bununla ilgili genel olarak kullandığım SQL Function var. Belge Nosunu arttırıyor.

CREATE FUNCTION [dbo].[tekfunc_FATNOVER](@TIP VARCHAR(2),@SERI VARCHAR(5),@SUBE_KODU INT)
RETURNS @FATNOTEMP TABLE (FATURANO VARCHAR(15))
AS
BEGIN
DECLARE @FATUNO VARCHAR(15)
DECLARE @CEVRILEN VARCHAR(15)
DECLARE @I INT
DECLARE @TMP INT
DECLARE @TEMP VARCHAR(15)
DECLARE @TEMP1 VARCHAR(15)


IF @SERI<>''
BEGIN
SELECT @FATUNO = (SELECT TOP 1 NUMARA FROM TBLFATUNO WHERE TIP=@TIP AND SERI=@SERI AND SUBE_KODU=@SUBE_KODU)
END
IF @SERI=''
BEGIN
SELECT @FATUNO = (SELECT TOP 1 NUMARA FROM TBLFATUNO WHERE TIP=@TIP AND SERI IS NULL AND SUBE_KODU=@SUBE_KODU)
END

SELECT @I=(SELECT LEN(@FATUNO))
SELECT @CEVRILEN=''

/** TERS CEVIR **/
WHILE @I>0
BEGIN
SELECT @CEVRILEN=@CEVRILEN+SUBSTRING(@FATUNO,@I,1)
SELECT @I=@I-1
END
/** TERS CEVIR **/

SELECT @I=0
WHILE @I<(SELECT LEN(@FATUNO))
BEGIN
SELECT @I=@I+1
        IF SUBSTRING(@CEVRILEN,@I,1)='9'
        BEGIN
            SELECT @CEVRILEN=LEFT(@CEVRILEN,@I-1)+'0'+RIGHT(@CEVRILEN,15-@I)
            CONTINUE
        END ELSE
        IF SUBSTRING(@CEVRILEN,@I,1)<9 OR SUBSTRING(@CEVRILEN,@I,1)>=0
        BEGIN
        SELECT @TEMP=SUBSTRING(@CEVRILEN,@I,1)+1
        SELECT @TMP=@I
        BREAK
        END

    IF SUBSTRING(@CEVRILEN,@I,1)='Z'
        BEGIN
        SELECT @CEVRILEN=LEFT(@CEVRILEN,@I-1)+'A'+RIGHT(@CEVRILEN,15-@I)
        CONTINUE
        END ELSE
        IF SUBSTRING(@CEVRILEN,@I,1)<'Z' OR SUBSTRING(@CEVRILEN,@I,1)>='A'
        BEGIN
        SELECT @TEMP=ASCII(SUBSTRING(@CEVRILEN,@I,1))
        SELECT @TEMP=SUBSTRING(@CEVRILEN,@I,1)+1
        SELECT @TEMP=CHAR(@TEMP)
        SELECT @TMP=@I
        BREAK
        END
END/** WHILE SONU**/
SELECT @I=0

WHILE @I<LEN(@FATUNO)
BEGIN
SELECT @I=@I+1
IF @TMP=@I
    IF SUBSTRING(@TEMP,1,1)<=9 OR SUBSTRING(@TEMP,1,1)>=0
    BEGIN
    SELECT @CEVRILEN=LEFT(@CEVRILEN,@I-1)+SUBSTRING(@TEMP,1,1)+RIGHT(@CEVRILEN,15-@I)
    END ELSE
    BEGIN
    SELECT @CEVRILEN=LEFT(@CEVRILEN,@I-1)+SUBSTRING(@TEMP,1,1)+RIGHT(@CEVRILEN,15-@I)
    END
    SELECT @CEVRILEN=LEFT(@CEVRILEN,@I-1)+SUBSTRING(@CEVRILEN,@I,1)+RIGHT(@CEVRILEN,15-@I)
END

SELECT @FATUNO=@CEVRILEN
SELECT @I=(SELECT LEN(@FATUNO))
SELECT @CEVRILEN=''
WHILE @I>0
BEGIN
SELECT @CEVRILEN=@CEVRILEN+SUBSTRING(@FATUNO,@I,1)
SELECT @I=@I-1
END

SELECT @FATUNO=@CEVRILEN
INSERT INTO @FATNOTEMP VALUES (@FATUNO)      
RETURN
Delphi Kod : 
Function TersCevir(no:String):String;
var
   Cevrilen:String;
   i:Integer;
Begin
   i:= 0;
   Cevrilen := '';
   For i := length(no) DownTo 1 Do
   Begin
       Cevrilen := Cevrilen + no[i];
   End;
   Result := Cevrilen;
End;

Function Numarator(no:String):String;
var
   Nmr, Temp, Temp1:String;
   Temp2:Char;
   i, Tmp:Integer;
Begin
   nmr := TersCevir(no);
   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;
Cevapla
#20
Arkadaşlar bu şekilde çözdüm bunu da paylaşmak istedim ;
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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ExportGridToExcel ile 2 cxgridi 1 excel de toplama. noname101 7 790 13-02-2020, Saat: 10:58
Son Yorum: noname101
  fastreport nesnesinde ki memoları tek memo da toplama nmtsltn 13 3.823 23-11-2018, Saat: 15:53
Son Yorum: mcuyan
  Parayı çarpma ve toplama işlemi serhat 15 4.632 17-06-2017, Saat: 22:35
Son Yorum: meko



Konuyu Okuyanlar: 1 Ziyaretçi