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-05-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Question consulta sql con una variable

Saludos a todos los compañeros del foro, Bueno tengo un sistema hecho en delphi5 y tablas paradox.

Se me presento el siguiente problema:
Tengo que realizar una consulta de cuantas semanas debe un alumno, asi como la cantidad total que debe; el campo llamado ultsem, es la ultima semana que tiene pagada el alumno, pero yo necesito comparar esa semana con una semana que yo le de al sistema (el cual le voy a dar dentro de un edit)para asi por medio de una simple resta saber cuantas semanas tiene de adeudo, y cual es el total de su adeudo.

Mi codigo hasta ahorita es el siguiente:
Código Delphi [-]
Query1.Close;
Query1.SQL.clear;
Query1.SQL.Add('SELECT cobranza.matricula, Cobranza.Nombre,');
Query1.SQL.Add('cobranza.horario, alumnos.nombreprof, Alumnos.UltSem,');
Query1.SQL.Add('sum(Cobranza.Buenopor)as TotalPagado');
Query1.SQL.Add('FROM cobranza, alumnos');
Query1.SQL.Add('where alumnos.matricula=Cobranza.matricula');
Query1.SQL.Add('Group by cobranza.matricula, cobranza.Nombre,');
Query1.SQL.Add(' cobranza.horario, alumnos.nombreprof, Alumnos.UltSem');
Query1.SQL.Add('Order by alumnos.nombreprof');
Query1.Open;
Les agradecere toda ayuda que me puedan brindar
Muchas gracias
atte Noe.

Última edición por marcoszorrilla fecha: 25-05-2005 a las 17:43:39.
Responder Con Cita
  #2  
Antiguo 25-05-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
Prueba esto:
Código Delphi [-]
Query1.Close;
Query1.SQL.clear;
Query1.SQL.Add('SELECT cobranza.matricula, Cobranza.Nombre,');
Query1.SQL.Add('cobranza.horario, alumnos.nombreprof, Alumnos.UltSem,');
Query1.SQL.Add('sum(Cobranza.Buenopor)as TotalPagado');
Query1.SQL.Add('FROM cobranza, alumnos');
Query1.SQL.Add('where alumnos.matricula=Cobranza.matricula');
Query1.SQL.Add('And alumnos.Ultset = '+QuotedStr(Edit1.Text));
Query1.SQL.Add('Group by cobranza.matricula, cobranza.Nombre,');
Query1.SQL.Add(' cobranza.horario, alumnos.nombreprof, Alumnos.UltSem');
Query1.SQL.Add('Order by alumnos.nombreprof');
Query1.Open;
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
  #3  
Antiguo 25-05-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
podes hacer algo como:

Código SQL [-]
  Select *, UltSem
   from Alumnos
  where :SemanaConsulta - UltSem >= :SemanasAdeudo

Esto dentro de un TQuery.

Luego:

Código Delphi [-]
  query1.ParamByName('SemanaConsulta').AsInteger := StrToInt(eSemanasConsulta.text);
  query1.ParamByName('SemanasAdeudo').AsInteger := StrToInt(eSemanasAdeudo.text);
  query1.Open;

he supuesto que eSemanasConsulta y eSemanasAdeudo serán TEdits colocados en el formulario. Creo que su significado se explica por si mismo.

Por último, para calcular cuantas semanas debe y el total de la deuda, podes hacerlo creando un par de campos calculados y valiendote del evento OnCalcFields.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 25-05-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Antes que nada debo agreadecerles por la inmediata respuesta de ambos compañeros, les estoy muy agradecido por el interes.

BuenoAsi como el la consulta que les mostre me arroja en el dbgrid un campo llamado total pagado, asi necesito me envie la consulta un campo llamado Atraso, que seria las semanas que tiene de atraso el alumno.

bueno se que es mucho pedir, pero esta consulta sera en base a una comparacion de la semana que esta transcurriendo actualmente la cual yo colocare en un edit.
La cunsulta que me envio zorrilla me arroja solo los que tienen como su ultima semana lo que pongo en el edit.
Yo necesito algo como esto por ejemplo:

sum(SemanaComparacion-Alumnos.Ultsem) as atraso

pero el campo SemanaComparacion donde la creo, para que sea una variable que tome el dato de un edit.

bueno gracias por la ayuda

Última edición por noe fecha: 25-05-2005 a las 19:20:21.
Responder Con Cita
  #5  
Antiguo 25-05-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
Este último planteamiento no puede hacerse con una variable, tendrías que crear un campo calculado y luego sumarlo.

Me refiero a un doble clic en el tQuery Nuevo campo, calculado, tipo de campo etc.

Y luego en el evento OnCalcFields le das el valor que le corresponda.....

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
  #6  
Antiguo 25-05-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Me podrias ayudar marcos la verdad no se como hacerlo

Gracias
Responder Con Cita
  #7  
Antiguo 26-05-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Question explico mejor mi problema

Bueno voy a explicar mejor mi problema, tal vez no me lo he hecho de forma que se entienda.

La consulta que yo tengo es la que mostre en mi mensaje, pero yo tengo esto en mi DBGrid cuando hago la consulta:

Código:
Matricula      Nombre         Colegiatura       UltSem      
TI-04-512    Luis Arias          100                18           
TI-04-513    Pedro Meza           90                19           
TI-04-560    Pablo Montoya       100                20
Y asi sucesivamente, aproximadamente tengo como como 350 alumnos, pero quiero que me los muestre todos en la consulta, pero que se agregen los siguientes campos en el grid cuando ponga en un edit contra que semana voy a comparar su adeudo:
Ejemplo si lo comparo contra la semana 20 (que es lo que escribiré dentro de un Edit , debera salir lo siguiente:

Código:
Matricula      Nombre         Colegiatura       UltSem       Atraso     Adeudo
TI-04-512    Luis Arias          100                18           2         $200
TI-04-513    Pedro Meza           90                19           1          $90
TI-04-560    Pablo Montoya       100               20            0           $0
Los campos Atraso y Adeudo no existen, pero necesito que se muestren a la hora en que realice mi consulta. El problema es como lo hago.

Desde luego, sera un listado completo de todos mis alumnos que tengo, ya que me interesa mostrar sus adeudos.

bueno les agradecere su ayuda, de como puedo solucionar este problema.

En verdad muchisimas gracias por su disponibilidad y ayuda desinteresada, Gracias de antemano.

Última edición por noe fecha: 26-05-2005 a las 16:19:05.
Responder Con Cita
  #8  
Antiguo 26-05-2005
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
O no entiendo o no veo dónde está el problema.

Los valores de Atraso y Adeudo corresponden a dos sencillas fórmulas:

Atraso = SemanaComparacion - UltSem
Adeudo = Colegiatura*Atraso

donde SemanaComparacion es un valor fijo que introduces en el Edit.

Estas mismas fórmulas son las que debes poner en el evento OnCalcFields:

Código Delphi [-]
var
  SemanaComparacion: Integer;
  Atraso: Integer;
  Colegiatura: Integer;

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

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

// Saludos
Responder Con Cita
  #9  
Antiguo 26-05-2005
Avatar de noe
noe noe is offline
Miembro
 
Registrado: dic 2003
Ubicación: Mexico
Posts: 111
Poder: 21
noe Va por buen camino
Thumbs up Muchas gracias Paisano

Gracias Roman, no cabe duda creo que me estaba empezando a confundir y no encontraba la respuesta, solo agrege 2 campos mas llamados atraso y adeudo como calculados en mi query y ya.

Siempre nos ayudas a todos.

Te estoy muy agradecido.
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 22:36:34.


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