Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Convertir campos numeric o float en Integer (https://www.clubdelphi.com/foros/showthread.php?t=86496)

Leopard2 21-08-2014 17:02:41

Convertir campos numeric o float en Integer
 
Hola, estoy migrando una aplicación que utiliza bases tipo DBF a Firebird 2.5 y necesito traspasar la información almacenada en los DBF a las nuevas tablas en firebird, hice una rutina para recorrer la base y grabar en la base de datos, con los campos String ningún problema pero tengo un problema con los campos numericos o Float para convertirlos a Integer, no hay una sentencia como es StrToInt para FloatToInt o RealToInt ?
Saludos

Al González 21-08-2014 17:13:29

Podrías usar Trunc (o también Round):
Código Delphi [-]
VariableEntero := Trunc (ValorFlotante);
O bien la propiedad AsInteger de los campos.

Sería bueno que mostraras un poco del código de esa rutina.

Una pregunta: ¿a qué se debe que desees convertir campos flotantes a enteros?

Leopard2 21-08-2014 18:51:48

Hola, gracias por la respuesta. te cuento, La tabla en DBf tiene definido el campo RUT como Numeric, Float es el otro formato en que lo puedo convertir para traspasar, pero es una alternativa.
La rutina es un ciclo con una tabla Prove (Dbf) en el Datamodulo MasterDb, que esta unida a través de un Alias al BDE para acceder y Proveedores es la tabla de firebird :

Código Delphi [-]
procedure TFSystem.Button1Click(Sender: TObject);
begin
  Masterdb.Prove.First;
  While not Masterdb.Prove.EOF do
   Begin
      with Masterdb.IBSQL2 do
       begin
         SQL.Clear;
         SQL.Add( 'INSERT INTO  PROVEEDORES' );
         SQL.Add( '( RUT, DV, EMPRESA, CONTACTO, DIRECCION, CIUDAD, FONO1, GIRO, EMAIL1, FORMAPAGO, WEB )' );
         SQL.Add( 'VALUES' );
         SQL.Add( '(:RUT,: DV,:EMP,:CON,: DIR,:CIU,:FON,:GIR, :EMA, :FOR, :WEB)' );
         ParambyName('RUT').AsInteger := Masterdb.ProveRUT.Value;
         ParambyName('DV').AsString := Masterdb.ProveDV.Value;
         ParambyName('EMP').AsString := Masterdb.ProveEMPRESA.Value;
         ParambyName('CON').AsString := Masterdb.ProveCONTACTO.Value;
         ParambyName('DIR').AsString := Masterdb.ProveDIRECCION.Value;
         ParambyName('CIU').AsString := Masterdb.ProveCIUDAD.Value;
         ParambyName('FON').AsString := Masterdb.ProveFONOS.Value;
         ParambyName('GIR').AsString := Masterdb.ProveGIRO.Value;
         ParambyName('EMA').AsString := Masterdb.ProveEMAIL.Value;
         ParambyName('FOR').AsString := Masterdb.ProvePAGO.Value;
         ParambyName('WEB').AsString := Masterdb.ProveWEB.Value;
         ExecQuery;
       end; // Whit
     Masterdb.prove.Next;
   End; // While
   Try
     Masterdb.IBTrsc.CommitRetaining;
     ShowMessage('! PROVEEDORES GRABADO CORRECTAMENTE !');
   Except
     Masterdb.IBTrsc.RollbackRetaining;
     ShowMessage('Se produjo un error y no se grabarón los datos de PROVEEDORES');
   end;
end;

Pd. no se si fue la mejor idea definir los campos como Integer en la nueva tabla de Firebird.

ecfisa 21-08-2014 23:42:18

Hola Leopard2.
Cita:

Empezado por Leopard2 (Mensaje 480219)
...La tabla en DBf tiene definido el campo RUT como Numeric,
...
Pd. no se si fue la mejor idea definir los campos como Integer en la nueva tabla de Firebird.

Por lo que pude leer aquí DBF Field Types and Specifications, creo que no. Pienso que en Firebird, tendrías que usar un tipo escalado, INTEGER o DECIMAL.

Si el tipo de dato es NUMERIC, la precisión es exactamente la declarada. Si el tipo de datos es DECIMAL la precisión es al menos igual a la declarada.

Para cambiar el tipo usa ALTER de forma similar a este ejemplo:
Código SQL [-]
ALTER TABLE PROVEEDORES ALTER COLUMN RUT TYPE NUMERIC(15, 3)
Respetando la escala y precisión que estaba definida en el campo RUT de la tabla DBF.

Saludos :)

grosadoj 01-09-2014 19:51:05

Estimado, para realizar una migracion lo optimo es que las dos bases de datos posean la misma estructura. Luego con un pequeño programa delhi puedes realizar la migracion de toda la informacion de la una base a la otra. Es necesario que los campos de las tablas tengan los mismos nombres en ambas bases.


La franja horaria es GMT +2. Ahora son las 04:57:45.

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