Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
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 03-10-2014
rmendoza83 rmendoza83 is offline
Miembro
 
Registrado: ago 2006
Posts: 50
Poder: 18
rmendoza83 Va por buen camino
Obtener Propiedades de un Campo en PostgreSQL

Buenas Tardes amigos, les comento mi problema, estoy desarrollando una rutina que basicamente lo que debe hacer es generar el script sql para crear una tabla (Script CREATE TABLE) mediante un Dataset. En especifico es para los campos de tipo DECIMAL o NUMERIC que especifican la precision de los campos (Numero de Digitos Enteros y Numero de Digitos Decimales) que no logro la manera de obtener los mismos. Evaluando el enumerado Fielddefs del Componente Dataset veo un campo llamado Precision que para los campos enteros muestra la capacidad en bytes del tipo de datos y 0 (cero) para tipos de datos Fecha Hora y Cadenas pero para los campos tipo NUMERIC me muestra una cantidad exagerada que no entiendo que se refiere. Muestro un ejemplo de mis pruebas:

Script desde PgAdmin para base de datos Postgres

Código SQL [-]
CREATE TABLE data.saf_lineas
(
  codigo character varying(20) NOT NULL,
  descripcion character varying(80) NOT NULL,
  va integer NOT NULL,
  vb integer NOT NULL,
  vc integer NOT NULL,
  ia integer NOT NULL,
  ib integer NOT NULL,
  ic integer NOT NULL,
  resistencia_cero numeric(18,4) NOT NULL,
  resistencia_positiva numeric(18,4) NOT NULL,
  reactancia_cero numeric(18,4) NOT NULL,
  reactancia_positiva numeric(18,4) NOT NULL,
  susceptancia_cero numeric(18,4) NOT NULL,
  susceptancia_positiva numeric(18,4) NOT NULL,
  modulo_ko numeric(18,10) NOT NULL,
  angulo_ko numeric(18,10) NOT NULL
);


por ejemplo para el campo resistencia_cero me muestra un valor de 1179652 para el campo Precision del FieldDefs y para el campo modulo_ko me muestra un valor de 1179658.

Sera que algun buen samaritano de ustedes puede ayudarme a obtener esta informacion para estos campos o alguna explicacion de estos valores que arroja la propiedad Precision?

Saludos y agradecido con cualquier ayuda que me puedan prestar.

Última edición por rmendoza83 fecha: 03-10-2014 a las 00:13:33.
Responder Con Cita
  #2  
Antiguo 04-10-2014
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Buen día amigo... Como por entender:

¿Lo que quieres hacer es leer una tabla de la base de datos que se carga en un dataset y a partir de ella generas el script de creación? ==> Si es asi, te recomiedo que vayas directamente al catalogo de la bd y consultes esa información... no hagas el paso intermedio de cargarlo en el dataset, pues los tipos de datos que delphi define en sus Tfields son genericos y se adaptan o se aproximan a lo que les envia cada motor.

Intenta:

Código SQL [-]
SELECT a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod)
FROM pg_catalog.pg_attribute a
WHERE a.attrelid = (SELECT pg_class.oid
                    FROM pg_class INNER JOIN pg_namespace
                       ON (pg_class.relnamespace = pg_namespace.oid
                           AND lower(pg_namespace.nspname) = 'public')
                   WHERE pg_class.relname='NombreTabla')
  AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum;

o mas resumido:

Código SQL [-]
select * from information_schema.columns where table_name ='NombreTabla'

Última edición por gatosoft fecha: 04-10-2014 a las 07:16:45. Razón: NombreTabla
Responder Con Cita
  #3  
Antiguo 05-10-2014
rmendoza83 rmendoza83 is offline
Miembro
 
Registrado: ago 2006
Posts: 50
Poder: 18
rmendoza83 Va por buen camino
Hola Gato! Gracias por tu respuesta! tu consejo me sirve de mucho para resolver el problema! Ahora bien esta solución solo me sirve para postgreSQL! Y pues la tarea que tengo es básicamente crear una base de datos local y que pueda ser portable! Escogí firebird para la base de datos portable y la librería portable (fbembed) y la base de datos original es postgresql!

Como te decía probablemente para esta asignación pueda resolverlo con la solucion que me das, pero suponiendo que quiera hacer una aplicación para importar/exportar o migrar o clonar base de datos de unas a otras creo que seria algo mas dinámico resolviéndolo desde delphi y las componentes de zeos.

Si sabes de una manera obtener la precisión de los campos numéricos tendría todo solucionado.

Saludos
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
obtener propiedades de component padre Caroso Varios 1 17-09-2013 09:18:39
¿como obtener folios consecutivos mysql firebird postgresql? JXJ Varios 4 23-07-2013 21:55:50
Problema con reporte y campo money de postgresql DSK25 Impresión 2 15-10-2012 23:12:35
Obtener propiedades de EXE.. n3mohack API de Windows 18 27-09-2012 07:42:50
Obtener propiedades de una unidad de Cd seoane Trucos 0 10-01-2007 16:17:02


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


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