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.
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
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
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
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
  Delphide time alanını toplama shooterman 3 510 14-09-2023, Saat: 13:03
Son Yorum: shooterman
  InputBox a sadece rakam girme. noname101 3 597 06-06-2023, Saat: 10:21
Son Yorum: COMMANDX
  farkli tablolardan verileri dataset e toplama sadikacar60 12 1.825 23-03-2023, Saat: 18:34
Son Yorum: sadikacar60
  delphi mssql toplama yunusemre 13 3.201 30-04-2022, Saat: 23:37
Son Yorum: dilanorkan
  saat toplama erdogan 9 3.260 24-12-2020, Saat: 17:21
Son Yorum: erdogan



Konuyu Okuyanlar: 1 Ziyaretçi