Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-08-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Question Consulta de un mismo campo

Buenas tardes amigos resulta que tengo un problemilla en el cual no le hallo, lo que quiero hacer es una consulta con un mismo campo de una sola tabla, es decir tengo una tabla en access de ventas anuales y dentro de ella esta el campo MES entonces lo que quiero hacer es que en Delphi con dos combobox seleccione el mes que quiera consultar a que mes consultar, les pongo un ejemplo:

De ENERO a JULIO

y al hacer clic en un boton me muestre las ventas que hubieron desde esos meses, es ahi mi dilema que nose como hacer o como plantear la solucion, espero me ayuden y de antemano gracias.
Responder Con Cita
  #2  
Antiguo 15-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Cómo está guardado el mes? Si lo tienes así tal cual, enero, febrero, etc. no sería tan fácil. Lo ideal sería que lo tuvieras numérico 1, 2, 3, etc. Así, la consulta sería algo como

Código SQL [-]
select * from ventas
where mes between 1 and 7

// Saludos
Responder Con Cita
  #3  
Antiguo 15-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Hola.

No conozco la sintáxis SQL de Access pero te pongo un ejemplo que espero te dé una idéa:
Código Delphi [-]
...
 if ComboBox1.ItemIndex <= ComboBox2.ItemIndex then
    with IBQuery do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM LA_TABLA ');
      SQL.Add('WHERE EXTRACT(MONTH FROM EL_CAMPO_FECHA) BETWEEN :PFECHA1 AND :PFECHA2 ');
      SQL.Add('ORDER BY CAMPO_FECHA');
      ParamByName('PFECHA1').Value := ComboBox1.ItemIndex+1; 
      ParamByName('PFECHA2').Value := ComboBox2.ItemIndex+1;
      Open;
    end;
...
Si usas ADO, mínimamente tendrías que cambiar :
Código Delphi [-]
 
  with ADOQuery do
  begin
     ...
     Parameters.ParamByname(...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 15-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por rufo Ver Mensaje
y dentro de ella esta el campo MES
Yo entendí que tenía un campo con el mes y no con una fecha. Ya nos aclarará.

// Saludos
Responder Con Cita
  #5  
Antiguo 15-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Cita:
Yo entendí que tenía un campo con el mes y no con una fecha. Ya nos aclarará.
Si, también es probable que pueda ser así.

Lo que no pude (aunque lo intenté) fué traducir la consulta a SQL de Access , ví por algún lado el uso de la función MONTH, '#' FECHA '#',... pero también me mandó a pasear.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-08-2012 a las 21:58:15.
Responder Con Cita
  #6  
Antiguo 15-08-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Qué es lo que no funciona? ¿El paso de parámetros? ¿La función Extract? ¿Con qué probaste? ¿Con ADO?

// Saludos
Responder Con Cita
  #7  
Antiguo 15-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Cita:
Empezado por roman Ver Mensaje
¿Qué es lo que no funciona? ¿El paso de parámetros? ¿La función Extract? ¿Con qué probaste? ¿Con ADO?

// Saludos
Lo que no funciona aparentemente es la sintáxis. Si, para las pruebas usé un TADOQuery y la tabla employee de dbdemos.mdb.

Asignándole esta consulta:
Código Delphi [-]
'SELECT * FROM EMPLOYEE
WHERE EXTRACT(MONTH FROM HIREDATE) BETWEEN :FECHA1 AND :FECHA2'
Me da el error: "Error no especificado" (muy orientativo)

Esta sólo funciona cuando se trata del mismo mes.
Código Delphi [-]
'SELECT * FROM EMPLOYEE
WHERE MONTH(HIREDATE) BETWEEN :FECHA1 AND :FECHA2'


Por último esta:
Código Delphi [-]
'SELECT * FROM EMPLOYEE
WHERE MONTH(''#'' HIREDATE ''#'') BETWEEN :FECHA1 AND :FECHA2'
Me da el error: " Error de sintáxis(falta operador) en la expresión de consulta 'MONTH(''#'' HIREDATE ''#'') BETWEEN ? AND ?' "

Pero es lógico ya que nunca utilizo Access y desconozco su sintáxis.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-08-2012 a las 22:47:50.
Responder Con Cita
  #8  
Antiguo 15-08-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Gracias amigos por responder, exacto como dice tengo un campo donde almaceno el mes y les pongo el codigo que he estado usando sin tener resultados.

Código Delphi [-]
if (combobox3.text<>'') and (combobox4.Text<>'') then
      begin
        with dm1.Q_Vanual do
        begin
          active:=false;
          sql.clear;
          sql.add('select * from ventas_anuales');
          sql.add('where datos_factura.mes');
          sql.Add('and datos_factura.N[mes]');
          active:=true;
          if recordcount=0 then
         messagedlg('No se encontraron ventas de los meses selecionado, intente de nuevo',mtinformation,[mbok],0);
         listbox11.Clear;
         listbox12.Clear;
         listbox13.Clear;
         listbox4.Clear;
         listbox20.Clear;
         listbox21.Clear;
         listbox22.Clear;
         listbox23.Clear;
       while not(eof) do
        begin
         listbox11.Items.add(fieldbyname('id_folio').asstring);
         listbox12.Items.add(fieldbyname('nombre').asstring);
         listbox13.Items.Add(fieldbyname('importe').AsString);
         listbox20.Items.Add(fieldbyname('dia').AsString);
         listbox21.Items.Add(fieldbyname('mes').AsString);
         listbox22.Items.Add(fieldbyname('ano').AsString);
         listbox4.Items.Add(fieldbyname('iva').AsString);
         listbox23.Items.Add(fieldbyname('total').AsString);
        next;
        end;
      end;
      end;

en la consulta de access cree un campo que se llama N[mes] para poder hacer la consulta, al ejecutar la consulta si me funciona ya que si en la consulta especifico de que Mes a que Mes me arroja los resultados, el problema es en planteamiento en delphi, al momento de ejecutar mi aplicacion y hacer click me arroja el siguiente mensaje

"Error de sintaxis (falta operador) en la expresion de consulta 'datos_factura.mes and datos_factura.N[mes]'

Espero me ayuden a que operador estara faltandome y gracias de antemano.
Responder Con Cita
  #9  
Antiguo 15-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Hola.

Bueno, al final encontré como hacerlo usando la funcion MONTH. Aparentemente hay que especificar el mismo tipo de dato que devuelve la función a los parámetros.

Código Delphi [-]
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM TU_TABLA ');
    SQL.Add('WHERE MONTH(TU_CAMPO_FECHA) BETWEN :DESDE AND :HASTA';
    Parameters.ParamByName('DESDE').DataType := ftInteger;
    Parameters.ParamByName('HASTA').DataType := ftInteger;
    Parameters.ParamByName('DESDE').Value := ComboBox1.ItemIndex + 1;
    Parameters.ParamByName('HASTA').Value := ComboBox2.ItemIndex + 1;
    Open;
  end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 16-08-2012
rufo rufo is offline
Miembro
 
Registrado: jul 2006
Posts: 240
Poder: 18
rufo Va por buen camino
Gracias amigo Ecfisa, pero perdon mi ignorancia adecue tu ejemplo a mi codigo pero

Código Delphi [-]
Parameters.ParamByName('DESDE').DataType := ftInteger;
    Parameters.ParamByName('HASTA').DataType := ftInteger;

Esta parte de codigo me marca error se tienen que declarar "Parameters.ParamByName" y tambien este "ftInteger" disculpa mi ignorancia pero me he bloqueado por ver tanto codigo espero me auxilies y gracias.
Responder Con Cita
  #11  
Antiguo 16-08-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 beholdecfisa is a splendid one to behold
Hola rufo.

Te adjunto un ejemplo que utiliza la tabla Employee de dbdemos (que viene con Delphi) para que puedas analizarlo con tranquilidad.

Tuve dificultades con el uso de BETWEEN (como te dije no utilizo Acces ), por lo que decidí usar el condicional de este modo:
Código SQL [-]
WHERE MONTH(HIREDATE) >=:DESDE AND MONTH(HIREDATE) <=:HASTA

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 20-09-2012 a las 19:27:44.
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
Problema con joins mismo campo Toni Firebird e Interbase 1 21-04-2009 18:49:17
Pasar un campo calculado a un campo del mismo DbGrid maravert Conexión con bases de datos 3 12-05-2006 00:31:30
IB problemas por acceso simultaneo al mismo campo Giniromero Conexión con bases de datos 17 21-04-2004 10:17:20
Obtener dos veces el mismo campo. Jose_Pérez SQL 11 27-02-2004 05:51:06


La franja horaria es GMT +2. Ahora son las 08:59:39.


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