Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2023
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
¡Hola, mRoman!

El posible inconveniente (que no lo es del todo) es que manejas Delphi 6, en versiones mas recientes se tiene TryStrToFloat, la cual nos permite validar si el texto se puede convertir a un número. O también en versiones mas recientes puedes usar expresiones regulares para validar texto.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #2  
Antiguo 16-02-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Así tienes un tryStrToFloat casero
Código Delphi [-]
Try
  StrToFloat(....)
Except
End;
Responder Con Cita
  #3  
Antiguo 16-02-2023
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Así tienes un tryStrToFloat casero
Código Delphi [-]
Try
  StrToFloat(....)
Except
End;
Ok...muy bien, lo intentaré.

Gracias Casimiro.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #4  
Antiguo 17-02-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Estas funciones las uso en mis aplicaciones:

Código Delphi [-]
function StrToFloatDec(s: string; SeparadorDecimal: char): double;
begin
  if (DecimalSeparator <> SeparadorDecimal) then
     s := StringReplace(s, SeparadorDecimal, DecimalSeparator, []);
  Result := StrToFloat(s);
end;

Código Delphi [-]
function StrToFloatDef(s: string; Default: double): double;
begin
  try
     // Quito el separador de miles
     s := Trim(StringReplace(s, ThousandSeparator, '', [rfReplaceAll]));
     if (s = '') then
        Result := Default
     else
        Result := StrToFloat(s);
  except
     Result := Default;
  end;
end;
Responder Con Cita
  #5  
Antiguo 17-02-2023
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Estas funciones las uso en mis aplicaciones:

Código Delphi [-]
function StrToFloatDec(s: string; SeparadorDecimal: char): double;
begin
  if (DecimalSeparator <> SeparadorDecimal) then
     s := StringReplace(s, SeparadorDecimal, DecimalSeparator, []);
  Result := StrToFloat(s);
end;

Código Delphi [-]
function StrToFloatDef(s: string; Default: double): double;
begin
  try
     // Quito el separador de miles
     s := Trim(StringReplace(s, ThousandSeparator, '', [rfReplaceAll]));
     if (s = '') then
        Result := Default
     else
        Result := StrToFloat(s);
  except
     Result := Default;
  end;
end;

Gracias Duilio por tu aportación y tiempo. Lo checo también.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #6  
Antiguo 17-02-2023
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por mRoman Ver Mensaje
Ok...muy bien, lo intentaré.

Gracias Casimiro.
Ok, utilice tu recomendación Casimiro, pero como le hago para que siga con el proceso?. En cuanto encuentra la Excepción se detiene y ya no continua.

Aqui el código con el cual estoy haciendo pruebas:
Código Delphi [-]
procedure TfrmPDF.Panel1Click(Sender: TObject);
var
   Importe_Flo : Real;
   Importe_Str : String;
begin
               //COPIAR IMPORTES NUMERICOS VALIDOS AL CAMPO paso_ing_importe
        try
               qryImportesNoNum.Close;
               qryImportesNoNum.ParamByName('CT').AsString:=''+IntToStr(cbxCT.KeyValue)+'%';
               qryImportesNoNum.Open;
               qryImportesNoNum.Last;
               pBar3.Max:=qryImportesNoNum.RecordCount;
               qryImportesNoNum.First;

               While not(qryImportesNoNum.Eof) do
               begin
                     Importe_Str:=StringReplace(qryImportesNoNum.FieldByName('paso_pdf_importe').AsString,',','',[rfReplaceAll]);
                     StrToFloat(Importe_Str);
                     ShowMessage( Importe_Str);

                    { qryActImporte.Close;
                     qryActImporte.SQL.Clear;
                     qryActImporte.SQL.Add('UPDATE paso '+
                                            'SET paso_ing_importe=:importe '+
                                            'WHERE paso_pdf_id=:id');
                     qryActImporte.ParamByName('id').AsInteger:=qryImportesNoNum.FieldByName('PASO_PDF_ID').AsInteger;
                     qryActImporte.ParamByName('importe').AsFloat:=StrToFloat( StringReplace(qryImportesNoNum.FieldByName('paso_pdf_importe').AsString,',','',[rfReplaceAll]) );
                     qryActImporte.ExecSQL;}
                     qryImportesNoNum.Next;
                     pBar3.Position:=pBar3.Position+1;
               end;
        except
            ON Exception DO
            BEGIN
                Memo2.Lines.Add(chr(13)+'------IMPORTE NO NUMERICO-------');
                Memo2.Lines.Add('Registro No.: '+qryImportesNoNum.FieldByName('paso_pdf_id').AsString);
                Memo2.Lines.Add('Texto Importe: '+qryImportesNoNum.FieldByName('PASO_PDF_IMPORTE').AsString);
            END;
        end;
end;

El TRY debo ponerlo dentro del While??
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #7  
Antiguo 17-02-2023
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Me contesto solo...

Cita:
Empezado por mRoman Ver Mensaje
Ok, utilice tu recomendación Casimiro, pero como le hago para que siga con el proceso?. En cuanto encuentra la Excepción se detiene y ya no continua.

Aqui el código con el cual estoy haciendo pruebas:
Código Delphi [-]
procedure TfrmPDF.Panel1Click(Sender: TObject);
var
   Importe_Flo : Real;
   Importe_Str : String;
begin
               //COPIAR IMPORTES NUMERICOS VALIDOS AL CAMPO paso_ing_importe
        try
               qryImportesNoNum.Close;
               qryImportesNoNum.ParamByName('CT').AsString:=''+IntToStr(cbxCT.KeyValue)+'%';
               qryImportesNoNum.Open;
               qryImportesNoNum.Last;
               pBar3.Max:=qryImportesNoNum.RecordCount;
               qryImportesNoNum.First;

               While not(qryImportesNoNum.Eof) do
               begin
                     Importe_Str:=StringReplace(qryImportesNoNum.FieldByName('paso_pdf_importe').AsString,',','',[rfReplaceAll]);
                     StrToFloat(Importe_Str);
                     ShowMessage( Importe_Str);

                    { qryActImporte.Close;
                     qryActImporte.SQL.Clear;
                     qryActImporte.SQL.Add('UPDATE paso '+
                                            'SET paso_ing_importe=:importe '+
                                            'WHERE paso_pdf_id=:id');
                     qryActImporte.ParamByName('id').AsInteger:=qryImportesNoNum.FieldByName('PASO_PDF_ID').AsInteger;
                     qryActImporte.ParamByName('importe').AsFloat:=StrToFloat( StringReplace(qryImportesNoNum.FieldByName('paso_pdf_importe').AsString,',','',[rfReplaceAll]) );
                     qryActImporte.ExecSQL;}
                     qryImportesNoNum.Next;
                     pBar3.Position:=pBar3.Position+1;
               end;
        except
            ON Exception DO
            BEGIN
                Memo2.Lines.Add(chr(13)+'------IMPORTE NO NUMERICO-------');
                Memo2.Lines.Add('Registro No.: '+qryImportesNoNum.FieldByName('paso_pdf_id').AsString);
                Memo2.Lines.Add('Texto Importe: '+qryImportesNoNum.FieldByName('PASO_PDF_IMPORTE').AsString);
            END;
        end;
end;

El TRY debo ponerlo dentro del While??
Pues eso, me contesto solo.

Coloque el TRY dentro while...y ejecuta sin problema:

Aqui el código:

Código Delphi [-]
procedure TfrmPDF.Panel1Click(Sender: TObject);
var
   Importe_Flo : Real;
   Importe_Str : String;
begin
               //COPIAR IMPORTES NUMERICOS VALIDOS AL CAMPO paso_ing_importe
//        try
               qryImportesNoNum.Close;
               qryImportesNoNum.ParamByName('CT').AsString:=''+IntToStr(cbxCT.KeyValue)+'%';
               qryImportesNoNum.Open;
               qryImportesNoNum.Last;
               pBar3.Max:=qryImportesNoNum.RecordCount;
               qryImportesNoNum.First;

               While not(qryImportesNoNum.Eof) do
               begin
                  try
                     Importe_Str:=StringReplace(qryImportesNoNum.FieldByName('paso_pdf_importe').AsString,',','',[rfReplaceAll]);
                     StrToFloat(Importe_Str);
                     ShowMessage( Importe_Str);

                    { qryActImporte.Close;
                     qryActImporte.SQL.Clear;
                     qryActImporte.SQL.Add('UPDATE paso '+
                                            'SET paso_ing_importe=:importe '+
                                            'WHERE paso_pdf_id=:id');
                     qryActImporte.ParamByName('id').AsInteger:=qryImportesNoNum.FieldByName('PASO_PDF_ID').AsInteger;
                     qryActImporte.ParamByName('importe').AsFloat:=StrToFloat( StringReplace(qryImportesNoNum.FieldByName('paso_pdf_importe').AsString,',','',[rfReplaceAll]) );
                     qryActImporte.ExecSQL;}
                  except
                      ON Exception DO
                      BEGIN
                          Memo2.Lines.Add(chr(13)+'------IMPORTE NO NUMERICO-------');
                          Memo2.Lines.Add('Registro No.: '+qryImportesNoNum.FieldByName('paso_pdf_id').AsString);
                          Memo2.Lines.Add('Texto Importe: '+qryImportesNoNum.FieldByName('PASO_PDF_IMPORTE').AsString);
                      END;
                  end;

                  qryImportesNoNum.Next;
                  pBar3.Position:=pBar3.Position+1;

               end;
end;
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #8  
Antiguo 16-02-2023
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
¡Hola, mRoman!

El posible inconveniente (que no lo es del todo) es que manejas Delphi 6, en versiones mas recientes se tiene TryStrToFloat, la cual nos permite validar si el texto se puede convertir a un número. O también en versiones mas recientes puedes usar expresiones regulares para validar texto.
Si...gracias movorack. Si hay soluciones, en nuevas versiones tanto de Delphi como de Firebird, que me hacen considerar seriamente en ACTUALIZAR en lenguaje y el FB.

Gracias!.

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Convertir campos numeric o float en Integer Leopard2 Conexión con bases de datos 4 01-09-2014 19:51:05
Convertir String a Integer en consulta SQL Delphitest SQL 6 25-05-2010 19:36:20
convertir edit de string a float Kamael OOP 1 11-08-2007 03:33:23
Convertir un String a Integer Rafe Varios 2 12-08-2005 17:43:38
Como Convertir un dato Integer ó Float a String en FireBird???? AGAG4 Firebird e Interbase 8 04-12-2004 02:59:47


La franja horaria es GMT +2. Ahora son las 05:58:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi