Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   Obtener Propiedades de un Campo en PostgreSQL (https://www.clubdelphi.com/foros/showthread.php?t=86783)

rmendoza83 02-10-2014 23:10:31

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.

gatosoft 04-10-2014 06:16:07

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'

rmendoza83 05-10-2014 16:04:41

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


La franja horaria es GMT +2. Ahora son las 14:44: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