Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
Delphius Va camino a la fama
Por seguridad lo que yo haría es:

OPCIONAL: Creo un segundo dominio con el tipo adecuado
1) Creo un nuevo campo con el tipo/dominio adecuado
2) Vuelco los datos desde el campo viejo al nuevo
3) Elimino campo y/o dominio viejos
4) Renombro el nuevo campo como el viejo

Naturalmente en el aplicativo habrá que hacer retoques para que asimile el nuevo Size y visualice correctamente los decimales.

No se si es realmente innecesario hacer esto de crear, volcar, eliminar pero yo lo veo más seguro así... Naturalmente es tedioso hacer esto en cada tabla.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 10-02-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Pienso igual que Delphius, aunque es precisamente ese engorro lo que se quiere evitar marcoszorrilla. Pero ese es seguramente el inconveniente de usar numeric, que aunque cambie el dominio a tres decimales, los datos quedarán con dos. Cosa que no ocurre, obviamente, con los double.
Yo estoy usando los numeric por primera vez, como dije antes, porque es un programa de contabilidad donde sólo pueden ir 2 decimales de la moneda, no es necesario para nada más decimales, pero para cualquier otra información numérica siempre uso el double, aunque se podría usar el numeric con 5 decimales, por ejemplo, en fin, dependerá de las exigencias de cada caso.
A la pregunta de Román, no se puede eliminar un dominio que se está usando.
Responder Con Cita
  #3  
Antiguo 10-02-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Gracias por las opiniones, la semana que viene tengo previsto empezar los cambios, ya os contaré el resultado.

Es evidente que el tercer decimal será un 0, pero es que se piensan utilizar precios con tres decimales a partir de ahora.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 10-02-2012 a las 22:01:47.
Responder Con Cita
  #4  
Antiguo 11-02-2012
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 20
Gallosuarez Va por buen camino
Talking Posible solución ...

Marcoszorrilla:

Lo puedes hacer como lo comenta Delphius, o la otra opción que tienes es como lo estabas haciendo en un principio (es decir, cambiando el dominio), solamente que te faltó hacer un último paso: una vez cambiado el dominio debes de hacer un ciclo de "backup/restore" a tu base de datos.

Saludos,
GST

PD. Espero que te sea de utilidad... y no dejes de publicar tu solución ... saludos nuevamente...
Responder Con Cita
  #5  
Antiguo 11-02-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Marcos, con esta vista (probada en Firebird 1.5) podrás ubicar rápidamente todos los campos que habrán de ser cambiados:

Código SQL [-]
CREATE VIEW VWCAMPOS(
    TABLA,
    CAMPO,
    POSICION,
    DESCRIPCION,
    TIPO,
    TAMAO,
    DECIMALES,
    PERMITENULOS)
AS
/* Vista para listar todos los campos de nuestra base de datos */

Select

RF.RDB$Relation_Name,  /* Nombre de la tabla/vista */
RF.RDB$Field_Name,  /* Nombre del campo */
RF.RDB$Field_Position,  /* Posición del campo */
RF.RDB$Description,  /* Descripción del campo */

/* Tipo concreto */
Case F.RDB$Field_Type
  When 261 /* BLOb */ Then
    Case F.RDB$Field_Sub_Type
      When 1 Then 'Texto BLOb'
      Else 'BLOb'
    End
  When 14 Then 'Texto Char'
  When 40 Then 'Texto CString'
  When 11 Then 'Numérico D_Float'
  When 27 Then 'Numérico Double'
  When 10 Then 'Numérico Float'
  When 16 /* Int64 */ Then
    Case F.RDB$Field_Sub_Type
      When 1 Then 'Numérico'
      When 2 Then 'Decimal'
      Else 'Entero Int64'
    End
  When 8 /* Integer */ Then
    Case F.RDB$Field_Sub_Type
      When 1 Then 'Numérico'
      When 2 Then 'Decimal'
      Else 'Entero Integer'
    End
  When 9 Then 'Quad'
  When 7 /* SmallInt */ Then
    Case F.RDB$Field_Sub_Type
      When 1 Then 'Numérico'
      When 2 Then 'Decimal'
      Else 'Entero SmallInt'
    End
  When 12 Then 'Fecha Date'
  When 13 Then 'Hora Time'
  When 35 Then 'Fecha y hora TimeStamp'
  When 37 Then 'Texto Varchar'
End,

/* Tamaño (sólo para Char, VarChar y flotantes) */
Case F.RDB$Field_Type
  When 14 /* Char */ Then F.RDB$Field_Length
  When 11 /* D_Float */ Then F.RDB$Field_Precision
  When 27 /* Double */ Then F.RDB$Field_Precision
  When 10 /* Float */ Then F.RDB$Field_Precision
  When 16 /* Int64 */ Then
    Case F.RDB$Field_Sub_Type
      When 1 /* Numeric */ Then F.RDB$Field_Precision
      When 2 /* Decimal */ Then F.RDB$Field_Precision
    End
  When 8 /* Integer */ Then
    Case F.RDB$Field_Sub_Type
      When 1 /* Numeric */ Then F.RDB$Field_Precision
      When 2 /* Decimal */ Then F.RDB$Field_Precision
    End
  When 7 /* SmallInt */ Then
    Case F.RDB$Field_Sub_Type
      When 1 /* Numeric */ Then F.RDB$Field_Precision
      When 2 /* Decimal */ Then F.RDB$Field_Precision
    End
  When 37 /* VarChar */ Then F.RDB$Character_Length
End,

/* Decimales */
Case F.RDB$Field_Scale
  When 0 Then Null
  Else Cast (F.RDB$Field_Scale * -1 As SmallInt)
End,

/* Permite o no valores nulos */
Case RF.RDB$Null_Flag
  When 1 Then 'No'
  Else 'Si'
End

From RDB$Relation_Fields RF

/* La información de campos está distribuida en las tablas
RDB$Relation_Fields y RDB$Fields */
Left Join RDB$Fields F On RF.RDB$Field_Source = F.RDB$Field_Name

/* No incluir tablas del sistema */
Where RF.RDB$System_Flag = 0
;

Si no resulta ser una cantidad excesiva de campos, creo que cambiarlos manualmente en IBExpert, como ya lo has hecho con uno de ellos, no es mala alternativa. De lo contrario, podrías implementar una macroinstrucción (script) que lleve a cabo estos cambios dentro de un ciclo (puede que sea necesario tratar con las tablas del sistema).

En cuanto a la propiedad Size de los objetos campos en Delphi, efectivamente, los que son de tipo (DataType) ftBCD y ftFMTBCD (este último generalmente corresponde al tipo Numeric de Firebird) usan dicha propiedad para indicar el número de dígitos a la derecha del separador decimal.

Espero que no te sea difícil solucionarlo, pero estaré pendiente de ello como los demás.

Un abrazo.

Al.
Responder Con Cita
  #6  
Antiguo 11-02-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Eso sí que es una respuesta bien trabajada, Al
Responder Con Cita
  #7  
Antiguo 11-02-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Muchas gracias Al, esta semana que entra probablemente el miércoles me meta de lleno con ello.

Gracias por la aportación como siempre acertada y constructiva.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
¿cómo aumentar el número de factura en una base de datos paradox ? Master23 Varios 2 09-04-2010 00:42:26
Campo numeric sql server amerika111 Varios 1 30-12-2009 10:26:21
Aumentar Decimales RUBI MADELIN OOP 4 23-07-2007 19:35:39
Problama con campo NUMERIC(15,2) El_Raso SQL 7 11-02-2007 10:58:16


La franja horaria es GMT +2. Ahora son las 08:54:31.


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