PDA

Ver la Versión Completa : consulta sql con una variable


noe
25-05-2005, 17:32:36
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:

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.

marcoszorrilla
25-05-2005, 17:45:57
Prueba esto:

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.

jachguate
25-05-2005, 17:49:18
podes hacer algo como:


Select *, UltSem
from Alumnos
where :SemanaConsulta - UltSem >= :SemanasAdeudo


Esto dentro de un TQuery.

Luego:


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.

;)

noe
25-05-2005, 19:17:10
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 :)

marcoszorrilla
25-05-2005, 19:21:38
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.

noe
25-05-2005, 20:09:13
Me podrias ayudar marcos la verdad no se como hacerlo

Gracias

noe
26-05-2005, 16:06:16
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:

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:


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. :confused:

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.

roman
26-05-2005, 16:30:37
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:


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

noe
26-05-2005, 17:11:52
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. :D

Siempre nos ayudas a todos.

Te estoy muy agradecido.