Recorrer Campos De Una Tabla [Solucionado]


Objetivo: Recorrer Campos De Una Tabla [Solucionado]
Hola a todos, estoy haciendo pruebas con gambas y me he encontrado con problemas para recorrer los campos de una tabla, al final lo que he tenido que hacer es:

PUBLIC FUNCTION LlenarCampos(strTabla AS String) AS Boolean

DIM tabla AS Variant, campo AS Variant

lstCampos.Clear
IF hConn.Tables.Exist(strTabla) = TRUE THEN
FOR EACH tabla IN hConn.Tables 'aquí está, tengo que reccorer todas las tablas hasta dar con la buscada.
IF tabla.name = strTabla THEN
FOR EACH campo IN tabla.fields
lstCampos.Add(campo.name & "[" & CStr(campo.type) & "]")
NEXT
ENDIF
NEXT
ELSE
Message("La tabla " & strTabla & " no existe.")
ENDIF
RETURN TRUE
END


no tengo manera de hacer
mitabla = hconn.tables["nombretabla"]
ni nada que se le parezca, he probado con variants, con colecciones, accediendo por nombre y nada.
Alguien me puede ayudar en esto?
Por cierto uso la versión 2.13, que es la que viene en ubuntu y no me atrevo a actualizar yo solito...

saludos!

última edición por maikl el Sabado, 31 Octobre 2009, 01:21; editado 1 vez
Perfil MP  
Objetivo: Re: Recorrer Campos De Una Tabla
Lo que tienes que hacer es recorrer la colección de tablas

Tienes un ejemplo aquí
La clase connection

PUBLIC FUNCTION LlenarCampos(strTabla AS String) AS Boolean

DIM tabla AS table, Campo as tablefields

lstCampos.Clear
IF hConn.Tables.Exist(strTabla) = TRUE THEN
FOR EACH tabla IN hConn.Tables 'aquí está, tengo que reccorer todas las tablas hasta dar con la buscada.
IF tabla.name = strTabla THEN
FOR EACH campo IN tabla.fields (o bien for each campo in hconn.tables.fields)
lstCampos.Add(campo.name & "[" & CStr(campo.type) & "]")
NEXT
ENDIF
NEXT
ELSE
Message("La tabla " & strTabla & " no existe.")
ENDIF
RETURN TRUE
END


Conviene que leas el post de la clase connection porque explica muchas de estas cosillas.

Perfil MP  
Objetivo: Re: Recorrer Campos De Una Tabla
Lo estuve mirando pero lo que encontré no me funcionó, hay tipos de datos que no puedo definir y me temo que ya se porque, tengo la versión 2.1.13, puede ser que en esta versión el tema de db no esté muy acabado?
No se, pensaba que un cambio de 2.1.13 a 2.1.16 no tendria modificaciones tan "grandes" y que siendo una versión tan "alta" esto del trabajo con bd ya estaria superado.
Pero es que me da miedo compilar la versión nueva... Además voy con la nueva de ubuntu que aún no es oficial y no hay aún instrucciones de compilación.
A ver si sale la nueva versión en el repositorio o unas instrucciones actualizadas.
Saludos y muchas gracias por la respuesta.
Maikl

Perfil MP  
Objetivo: Re: Recorrer Campos De Una Tabla
Yo no tengo la versión nueva. Trabajo con 2.7 y me funciona parfectamente.

La idea básica es que si cada elemento que lees de un bucle for each es del tipo adecuado puedes acceder a todas las propiedades del objeto.

Por ejemplo si estás recorriendo una colección de tablas pues que el objeto sea de tipo table y si estás recorriendo una colección de capos pues que el objeto sea de tipo tablefields. Pues aplicar eso mismo a indexes o cualquier otro objeto que sea enumerable.

Perfil MP  
Objetivo: Re: Recorrer Campos De Una Tabla
si si, correcto, pero yo no quiero recorrer la colección, eso es lo que hago para buscar la tabla solicitada, pero lo que quiero es acceder a una tabla en concreto.
El código que he puesto me funciona correctamente, pero verás que estoy recorriendo todas las tablas para obtener la quiero, y esto no me parece muy "lógico". Lo normal seria acceder a la tabla con algo como:
tabla = hConn.Tables["Clientes"]

Saludos

Perfil MP  
Objetivo: Re: Recorrer Campos De Una Tabla
Hola a todos, después de mis peripecias con la compilación de la nueva versión de gambas (2.17) he conseguido que funcione de maner lógica

PUBLIC FUNCTION LlenarCampos(strTabla AS String) AS Boolean

DIM tabla AS Table, campo AS Field

lstCampos.Clear
IF hConn.Tables.Exist(strTabla) = TRUE THEN
tabla = hConn.Tables[strTabla] '<--- aquí está lo que queria conseguir y con la versión antigua no me dejaba
' FOR EACH tabla IN hConn.Tables <--- Ya no hace falta recorrer en busca de la tabla
'IF tabla.name = strTabla THEN <--- Ni pizca de falta jeje
FOR EACH campo IN tabla.fields
lstCampos.Add(campo.name & "[" & CStr(campo.type) & "]")
NEXT
'ENDIF
'NEXT
ELSE
Message("La tabla " & strTabla & " no existe.")
ENDIF
RETURN TRUE

END


Saludos!

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1038s (PHP: -26% SQL: 126%)
Consultas SQL: 24 - Debug off - GZIP Activado