FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Extrayendo metadatos
Hola compis, tengo una duda no existencial, uso un codigo que circula por la red para extraer los campos de una tabla (para tener integrado un visor de bbdd en las aplicaciones).
Es el siguiente
En primer lugar deciros que no entiendo las funciones "coll" y "cset" ni poque ha veces usa "f" y otras "r" pero funciona, si me lo podeis explicar me haceis un favor. Y lo segundo es que no entiendo porque hace un case para obtener el tipo de datos si estos estan en la tabla RDB$TYPES, ¿no se podria hacer un left join o algo para sacar directamente el tipo de datos, es decir si el tipo es 14 entonces "TEXT" ya que ese datos esta en la tabla de tipos? Gracias de antemano. |
#2
|
||||
|
||||
Son alias, se usan cuando se hace referencia a más de una tabla, para que no haya problemas de saber a qué campo de qué tabla nos referimos, de esa manera puedes tener campos con el mismo nombre pero de tablas diferentes y estaría claro, ejemplo:
tabla empresas (id, nombre, telefono) tabla sucursales (id, id_empresa, nombre, telefono) Ejemplos:
En el primer caso, se ha usado el alias e para empresas y s para sucursales En el segundo caso, se ha usado el alias emp para empresas y suc para sucursales. Puedes usar el alias que quieras |
#3
|
||||
|
||||
Gracias "casimiro" entendido el tema de alias, entoces coll y cset tambien son alias de COLLATION Y CHARSET.
Por tanto r se refiere a RELATIONS y f a FIELDS, 't'a claro. ¿Y la segunda cuestion? ¿Como meter en el campo field_type el valor del campo RDB$TYPES_NAME de la tabla RDB$TYPES, es decir que en vez de tener un 8 (INTEGER) y hacerle el "case" que coja el nombre de la tabla RDB$TYPES? Sin haber estudiado, lo haria asi, mal, pero es para aclararme "busca en la tabla TYPES y mete en el campo field_type el valor del campo TYPE_NAME de la tabla TYPES segun el valor del campo FIELD_TYPE de la tabla FIELD" LEFT JOIN RDB$TYPES ON field_type = RDB$TYPES.RDB$TYPE_NAME = RDB$FIELDS.RDB$FIELD_TYPE No quiero (o si) que me resuelvas el codigo sino aprender a hacerlo. Gracias, |
#4
|
||||
|
||||
Si existe ese relación, entonces debe funcionar.
Aunque en varios sitios he visto que no se usa, no he investigado el motivo, mira este mensaje: |
#5
|
||||
|
||||
Gracias casimiro, ya habia visto codigos parecidos.
No soy experto en SQL pero igual que a ti me extraña que los codigos que circulan no usen esa relacion. ¿Un buen curso de SQL? Thanks |
#6
|
||||
|
||||
No sé, ya digo, no lo he mirado, aunque supongo que debe existir algún motivo.
|
#7
|
||||
|
||||
Dentro de mi breve experiencia en SQL, entiendo que un left join "añade" registros concatenando dos campos (uno de cada tabla), por ejemplo
select * from editoriales left join libros on editoriales.codigo=libros.codigoeditorial sacara los libros de la tabla editoriales cuyo editoriales.codigo sea igual a la libros.codigoeditorial Pero aqui lo que se busca es "sustituir" un campo de un tabla por el contenido de otro campo de otra tabla, se me ocurre hacerlo en dos pasos. Primero sacar los campos de RDB$FIELDS y despues recorrer el DataSet asignando el RDB$TYPES correspondiente. Digo esto porque si en un futuro o version de firebird cambia el tipo, al haberlo asignado mediante un case podemos tener un problema ¿no? |
#8
|
||||
|
||||
Ya te digo, no he mirado esa tabla, no tengo ni idea, tendría que investigar un poco y echarle un vistazo.
|
#9
|
||||
|
||||
Gracias casimiro por el tiempo dedicado, creo que tienes cosas mejores que hacer que mirar este tema, yo lo investigare y de paso aprendere mas sql, en cuanto encuentro una solucion lo publico.
Una vez mas agradezco infinitamente el tiempo que nos dedicas, deberiamos compensarte, a ti y al resto de los moderadores no se como, pero deberiamos. Thanks. |
#10
|
||||
|
||||
Gracias a ti, y cuéntanos lo que descubras
|
#11
|
||||
|
||||
Bueno, creo que se lo que pasa, tema resuelto.
Segun se ve en la tabla de tipos, digamos, que no esta todo lo precisa que se necesita. He realizado una segunda pasada para incluir los nombres de los tipos y no queda como quisieramos, hay que hacer el CASE "en linea" como hace todo el mundo (o el primero que empezo, jejeje) En esta imagen se ve la aplicacion que muestra los campos de las tablas usando la funcion que nos ocupa (osea, funciona) En esta imagen se ven los tipos de datos en la tabla RDB$TYPES He "Adecentado" o mejor dicho simplificado y adecuado el codigo para tener todos los campos de una tabla y sus caracteristicas. Dejo toda la funcion completa ya que despues hay que sacar los indices y los campos que corresponden a los indices. Este codigo es totalmente funcional, evidentemente el formulario y las grillas las pone cada usuario Casimiro, puedes usarlo cuando quieras, jejeje
Tema cerrado. Última edición por cesarsoftware fecha: 26-11-2012 a las 20:29:46. |
#12
|
||||
|
||||
Entonces no era tan complicado ni tenía misterios ocultos, sólo hacía falta ponerse un rato con ello para entender el motivo
Gracias por compartirlo. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
¿Cómo versionar el esquema o los metadatos de base de datos? | erasmo_ga | Firebird e Interbase | 4 | 08-12-2011 03:08:05 |
Problema extrayendo campo imagen de una tabla access | JoysticK | Gráficos | 8 | 08-08-2008 03:00:07 |
Extraer metadatos de archivos DBF | DobleSiete | SQL | 9 | 25-01-2005 15:59:07 |
Extraer metadatos | RONPABLO | Firebird e Interbase | 2 | 22-10-2004 20:04:56 |
|