Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ADOQuery: problema con GROUP BY (https://www.clubdelphi.com/foros/showthread.php?t=79218)

Jere_84 16-06-2012 04:41:05

ADOQuery: problema con GROUP BY
 
Hola Club, utilizo un ADOQuery con la siguiente sentencia SQL:
Código SQL [-]
Select CODIGO, DENOMINACION
from Talles 
group by CODIGO, DENOMINACION

Utilizo el Group By ya que hay muchos registros con el mismo código y denominación pero quiero mostrarlos solamente una sola vez. El problema surge al querer eliminar uno de los registros me da una excepción notificando lo siguiente: EOleException with message 'Información de columna de clave insuficiente o incorrecta; demasiadas filas afectadas por la actualizacion' :eek:
Me imagino que el problema debe venir por el group by, pero lo cierto es que tengo que usarlo. Como puedo solucionar esto? Alguna sugerencia.

Slds.

Casimiro Noteví 16-06-2012 09:16:03

Por favor, recuerda poner títulos descriptivos a tus preguntas, gracias ;)

Jere_84 16-06-2012 14:05:14

Problema ADOQuery con Group By
 
Cita:

Empezado por Casimiro Notevi (Mensaje 435246)
Por favor, recuerda poner títulos descriptivos a tus preguntas, gracias ;)

Podes editarlo? no me di cuenta

Caral 16-06-2012 14:30:24

Hola
Si usas esa sentencia para eliminar registros suponiendo que sea asi, la tabla tiene que contener solo esos campos, si tiene mas te dara ese error.
Para eliminar registros usa delete from.
No creo que influya el group by
Saludoa

Jere_84 16-06-2012 14:35:36

Cita:

Empezado por Caral (Mensaje 435257)
Hola
Si usas esa sentencia para eliminar registros suponiendo que sea asi, la tabla tiene que contener solo esos campos, si tiene mas te dara ese error.
Para eliminar registros usa delete from.
No creo que influya el group by
Saludoa

Digamos que debo agregarle todos los campos a esta sentencia? Este componente solo tiene una sola sentencia no te permite diferenciar entre el Select, Update y Delete.

Casimiro Noteví 16-06-2012 14:51:46

Cita:

Empezado por Jere_84 (Mensaje 435256)
Podes editarlo? no me di cuenta

¿Qué título podemos ponerle? :)

Caral 16-06-2012 15:13:58

Hola
El adoquery tiene la propiedad stringSQL y su casilla para poner el codigo, pero, se puede poner la sentencia por codigo dentro del form, ahi es donde puedes poner todo lo que necesites.
Saludos

Jere_84 16-06-2012 15:24:23

Cita:

Empezado por Casimiro Notevi (Mensaje 435260)
¿Qué título podemos ponerle? :)

Problema ADOQuery con Group by ;)

Jere_84 17-06-2012 00:10:25

Cita:

Empezado por Caral (Mensaje 435263)
Hola
El adoquery tiene la propiedad stringSQL y su casilla para poner el codigo, pero, se puede poner la sentencia por codigo dentro del form, ahi es donde puedes poner todo lo que necesites.
Saludos

La cuestion es que necesito solo mostrar una vez cada uno de los registros y si agrego todos los campos en la sentencia, se ven todos los registros con codigo repetidos. digamos que esta es mi tabla:

Codigo Denominacion Talle Codigo_interno
1, Letras, S, 1
1, Letras, M, 2
1, Letras, L, 3
1, Letras, XL, 4
2, Numeros, 38, 1
2, Numeros, 40, 2
2, Numeros, 42, 3


y en la grilla lo que quiero moestras es esto:

Codigo Denominacion
1, Letras
2, Numeros

para eso hice esta sentencia SQL en el componente ADO Query :

Código SQL [-]
Select CODIGO, DENOMINACION 
From Talles 
Group By CODIGO, DENOMINACION

De esta forma aparece como yo quiero pero no elimina porque dice: 'Información de columna de clave insuficiente o incorrecta filas afectadas por la actualización' . Alguien sabe como puedo solucionar eso?
Slds.

Casimiro Noteví 17-06-2012 00:25:33

Puede que lo que necesites es usar "distinct", esto te devuelve cada uno distinto que exista del campo que quieras.

Código SQL [-]
select distinct(codigo) from ...

Caral 17-06-2012 00:28:36

Hola
Sigo sin ver el problema.
1- Tienes un adoquery que te muestra lo que necesitas.
2- quieres borrar un registro.
Colooca otro adoquery y haces una sentencia sql que borre lo que quieres segun el dato del adoquery 1.
Saludos

Jere_84 17-06-2012 00:30:10

Cita:

Empezado por Casimiro Notevi (Mensaje 435283)
Puede que lo que necesites es usar "distinct", esto te devuelve cada uno distinto que exista del campo que quieras.

Código SQL [-]
select distinct(codigo) from ...

Hola Casimiro pero se puede mostrar mas de dos campos en el Distinct? tengo entendido de que no..

Slds.

Jere_84 17-06-2012 00:31:06

Cita:

Empezado por Caral (Mensaje 435284)
Hola
Sigo sin ver el problema.
1- Tienes un adoquery que te muestra lo que necesitas.
2- quieres borrar un registro.
Colooca otro adoquery y haces una sentencia sql que borre lo que quieres segun el dato del adoquery 1.
Saludos

Si es cierto solo que no quería recurrir a eso pero me parece que va a ser lo mejor..
Slds.

Caral 17-06-2012 00:39:04

Hola
Si te empeñas en tener un solo adoquery, entonces guarda el dato en una variable, cierralo, cambia de sql, ábrelo, y otra vez lo mismo.
Osea, da igual.
Saludos

Casimiro Noteví 17-06-2012 00:56:36

Cita:

Empezado por Jere_84 (Mensaje 435285)
Hola Casimiro pero se puede mostrar mas de dos campos en el Distinct? tengo entendido de que no..
Slds.

Hombre, que preguntes eso demuestra que no colaboras mucho ;)
¿Cuánto tiempo tardas en hacer la prueba?
Código SQL [-]
Select distinct(codigo), denominacion 
from tallas

Jere_84 17-06-2012 01:02:06

Cita:

Empezado por Casimiro Notevi (Mensaje 435288)
Hombre, que preguntes eso demuestra que no colaboras mucho ;)
¿Cuánto tiempo tardas en hacer la prueba?
Código SQL [-]
Select distinct(codigo), denominacion 
from tallas

Efectivamente!, La sentencia Distinct solo admite un campo lamentablemente.
Slds.

Casimiro Noteví 17-06-2012 01:20:21

1 Archivos Adjunto(s)
Cita:

Empezado por Jere_84 (Mensaje 435289)
Efectivamente!, La sentencia Distinct solo admite un campo lamentablemente.
Slds.

Pues no sé cómo has hecho la prueba :confused:

Jere_84 17-06-2012 01:34:01

Cita:

Empezado por Casimiro Notevi (Mensaje 435292)
Pues no sé cómo has hecho la prueba :confused:

Si estas en lo cierto no lo probé bien, funciona genial! :)
Gracias por la ayuda!

Slds.


La franja horaria es GMT +2. Ahora son las 15:40:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi