Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Post consulta por campo calculado

Saludos a todos los del foro de delphi.
bueno mi pregunta es la siguiente: como puedo realizar una consulta en base a un campo calculado, tengo el siguiente codigo:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT Alumnos.matricula, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre, Alumnos.Horario, Alumnos.status, Alumnos.Nombreprof, Alumnos.Colegiatura, Alumnos.UltSem, sum(Cobranza.Buenopor)as TotalPagado');
Query1.SQL.Add('FROM cobranza, Alumnos');
Query1.SQL.Add('Where (Alumnos.Matricula=Cobranza.Matricula) and (Alumnos.Status="ACTIVO") and Atraso>=3');
Query1.SQL.Add('Group by Alumnos.matricula, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre, Alumnos.horario, Alumnos.status, Alumnos.nombreprof, Alumnos.colegiatura, Alumnos.UltSem');
Query1.SQL.Add('Order by Alumnos.NombreProf, Alumnos.Horario, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre');
Query1.Open;

En la consulta anteriormente realizada, necesito que se pueda realizar la consulta por el campo calculado Atraso, como esta en la linea del Where, pero me manda el mensaje " Invalid use of keyword" Token:>=3

Bueno ese es el problema, tal vez sea facil pero no doy con la solucion.

Bueno muchas gracias por la ayuda que se me pueda brindar.

Última edición por noe fecha: 25-06-2005 a las 16:19:20.
Responder Con Cita
  #2  
Antiguo 25-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos.

No se mucho SQL, pero...
Donde esta declarado el campo ATRASO en la clausura Select?
Código SQL [-]
Select campo as ATRASO
??????
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 25-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Post

Gracias por responder, pero es que atraso no es un campo de una tabla como por ejemplo de la de alumnos, si no que es un campo calculado que sale de un query, como lo tengo entonces que declarar con el codigo que envié de ejemplo.
Gracias por la ayuda
Responder Con Cita
  #4  
Antiguo 25-06-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si entiendo bien lo que pides, tienes una tabla con un campo calculado y ahora deseas mediante una consulta, referirte a dicho campo que en realidad no existe en la tabla.

Un solución puede ser calcular en la consulta.

Por ejemplo:
Código SQL [-]
  Select Fecha, Fecha + 30 as Vencimiento
  From MiTabla

En donde Vencimiento sería nuestro campo calculado.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 25-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Gracias marcos, pero no me sirve lo que me escribiste, realice este codigo con parametros pero tampoco me sirve:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT Alumnos.matricula, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre, Alumnos.Horario, Alumnos.status, Alumnos.Nombreprof, Alumnos.Colegiatura, Alumnos.UltSem, sum(Cobranza.Buenopor)as TotalPagado');
Query1.SQL.Add('FROM cobranza, Alumnos');
Query1.SQL.Add('Where (Alumnos.Matricula=Cobranza.Matricula) and (Alumnos.Status="ACTIVO") and (:SemCons-Alumnos.UltSem>=3) ');
Query1.SQL.Add('Group by Alumnos.matricula, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre, Alumnos.horario, Alumnos.status, Alumnos.nombreprof, Alumnos.colegiatura, Alumnos.UltSem');
Query1.SQL.Add('Order by Alumnos.NombreProf, Alumnos.Horario, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre');
Query1.ParamByName('SemCons').AsInteger:=strtoint(Edt_SemComparacion.text);
Query1.Open;

Lo que deseo es que unicamente me devuelva en la consulta aquellos alumnos que tengan de atraso de 3 semanas en adelante, UltSem es la ultima semana de pago que tiene el alumno.

El parametro que esta en negritas creo que es el problema, porque me manda el error "Parameter 'SemCons' not found", o mas bien cual sera
He buscado varias formas pero nada, aver si me pueden ayudar con mas sugerencias, les estaré agradecido.

Última edición por noe fecha: 25-06-2005 a las 17:51:27.
Responder Con Cita
  #6  
Antiguo 25-06-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
No dices con que motor de base de datos estás trabajando, pero sino te permite incluir Date en la sentencia SQL
Código SQL [-]
 Select Date - UlSemana as Diferencia
 From MiTabla

Haz:
Código Delphi [-]
 Var
 Hoy:TDate;
 begin
 Hoy:=Date;
 Select Hoy - UltSemana as diferencia
 From MiTabla
 end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 25-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
gracias por responder nuevamente marcos, pero la diferencia ya la tengo, se llama Atrasos, y es un campo calculado lo que quiero es que cuando yo teclee en un edit contra que semana voy a comparar el adeudo me origina cuantas semanas tiene de atraso, lo que yo necesito es que solamente se muestren los alumnos que solamente tengan de 3 semanas en adelante, los atrasos ya los tengo(campo calculado Atrasos).
Le hice algunas modificaciones al codigo anterior a ver si lo puedes checar por favor Marcos, en verdad te agradezco tu ayuda.

Gracias
Responder Con Cita
  #8  
Antiguo 25-06-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
En un principio si la diferencia te la devuelve en días para consultar los que tengan mas de 3 semanas

Diferencia > 21

No sé si es esto lo que pides.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #9  
Antiguo 25-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Solamente necesito que en la consulta se muestren aquellos alumnos que me deban de 3 semanas de colegiatura en adelante, y lo voy a compara con lo que yo ponga en un edit. Ya que mi sistema determina adeudos de acuerdo a semanas.
Si yo tengo un campo calculado llamado atrasos, como puedo consultar en base a ese campo.
Utilizo en este sistema Paradox de delphi 5.
Atrasos es un campo calculado que logicamente no existe realmente en ninguna tabla, y es por este campo que quiero realizar la consulta.
Agradezco tu gentileza de quererme ayudar, pero no lo he resuelto.
Gracias Marcos.
Responder Con Cita
  #10  
Antiguo 26-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

El campo calculado lo creaste con Field Editor?

Si es asi, muestranos el codigo con la formula que utilizas para mostrar el atrazo. Creo que puedes realizar esa misma formula en SQL :P
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #11  
Antiguo 27-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Unhappy

Mi codigo es el siguiente( este codigo esta en un boton)
Código:
procedure TFrm_ConsultaAtrasos.BitBtn1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT Alumnos.matricula, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre, Alumnos.Horario, Alumnos.status, Alumnos.Nombreprof, Alumnos.Colegiatura, Alumnos.UltSem, sum(Cobranza.Buenopor)as TotalPagado');
Query1.SQL.Add('FROM cobranza, Alumnos');
Query1.SQL.Add('Where (Alumnos.Matricula=Cobranza.Matricula) and (Alumnos.Status="ACTIVO")');
Query1.SQL.Add('Group by Alumnos.matricula, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre, Alumnos.horario, Alumnos.status, Alumnos.nombreprof, Alumnos.colegiatura, Alumnos.UltSem');
Query1.SQL.Add('Order by Alumnos.NombreProf, Alumnos.Horario, Alumnos.ApPat, Alumnos.ApMat, Alumnos.Nombre');
Query1.Open;

end;

y este otro en mi evento onClacFields
Código:
procedure TFrm_ConsultaAtrasos.Query1CalcFields(DataSet: TDataSet);
var
  SemanaComparacion: Integer;
  Atraso: Integer;
  Colegiatura: Integer;


begin
  SemanaComparacion := StrToInt(Edt_SemComparacion.Text);
  Atraso := SemanaComparacion - Query1.FieldByName('UltSem').AsInteger;
  Colegiatura := Query1.FieldByName('Colegiatura').AsInteger;

  Query1.FieldByName('Atraso').AsInteger:= Atraso;
  Query1.FieldByName('Adeudo').AsInteger := Colegiatura*Atraso;

end;
Eso es todo
A ver si asi me pueden ayudar, lo que quiero solamente es que se muestren en la consulta solo los que deban de 3 a mas semanas de colegiatura
Gracias
Responder Con Cita
  #12  
Antiguo 27-06-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código Delphi [-]
Query1.SQL.Add('Where (Alumnos.Matricula=Cobranza.Matricula 
and (Alumnos.Status="ACTIVO") AND (Alumnos.UltSem>'+Atraso);

utilizé atraso como una variable a la que le das el valor de tu campo atraso... tambien podrías cambiar la parte del SELECT para que lo selecciones junto con los otros campos.... ¿en que tablas tienes guardado el campo atraso?
__________________


Última edición por ContraVeneno fecha: 27-06-2005 a las 19:46:21.
Responder Con Cita
  #13  
Antiguo 27-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
gracias por responder en realidad el campo atraso no esta guardado en ninguna tabla, puesto que es un campo calculado, es decir solo esta en mi unico query que tengo pero como campo calculado, pero este campo llamado atraso no pertenese a ninguna tabla.

Gracias
Responder Con Cita
  #14  
Antiguo 27-06-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
a una variable global dale el valor de tu campo calculado y luego la utilizas como te menciono...
en teoría debe funcionar...
__________________

Responder Con Cita
  #15  
Antiguo 28-06-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
y en que evento y como le paso esos valores
Responder Con Cita
  #16  
Antiguo 28-06-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
en lugar de que declares tu variable atraso en el evento Query1CalcFields
declarala global y lixto.
__________________

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


La franja horaria es GMT +2. Ahora son las 01:28:36.


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