SQL, Nombres De Campo


Objetivo: SQL, Nombres De Campo
A veces creo que soy friki de más. Envío mensajes a la lista de gambas que nadie contesta y uno se pregunta ¿Es que a nadie le pasa lo que a mí?¿Es que soy tan tonto que las preguntas son tan obvias que las dan por contestadas?¿O es que soy tan friki que hago lo que nadie hace?

No sé, pero os traslado aquí la última pregunta que subí a la lista a ver si alguno puede darme una pista:

Cuando hago una consulta a la base de datos usando el método .exec de la conexión, a veces me responde poniendo a los nombres de los campos del resultfield el nombre del campo, como debe ser, o a veces me responde asignando al resultfield el formato nombre_de_tabla.nombre_de_campo.
Siempre he creído que esa referencia jerárquica de tabla.campo se utilizaba para "desambiguar" (toma palabrota) los campos cuando hay posibilidad de confusión, es decir si hago una consulta relacionando a dos tablas y las dos tienen un campo que se llama "fecha", pues añadiendo el nombre de la tabla delante, todo arreglado. Pero no es así.
En estos días estoy trasteando mucho con unos controles propios que manejan consultas y ordenaciones etc y esto me está crispando los nervios. Voy a tener que cambiar todas las rutinas para guiarme por el número de orden del campo en el Result.Fields en lugar de por el nombre, como me decía la razón.

¿A alguien le ha pasado esto? ¿Alguien sabe cómo conseguir que te devuelvan o siempre el nombre de campo sólo o siempre el tabla.campo, pero no "aleatoriamente"?
Venga, que a veces se siente uno muy solo frente a la pantallica....

Perfil MP  
Objetivo: Re: SQL, Nombres De Campo
Shordi:
Citar:

Voy a tener que cambiar todas las rutinas para guiarme por el número de orden del campo en el Result.Fields en lugar de por el nombre, como me decía la razón

Que extraño, ¿y si usas sentecias de sql con alias?

Osea
Select tabla1.id as "IdT1", tabla2.id as "IdT2" from tabla1, tabla2

Objetivo: Re: SQL, Nombres De Campo
Citar:
que extraño, ¿y si usas sentecias de sql con alias?


Sí y la respuesta es entonces o el alias o tabla.alias indiscriminadamente.

Sin embargo con phpmyadmin funciona perfectamente...

última edición por shordi el Martes, 14 Octobre 2014, 09:35; editado 1 vez
Perfil MP  
Objetivo: Re: SQL, Nombres De Campo
Me autorespondo: Utilizando el gestor de base de datos de gambas, es decir, creando una conexión almacenada y repitiendo las consultas, veo que siempre añade el nombre de tabla, salvo cuando se usan funciones de mysql (concat, date_format, etc.)
Eso me da una pista, pero antes no era así. Aunque no me contesten y, supongo, perjuren que siempre ha sido así, a mí me ha empezado a fallar ahora...

Modificaré los controles según eso y ya veremos si no me cuelgan por los pies los clientes...

Perfil MP  
Objetivo: Re: SQL, Nombres De Campo
Me vuelvo a responder: Si sólo mencionas campos, devuelve sólo los nombres de campos, si mencionas alguna función de mysql entre la lista de campos, aunque le pongas un alias, entonces añade el nombre de la tabla.

Esto es un lío de cojones. Con eso no hay manera de hacer una rutina que procese bien las consultas sql.

Perfil MP  
Objetivo: Re: SQL, Nombres De Campo
Benoit me lo da como el comportamiento esperado, sin serlo. Sostiene lo que yo creía, que el nombre de tabla se añade cuando hay varias tablas en la consulta para la desambiguación, pero "El problema es que no siempre es necesario".
Con eso y un bizcocho hasta mañana a las ocho.

Saludos.

Perfil MP  
Objetivo: Re: SQL, Nombres De Campo
Hola Shordi, a lo mejor digo una tontería, pero se me ocurre que haciendo un pequeño esfuerzo a lo bruto, yo pondría una función que hiciera un split al resultado dividiendo la cadena por el punto (.). Si esa la salida del split.count tiene uno es el campo y si tiene 2 el primero es la tabla y el segundo el campo. Por tanto, si quieres solo el campo la función te ha de devolver el elemento String[].count - 1.

Vuelvo a decir que solo es una idea, no lo he probado pero uso mucho esa técnica en los Tag de TextBox para representar los campos y soluciona.

Un saludo amigos.....

Antonio

Perfil MP  
Objetivo: Re: SQL, Nombres De Campo
ahtonio:

Evidentemente eso funcionaría... (si no hay puntos en los nombres de campo, etc. etc.), pero para lo que yo quería no me valía.

El tema es que construía un Gridview, en el que cada columna es un campo de la consulta y el título de la columna es el nombre del campo tal como estaba definido en la consulta, es decir:

Si yo baso el gridview en esta consulta:

Select nombre as "Nombre", dni as "D.N.I." from personas


el Gridview tendrá la columna "Nombre" y la columna "D.N.I.", pero el result que produce esa consulta tendrá el campo `personas`.`Nombre` y `personas`.`D.N.I.`, lo cual es un follón a la hora de ordenarlas.

Peor aún, si la consulta es

Select trim(nombre) as `Nombre`, dni as `D.N.I.` from personas


el result tendrá el campo `Nombre` (sin el nombre de la tabla) y el campo `personas`.`D.N.I.` (con el nombre de la tabla), lo que lo hace aún más enrevesado.

¿Solución? basar el tema en la posición que ocupa cada columna y no en el nombre.... Un follón, vamos.

Saludos.

última edición por shordi el Martes, 28 Octobre 2014, 12:32; editado 1 vez
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.122s (PHP: -29% SQL: 129%)
Consultas SQL: 25 - Debug off - GZIP Activado