Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 62
Poder: 7
aromigaret Va por buen camino
Pasar datos de un adoquery a una tabla ado

Hola, por favor si alguien puede ayudarme con el siguiente inconveniente, tengo una tabla llamada 'Pedidos' en ella los campos son cantidad, código, ubicación. Por supuesto puede haber varios códigos iguales con distintas cantidades. Necesito ordenar la tabla por el campo 'ubicación' y con los códigos iguales, sumar todos las cantidades y dejar un único registro. Para ello se me ocurrió hacer lo siguiente:

Código Delphi [-]
AUXILIAR.Close;
AUXILIAR.SQL.Text:='SELECT SUM(CANTIDAD),CODIGO,MAX(UBICACION) FROM PEDIDOS '+
                   'WHERE CANTIDAD <> NULL AND CODIGO <> NULL GROUP BY CODIGO';
AUXILIAR.Open;

el MAX(UBICACION) fue necesario, ya que sin el, no funcionaba el GROUP BY.
En un Dbgrid veo el resultado y funciona la agrupación de los que están repetidos, pero ahora no se como pasar esta consulta a otra nueva tabla 'Ordenada' la cual será ordenada luego por el campo ubicacion y enviada por ftp.

Muchas Gracias.

Última edición por ecfisa fecha: 05-11-2015 a las 17:37:45. Razón: Ajustar código al ancho de visualización
Responder Con Cita
  #2  
Antiguo 05-11-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.742
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aromigaret.

No sé con que gestor de BD estas trabajando, pero de este modo:
Código SQL [-]
SELECT CODIGO, SUM(CANTIDAD)
FROM PEDIDOS
WHERE CANTIDAD IS NOT NULL AND CODIGO IS NOT NULL
GROUP BY CODIGO
me agrupa las sumatorias de cantidad por código sin problemas (o tal vez entendí mal lo que estas intentando hacer).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 05-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 62
Poder: 7
aromigaret Va por buen camino
Thumbs up

ecfisa, gracias por contestar. La agrupación funciona bien con 'Group by', mi problema radica en que ese resultado, lo quiero volcar a una nueva tabla. Es decir la tabla 'pedidos' está desagrupada y quiero agrupar los registros en una nueva tabla llamada 'ordenada'.

tabla 'pedidos':

cantidad código
2 001
5 003
1 001

resultado en tabla 'ordenada':

cantidad código
3 001
5 003

Utilizo tablas .dbf y este programa no se ejecuta en Red.
Responder Con Cita
  #4  
Antiguo 05-11-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.742
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Entiendo... entonces creo que la sentencia debería ser:
Código SQL [-]
INSERT INTO PEDIDOS2 (CODIGO, CANTIDAD) /* (*) */
SELECT CODIGO, SUM(CANTIDAD)
FROM PEDIDOS P
WHERE P.CODIGO IS NOT NULL AND P.CANTIDAD IS NOT NULL
GROUP BY CODIGO
(*) Donde PEDIDOS2 sería la tabla "ordenada"

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 05-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 62
Poder: 7
aromigaret Va por buen camino
Ecfisa, impecable !!! Muchísimas gracias!!!
Y para ponerle la frutilla al postre.... En el mismo SQL se podrá poner 'Order by' para que ordene por un campo especifico al guardarlo en la nueva tabla?
Responder Con Cita
  #6  
Antiguo 05-11-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.742
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aromigaret.

Siempre que la columna se encuentre en el SELECT no habría inconveniente, por ejemplo:
Código SQL [-]
INSERT INTO PEDIDOS2 (CODIGO, CANTIDAD)
SELECT P.CODIGO, SUM(P.CANTIDAD)
FROM PEDIDOS P
WHERE P.CODIGO IS NOT NULL AND P.CANTIDAD IS NOT NULL
GROUP BY P.CODIGO
ORDER BY P.CODIGO DESC
y las columnas por las cuales se podría ordenar, estarían limitadas a aquellas que se fueran a insertar (en el caso anterior sólamente P.CODIGO).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 05-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.326
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Apunto algo: no sirve de nada "insertar registros en orden", salvo que estés usando dbase o algo similar. Y aún así tampoco sirve para nada porque las consultas que hagas a la base de datos ya indicarás el orden que te interese.
En cualquier sistema de bases de datos "normal" grabará los registros donde estime oportuno y sin ningún orden físico real en la tabla.
Responder Con Cita
  #8  
Antiguo 06-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 62
Poder: 7
aromigaret Va por buen camino
Totalmente de acuerdo con vos Casimiro, pero en este caso particular, esta base la paso ordenada via ftp, ya que un servidor recibe y procesa cientos de estas bases por hora y si cada uno la pasa desordena, le quito un tiempo considerable al servidor para realizar el orden requerido y luego realizar el proceso especifico. Por eso me parece mejor que pierda un poco de tiempo cada usuario y la envie ya ordenada.

Por otro lado ecfisa te paso el sql que utilizo:

Código SQL [-]
INSERT INTO ORDENADA (CODIGONUM, CANTIDAD, UBICACION) 
SELECT CODIGONUM, SUM(CANTIDAD), MAX(UBICACION) -------> como necesito el campo ubicacion le puse la funcion max para que el GROUP BY lo aceptara
FROM PEDIDO P 
WHERE P.CODIGONUM IS NOT NULL AND P.CANTIDAD IS NOT NULL 
GROUP BY P.CODIGONUM 
ORDER BY P.UBICACION DESC

Pero me da el siguiente error : "ha intentado ejecutar una consulta que no incluye la expresion especifica 'P.UBICACION' como parte de una funcion de agregado".
Si no lo ordeno funciona perfecto, pero al poner ORDER BY .... salta ese error.
Responder Con Cita
  #9  
Antiguo 06-11-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.326
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por aromigaret Ver Mensaje
Totalmente de acuerdo con vos Casimiro, pero en este caso particular, esta base la paso ordenada via ftp, ya que un servidor recibe y procesa cientos de estas bases por hora y si cada uno la pasa desordena, le quito un tiempo considerable al servidor para realizar el orden requerido y luego realizar el proceso especifico. Por eso me parece mejor que pierda un poco de tiempo cada usuario y la envie ya ordenada.
Vuelvo a insistir: no sirve para nada que estén ordenados los registros a insertar. No pierdas el tiempo en ello.
Responder Con Cita
  #10  
Antiguo 06-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 62
Poder: 7
aromigaret Va por buen camino
Ok, Casimiro tomare tu recomendación.
Responder Con Cita
  #11  
Antiguo 06-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 62
Poder: 7
aromigaret Va por buen camino
Crear tabla ado con la union de dos tablas ado

Hola, quiero crear una tabla con la unión de dos tablas. Ejemplifico:

Tabla Temporal
cantidad códigonum
1 002
5 003

Tabla Articulo
codigonum articulo marca ubicacion
001 AAAA BBBB 6
002 CCCC DDDD 10
003 EEEE FFFF 8

Tabla Pedido (Tabla resultante)

cantidad codigonum articulo marca ubicacion
1 002 CCCC DDDD 10
5 003 EEEE FFFF 8

Utilizo tablas .dbf con ADO, he probado con:

Código SQL [-]
SELECT T.CANTIDAD, A.ARTICULO, A.MARCA, T.CODIGONUM, A.UBICACION FROM TEMPORAL T INNER JOIN ARTICULO A ON (T.CODIGONUM=A.CODIGONUM)

pero no funciona, he revisado el foro y no encontré ninguna pregunta o respuesta a mi inquietud.

Gracias

Última edición por aromigaret fecha: 06-11-2015 a las 16:48:05.
Responder Con Cita
  #12  
Antiguo 06-11-2015
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 62
Poder: 7
aromigaret Va por buen camino
Ya lo resolví lo dejo por si alguien tiene la misma inquietud

Código SQL [-]
INSERT INTO ORDENADA (CANTIDAD,ARTICULO,MARCA,CODIGONUM,UBICACION)  
SELECT T.CANTIDAD, A.ARTICULO, A.MARCA, T.CODIGONUM, A.UBICACION 
FROM TEMPORAL T 
INNER JOIN ARTICULO A ON (T.CODIGONUM=A.CODIGONUM)
Responder Con Cita
  #13  
Antiguo 07-11-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.742
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aromigaret.
Cita:
Empezado por aromigaret Ver Mensaje
...
Pero me da el siguiente error : "ha intentado ejecutar una consulta que no incluye la expresion especifica 'P.UBICACION' como parte de una funcion de agregado".
Si no lo ordeno funciona perfecto, pero al poner ORDER BY .... salta ese error.
Para que no te aparezca ese error:
Código SQL [-]
INSERT INTO ORDENADA (CODIGONUM, CANTIDAD, UBICACION)
SELECT P.CODIGONUM, SUM(P.CANTIDAD), MAX(UBICACION) AS MAXUBIC
FROM PEDIDOS P
WHERE P.CODIGONUM IS NOT NULL AND P.CANTIDAD IS NOT NULL
GROUP BY P.CODIGONUM
ORDER BY MAXUBIC
Aunque como dice Casimiro, el órden en que se mostrarán los datos luego, dependerá del modo en que realizen la consulta mas que de como fueron guardándose.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar datos de una tabla a un memo Cosgaya Conexión con bases de datos 24 03-04-2012 18:38:34
Pasar datos de una Query a una tabla Vanis SQL 3 09-01-2007 02:29:41
pasar datos de una tabla a otra perillan Conexión con bases de datos 5 19-09-2005 20:50:48
pasar datos de tabla a tabla? danytorres Conexión con bases de datos 6 15-06-2004 18:41:33
Pasar datos de un Adoquery a un ListBox1 danytorres Varios 6 09-05-2003 02:16:37


La franja horaria es GMT +2. Ahora son las 12:38:05.


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