Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-05-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Poder: 0
taote Va por buen camino
Question ¿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.
Responder Con Cita
  #2  
Antiguo 20-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿En qué motor/base de datos?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 20-05-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Poder: 0
taote Va por buen camino
Hola:

Es con Firebird 1.5
Responder Con Cita
  #4  
Antiguo 21-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 21-05-2004
taote taote is offline
Miembro
 
Registrado: feb 2004
Posts: 23
Poder: 0
taote Va por buen camino
Wink

Gracias por la respuesta. Es lo que estaba buscando

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 
Responder Con Cita
  #6  
Antiguo 12-04-2007
Guillermosalva Guillermosalva is offline
Miembro
 
Registrado: oct 2006
Posts: 11
Poder: 0
Guillermosalva Va por buen camino
y desde delphi se puede conocer el tamaño del dato?
Responder Con Cita
  #7  
Antiguo 13-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
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.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 13-04-2007
Guillermosalva Guillermosalva is offline
Miembro
 
Registrado: oct 2006
Posts: 11
Poder: 0
Guillermosalva Va por buen camino
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?
Responder Con Cita
  #9  
Antiguo 13-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 13-04-2007
Guillermosalva Guillermosalva is offline
Miembro
 
Registrado: oct 2006
Posts: 11
Poder: 0
Guillermosalva Va por buen camino
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....
Responder Con Cita
  #11  
Antiguo 14-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 16-05-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 10:23:01.


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