Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¿Cómo averiguar el tamaño de un tipo de dato? (https://www.clubdelphi.com/foros/showthread.php?t=10492)

taote 20-05-2004 18:44:21

¿Cómo averiguar el tamaño de un tipo de dato?
 
Hola:

¿Existe alguna manera de conocer el tamaño del tipo de dato de un campo o de un dominio mediante SQL en un procedimiento almacenado?. Por ejemplo si el campo es de tipo VARCHAR(20) pues que me devuelva 20.

Un saludo.

delphi.com.ar 20-05-2004 18:47:47

¿En qué motor/base de datos?

taote 20-05-2004 18:49:01

Hola:

Es con Firebird 1.5

jachguate 21-05-2004 08:13:49

Podes consultar el diccionario de datos. La tabla rdb$relation_fields tiene la información refernete al tipo de dato, su precisión y escala (en el caso de datos numéricos) y su longitud (en el caso de char y varhchar).

Hasta luego.

;)

taote 21-05-2004 09:22:56

Gracias por la respuesta. Es lo que estaba buscando :cool:

No sabía donde se guardaba toda esa información, además a raíz de eso ya he visto como poder visualizarlas en el IBExpert.

A partir de un ejemplo que he visto en Internet he creado el siguiente procedimiento, que me da el tipo y el tamaño:


Código PHP:

CREATE PROCEDURE DATOSCAMPO (
    
TABLA CHAR (31),
    
CAMPO CHAR (31))
RETURNS (
    
TIPO VARCHAR (31),
    
LONGITUD INTEGER)
AS
BEGIN
  SELECT T
.rdb$type_name,F.rdb$field_length
  FROM rdb$fields F
       inner join rdb$relation_fields R on 
(F.rdb$field_name=R.rdb$field_source)
       
inner join rdb$types T on (T.rdb$type=F.rdb$field_type and T.rdb$field_name='RDB$FIELD_TYPE')
  
WHERE R.rdb$RELATION_NAME=:TABLA AND
        
R.rdb$field_name=:CAMPO
  INTO TIPO
LONGITUD;

END 


Guillermosalva 12-04-2007 20:54:40

y desde delphi se puede conocer el tamaño del dato?

egostar 13-04-2007 02:14:15

Cita:

Empezado por Guillermosalva
y desde delphi se puede conocer el tamaño del dato?

Si se puede, usando la propiedad DisplayWidth, algo así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   Edit1.Text := inttostr(IBTable1.FieldByName('Campo').DisplayWidth);
end;

Salud OS.

Guillermosalva 13-04-2007 18:49:44

Gracias por responder, la propiedad DisplayWidth me fue muy util con los string pero no me funciono con los float o integer...
existe alguna forma de saber el tamaño de cualquier campo?

Lepe 13-04-2007 20:53:38

Ve pensando en explicar mejor lo que necesitas y lo que quieres obtener.

Un tipo de campo integer no tiene tamaño, porque el tamaño es fijo, dependiendo de si es smallint, integer, biginteger, etc.

Una cosa es obtener el tamaño del campo (de la estructura de la tabla) y otra muy distinta obtener el número de caracteres que tiene un registro en un campo determinado.

Saludos

Guillermosalva 13-04-2007 21:55:11

gracias por la respuesta y sugerencia...
Mi problema es que tengo mi tabla por ej.
los campos y tipo de dato:
campo1 varchar(5)
campo2 number (2)
campo3 number(15)
campo4 number(15,4)

y quiero saber desde delphi por ej: el tamaño del campo3 (en este caso de 15)

Aclaro que estoy trabajando con bases de oracle....

Lepe 14-04-2007 12:10:20

Según creas los tipos de datos en Firebird, éste los convierte según el dialecto, precisión y escala elegidos, y lo almacena internamente con estos tipos:

Tabla de sistema RDB$TYPE:
Código:

RDB$TYPE        RDB$TYPE_NAME
7                SHORT
8                LONG
9                QUAD
10                FLOAT
27                DOUBLE
35                TIMESTAMP
37                VARYING
12                DATE
13                TIME
16                INT64

Después, al crear los campos en delphi, según ese tipo de datos, se convierte al homólogo en delphi.

Oracle no sé como trabajará, pero muy posiblemente haga también algunos "ajustes" con los tipos de campo.

Saludos

jachguate 16-05-2007 20:45:51

Vuelvo a lo dicho originalmente: La respuesta está en el diccionario de datos.

En el caso particular de oracle, podes encontrar dicha información en la vista all_tab_columns: DATA_LENGTH, DATA_PRECISION, DATA_SCALE

Claro.. si se trata del campo de una tabla... si es de una vista, la cosa varía..

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 12:17:05.

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