Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   consulta sql con una variable (https://www.clubdelphi.com/foros/showthread.php?t=21711)

noe 25-05-2005 17:32:36

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.

marcoszorrilla 25-05-2005 17:45:57

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.

jachguate 25-05-2005 17:49:18

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.

;)

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

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

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

noe 26-05-2005 17:11:52

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

Siempre nos ayudas a todos.

Te estoy muy agradecido.


La franja horaria es GMT +2. Ahora son las 18:00:01.

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