Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2012
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 22
marcial Va por buen camino
Hola a todos:
Aunque tengo que agradecer a todos vuestro aporte, tengo que decirle a Olbeup que el resultado no es el deseado. Tiene que ser un matiz que no doy con el. Os adjunto el resultado con el dódigo de Olbeup para ver si se puede retocar. La Imagen de la izda es el fichero completo de lineas y la de la derecha deberían ser los codigos comprados por el cliente 5191 y deberían ser sólo cuatro lineas:

BACON AHUMADO precio: 3,42 Fecha: 05.12.2012 Documento: 60
JAMON FRESCO SIN HUESO precio: 3,25 Fecha: 05.12.2012 Documento: 61 (En el docmto hay dos apuntes al Jamon)
CODILLO DE CERDO precio: 2,40 Fecha: 05.12.2012 Documento: 61
PANCETA FRESCA CON HUESO precio: 2,22 Fecha: 05.12.2012 Documento: 61

el código utilizado es:
Código Delphi [-]
Lineas1.Active := True;
SQL1 := 'SELECT DESCRIPCION ,DOCUMENTO ,CANTIDAD ,PRECIOVENTA , FECHA ,CODCLIENTE, SERIE, ARTICULO, HORAGRABACION ' +
       'FROM Lineas ' +
       'WHERE FECHA IN(SELECT MAX(FECHA) FROM Lineas GROUP BY DESCRIPCION, CODCLIENTE) ' +
        'AND CODCLIENTE = ''' + Edit4.Text + '''';
CONSULTAQUERYLINEAS;

El programa de Albaranes tiene un DBGrid a la izquierda con el pedido que me va haciendo ESE dia el cliente(sobre el Fichero LINEAS), y el DBGrid de la derecha debe contener TODOS los articulos que se ha llevado antes para que yo los vea y se los vaya recordando por telefono con su último precio.(Tambien sobre Fichero LINEAS). Por eso he puesto otro dataset Lineas1 para que al ejecutar el SQL me deje correctos los dos DBGRID (uno sobre cada dataset) que en realidad son los dos sobre el mismo fichero.

Gracias a todos por vuestro tiempo y esfuerzo.
Imágenes Adjuntas
Tipo de Archivo: pdf Imagen1.pdf (199,0 KB, 5 visitas)
Responder Con Cita
  #2  
Antiguo 08-12-2012
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 18
Gallosuarez Va por buen camino
Question ¿Probaste mi código? ...

Marcial:

Veo que hablas del códigos de los demás, sin embargo no encuentro ninguna referencia al mio. ¿Ya lo probaste? (No lo desprecies solo por pensar que es una simple sentencia SQL). Haz un "copy-paste" del código que publiqué y nos cuentas (no te va a llevar mas de 2 minutos).

Saludos,
Responder Con Cita
  #3  
Antiguo 08-12-2012
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 22
marcial Va por buen camino
Gallosuarez:
Siento mucho que hayas pensado que he despreciado tu codigo por ser una sentencia SQL. Yo no desprecio ningun código de nadie que sabe más que yo.
He probado tu código y lo que pasa es que me aparecen 10 columnas del fichero de lineas, pero no guardan la relación que yo deseo, que es la última de cada articulo (fecha y hora) comprado por el cliente que sea.
Si no he mencionado a todos los que tan amablemente me habeis prestado ayuda, lo siento, pero es porque trato de arreglar el problema con los códigos que me poneis y estoy prueba que prueba con la lengua fuera.
Pido perdón humildemente a todos.
Marcial
Responder Con Cita
  #4  
Antiguo 09-12-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por marcial Ver Mensaje
Hola a todos:
Aunque tengo que agradecer a todos vuestro aporte, tengo que decirle a Olbeup que el resultado no es el deseado. Tiene que ser un matiz que no doy con el. Os adjunto el resultado con el dódigo de Olbeup para ver si se puede retocar. La Imagen de la izda es el fichero completo de lineas y la de la derecha deberían ser los codigos comprados por el cliente 5191 y deberían ser sólo cuatro lineas:

BACON AHUMADO precio: 3,42 Fecha: 05.12.2012 Documento: 60
JAMON FRESCO SIN HUESO precio: 3,25 Fecha: 05.12.2012 Documento: 61 (En el docmto hay dos apuntes al Jamon)
CODILLO DE CERDO precio: 2,40 Fecha: 05.12.2012 Documento: 61
PANCETA FRESCA CON HUESO precio: 2,22 Fecha: 05.12.2012 Documento: 61

el código utilizado es:
Código Delphi [-]Lineas1.Active := True;
SQL1 := 'SELECT DESCRIPCION ,DOCUMENTO ,CANTIDAD ,PRECIOVENTA , FECHA ,CODCLIENTE, SERIE, ARTICULO, HORAGRABACION ' +
'FROM Lineas ' +
'WHERE FECHA IN(SELECT MAX(FECHA) FROM Lineas GROUP BY DESCRIPCION, CODCLIENTE) ' +
'AND CODCLIENTE = ''' + Edit4.Text + '''';
CONSULTAQUERYLINEAS;




El programa de Albaranes tiene un DBGrid a la izquierda con el pedido que me va haciendo ESE dia el cliente(sobre el Fichero LINEAS), y el DBGrid de la derecha debe contener TODOS los articulos que se ha llevado antes para que yo los vea y se los vaya recordando por telefono con su último precio.(Tambien sobre Fichero LINEAS). Por eso he puesto otro dataset Lineas1 para que al ejecutar el SQL me deje correctos los dos DBGRID (uno sobre cada dataset) que en realidad son los dos sobre el mismo fichero.

Gracias a todos por vuestro tiempo y esfuerzo.
Hola marcial,

Efectivamente tienes razón, y he realizado otra SQL que hace lo que pide.

Código SQL [-]
SELECT
    L1.ARTICULO
    ,L1.DESCRIPCION
    ,L1.CODCLIENTE
    ,(SELECT
          MAX(FECHA)
        FROM Lineas
        WHERE ARTICULO = L1.ARTICULO
     ) FECHAULTIMA
    ,(SELECT TOP 1
          PRECIOVENTA
        FROM Lineas
        WHERE ARTICULO = L1.ARTICULO
        ORDER BY FECHA DESC
     ) ULTIMOPRECIO
    ,(SELECT TOP 1
          HORAGRABACION
        FROM Lineas
        WHERE ARTICULO = L1.ARTICULO
        ORDER BY FECHA DESC
     ) HORAGRAB
    ,(SELECT TOP 1
          DOCUMENTO
        FROM Lineas
        WHERE ARTICULO = L1.ARTICULO
        ORDER BY FECHA DESC
     ) DOC
    ,(SELECT TOP 1
          CANTIDAD
        FROM Lineas
        WHERE ARTICULO = L1.ARTICULO
        ORDER BY FECHA DESC
     ) CANT
  FROM Lineas AS L1
  WHERE L1.CODCLIENTE = 5195
  GROUP BY L1.ARTICULO, L1.DESCRIPCION, L1.CODCLIENTE
Un saludo

P.D.: Esta vez sí, esto es SQL SERVER en el firebird tendrá que cambir el TOP por no se cual
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 09-12-2012 a las 03:52:56.
Responder Con Cita
  #5  
Antiguo 09-12-2012
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 22
marcial Va por buen camino
Hola a todos:
Olbeup, muchas gracias por tu código. La sentencia equivalente a TOP es FIRST. Aparte de eso, he tenido que hacerle alguna pequeña modificación para que el resultado fuera el deseado (según se ve en el ejemplo que adjunto ya que no asociaba bien el cliente con las lineas).

Creo que el código, por si a alguien le hace falta en el futuro sería este:

Código Delphi [-]
 SQL1 := 'SELECT  L1.ARTICULO ,L1.DESCRIPCION ,L1.CODCLIENTE ,(SELECT MAX(FECHA) FROM Lineas WHERE ARTICULO = L1.ARTICULO AND CODCLIENTE = L1.CODCLIENTE) FECHA, ' +
         '(SELECT FIRST 1 SERIE FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) SERIE, ' +
         '(SELECT FIRST 1 PRECIOVENTA FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) PRECIOVENTA, ' +
         '(SELECT FIRST 1 HORAGRABACION FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) HORAGRABACION, ' +
         '(SELECT FIRST 1 DOCUMENTO FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) DOCUMENTO, ' +
         '(SELECT FIRST 1 CANTIDAD  FROM Lineas WHERE ARTICULO = L1.ARTICULO and CODCLIENTE = ''' + Edit4.Text + ''' ORDER BY FECHA DESC) CANTIDAD ' +
         '  FROM Lineas AS L1 ' +
         '  WHERE L1.CODCLIENTE = ''' + Edit4.Text + ''' GROUP BY L1.ARTICULO, L1.DESCRIPCION, L1.CODCLIENTE';

if pFIBTransaction1.InTransaction then pFIBTransaction1.CommitRetaining;
pFIBTransaction1.StartTransaction;
LINEAS.Close;
LINEAS.SelectSQL.Clear;
LINEAS.SelectSQL.Add(SQL1);
LINEAS.QSelect.ExecQuery;
pFIBtransaction1.CommitRetaining;
LINEAS.Open;

Por tanto, si es que no me corregis, doy el tema a solucionado gracias a todas las aportaciones recibidas. Todas han sido muy importantes de una u otra manera, pero especialmente la de Olbeup.

Muchas gracias.
Imágenes Adjuntas
Tipo de Archivo: pdf Prueba2.pdf (409,3 KB, 4 visitas)
Responder Con Cita
Respuesta



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
Ayuda para la ayuda maxvera Varios 4 12-05-2007 20:13:44
Instalar Ayuda (.HLP) en la Ayuda de Delphi? MasterXP Varios 6 12-04-2006 06:57:49
Ayuda para crear ayuda... Gabriel2 Varios 2 10-06-2005 00:15:18
ayuda con strtofloat, ayuda punto flotante TURING Varios 5 30-04-2004 08:03:59
Ayuda Con Instalacion De Archivos De Ayuda Legolas Varios 1 01-12-2003 14:48:03


La franja horaria es GMT +2. Ahora son las 16:39:32.


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