Autor Tema: MySql - Buscar nombre de columna  (Leído 13565 veces)

lucas1234

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
MySql - Buscar nombre de columna
« en: 25 de Marzo 2014, 07:28 »
Buenos dias

Probablemente la forma q elegí hacerlo es la incorrecta

Tengo una tabla con 24 columnas que tienen la fecha(03-2014 otra 04-2014 otra 05-2014) de los 2 años siguientes, y tb otras columnas

Declaro una variable que guarda la fecha de hoy y la formateo para que quede igual que el nombre de las columnas(ejem 03-2014)

My problema es que cuando en visual le doy el comando sql para q busque en la base de datos... no me hace caso

He probado de estas maneras:

SELECT lectura_nombre, ('03-2019') from lectura; probado desde mysql directamente devuelve una columna llamada 03-2019, pero esa columna no existe. Y en cada campo coloca 03-2019

SELECT lectura_nombre, ("03-2019") from lectura; probado desde mysql directamente devuelve una columna llamada 03-2019, pero esa columna no existe. Y en cada campo coloca 03-2019

SELECT lectura_nombre, enero-2014 from lectura; error, de hecho la columna se llama 01-2014, obvio que da error SELECT lectura_nombre, 03-2019 from lectura; probado desde mysql directamente devuelve una columna llamada 03-2019 y en cada campo coloca -2016 y si cambio la fecha a 03-2014 me da -2011 en cada campo

SELECT lectura_nombre FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = lectura; error show columns from lectura; en la primer columna del resultado me da el nombre de cada columna de la tabla lectura y en las otras Type, Null, Key

select * from lectura where column_name = ("lectura_direccion"); error

SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA LIKE "prueba1" AND TABLE_NAME = "lectura" ; me devuelve solo una columna y en cada renglon todas los nombres de las columnas

SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME = "lectura" ; lo mismo q en la anterior select * from lectura where lectura.lectura_barrio = "Villa mazini"; todos los renglones en que la columna lectura_barrio tiene "Villa mazini"

Je, no van a decir q no lo intenté

La idea es que a la variable _tiempo (Dim _tiempo As Object = Date.Now.ToString("MM-yyyy")) le reste uno, para ir al mes anterior al actual. Y luego busque los nombres de las columnas y cuando coincida, muestre esa columna

Lo que sí logro hacer, es usar la variable con el insert, ejem

UPDATE lectura SET fecha_eliminacion = ('" + _tiempo + "') where idusuarios = ('" + Label_id.Text + "')

Cambiar el diseño de la tabla lo he pensado, pero también filtro por filas porque cada fila es un usuario diferente

La otra q se me ocurrió era recorrer toda la tabla en la datatable de un datagrid y buscarla en la datatable cuando coincida con la variable _tiempo menos 1. Pero ni idea de cómo hacerlo

Tal ves yo me enrededé para verlo de este ángulo y tomándolo por otro sea mejor.

Espero haberme explicado bien Saludos

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #1 en: 25 de Marzo 2014, 08:50 »
Hola, lo que indicas:

"Tengo una tabla con 24 columnas que tienen la fecha(03-2014 otra 04-2014 otra 05-2014) de los 2 años siguientes, y tb otras columnas"

Esto parece que está mal diseñado, al menos las fechas siempre se trabajan en las aplicaciones como datos, no como nombre de columnas. Es decir, lo lógico es que tengas una tabla donde una columna se llame "Fecha" y dentro de esa tabla tengas filas donde cada fila lleve los datos que le corresponden y la fecha que le corresponde.

Por ejemplo si quieres guardar la fecha en que te llamó una persona por teléfono tendrías una tabla cuyas columnas serían:

idPersona     NombrePersona       FechaLlamo


Ahora supón que una persona te llamó en febrero de 2010 y esa misma persona te llamó en marzo de 2013, tendrías dos filas con estos datos:

idPersona     NombrePersona       FechaLlamo
87                 Hugo Perez              02-2010
87                 Hugo Perez              03-2013

No sé exactamente la información que quieres guardar, pero tienes que pensar en una forma de diseño adecuada para tu caso. Saludos.

lucas1234

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #2 en: 25 de Marzo 2014, 09:03 »
Buen día Alex. Sí, lo que dices tienes toda la razón, pensé en re-plantearla a mi tabla pero no veo la forma
La idea de la tabla es, por ejemplo, decir cuantos artículos compró una persona en un mes X. Por eso en esa tabla cada fila es un usuario distinto, y (entre otras) en cada columna hay un mes diferente
Los usuarios en cada fila me queda cómo para otras cosultas que hago a la tabla
No sé, tal ves (dándoles la utilizacíon que le doy a mi tabla) puedan darme una idea de cómo re-plantearla o sino ver lo de buscar por columna

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #3 en: 25 de Marzo 2014, 09:35 »
Según indicas: "La idea de la tabla es, por ejemplo, decir cuantos artículos compró una persona en un mes X"

La tabla se plantearía así: cuatro columnas al menos

id, idPersona, NombrePersona, Mes, ArticulosComprados

Cada fila representa lo que ha comprado una persona en un mes x, por ejemplo:

id, idPersona, NombrePersona, Mes, ArticulosComprados

1      38               Hugo Perez      03-2014         2
2      22               Pedro Suarez   03-2014         8
3      38               Hugo Perez      02-2011         12

Aquí tenemos el nombre de persona, el mes y los artículos comprados (esto es un ejemplo)




lucas1234

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #4 en: 25 de Marzo 2014, 10:08 »
Mmmm, no se ma había ocurrido
A ver, voy a lo real de mi proyecto
Es para gestionar la energía eléctrica en un pueblo
en mi formulario de ingreso de usuarios, tomo los datos de nombre, direccion, barrio y tipo-de-usuraio de los textBox y los introduzco en la tabla con autoincremento en id_user. Así tenia una fila por cada usuario. Tu idea me haría mas sencillo (creo, a priori) los de buscar por fechas. Yo pensaba que al momento de pagar un usuario la factura de ese mes, se agregara al campo de lectura (del mes que está pagando) un "P-" antes del número de la lectura de los KWh de ese mes. Mi dilema con la nueva idea es a la hora de abrir el formulario que muestre los que aun no han pagado, que el campo solo tenga numeros, no tenga el "P-" antes del número. Y lo ideal sería que me muestre una fila por cada usuario, mmm. Cómo sería? Tal ves con un select distinct where campo solo numerico? Pero ahí solo me diría los usuarios que deben, independientemene de si deben un mes, 2 o 3
Cómo lo ves?

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #5 en: 25 de Marzo 2014, 10:20 »
No, la idea del p_ tampoco es un buen diseño. Lo más habitual es algo como:

id_user     kwh_consumidos    mes      pagado

3                    34                      02-2014       Si
45                  66                      03-2014       No

De este modo ves cada usuario cuánta energía ha consumido en el mes, y si está pagado o no. Para ver los meses que tiene sin pagar hacemos una consulta con un select de los datos del usuario con tal id_user y donde  pagado = "No"


lucas1234

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #6 en: 25 de Marzo 2014, 10:32 »
mmm, ok, me gustó tu idea de pagar, pero cómo sería para que en un datagridview u otra forma, pero que en un form me diga los nombres de todos los usuarios que no han pagado y cuántos kwh de cada mes impago, para despues poder hacer la cuenta del valor del kwh
Ahi sería lo del select distinct where pagado = 0 y al hacer click en el nombre del usuario me podría abrir otro datagrid con los detalles de ese usuario? O lo hice muy complicado, o demasiado sencillo? je

lucas1234

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #7 en: 25 de Marzo 2014, 10:54 »
Además me plantea un dilema esta forma de tabla a la hora de ingresar las lecturas del nuevo mes. Dilema para mi, tal ves una tontería para quien sabe
Porque antes yo cargaba un datagridview con binding, entonces el usuario introducía los datos en la columna de ese mes
Pero en este caso, cómo? Porque habría que hacer una fila nueva por cada usuario y colocar en la columna mes, el nuevo mes y recién poder colocar las lecturas y en el campo pago un 0. No me parece que sería con un data grid. Pero usar textbox... mmm, y si son mucho usuarios?

lucas1234

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #8 en: 25 de Marzo 2014, 11:09 »
A la hora de ingresar un usuario tendria que repetir estas tres lineas una 24 veces, para los dos años

 Dim myAdapter As New MySqlDataAdapter("INSERT INTO lectura (user_name, mes, kwh, pagado) VALUES ('" + TextBox_nombre.Text + "', '03-2014')", myconn)
 Dim mydatatable As New DataTable
 myAdapter.Fill(mydatatable)

Pero sigo pensando en la forma de ingresar los datos de un mes en todos los usuarios...
O se les ocurre otra idea...

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #9 en: 26 de Marzo 2014, 09:23 »
Antes de crear un programa normalmente (cuando se hace profesionalmente) hay que hacer lo siguiente:

1) Describir los objetivos del programa: esto se hace con un texto escrito en lenguaje natural donde se describa todo lo que se quiere hacer.

2) Diseñar la base de datos: definir las tablas de la base de datos, los campos (columnas) que va a tener esa tabla y el tipo de datos que va a contener cada columna (por ejemplo texto, numérico entero, numérico decimal, etc.)

3) Diseñar el programa en sí (por ejemplo si se van a usar textbox o datagrid, pantallas que va a tener el programa, opciones, etc.)

4) Implementar el programa

Esto sería lo que te recomendaría, porque de otra manera puede empezar a programarse y luego tener que hacer cambios, corregir cosas, volver a empezar, ir poniendo parches, etc.

lucas1234

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Re:MySql - Buscar nombre de columna
« Respuesta #10 en: 26 de Marzo 2014, 11:30 »
Si, el objetivo lo tengo, la g´rafica del programa ya estaba, la base de datos la tenía, hasta q tu idea con el tema de poner el mes en las celdas y no el el titulo de la columna me pareció mejor; fué ahí cuando la cambié(a la tabla). Porque no sabía como hacer el código como tenía antes mi tabla
Y sigo con mi proyecto ahora, con este nuevo re-planteo sugerido

Pero, si a alguien le interesa, encontre cómo sacar el título de la columna

Label22.Text = MyDataTable.Columns(1).ColumnName()

Así pone el titulo de la 2da columna"(1)", en el label22
Para la tercer columna habría q cambia el '1' por un '2' y asi sucesivamente

Seguro me surgirá alguna duda y volveré por su auxilio

Gracias por las buenas ideas

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".