Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-07-2011
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Recorrer Una Tabla O Dbgrid Para Validar Datos

Hola soy nuevo aqui en el foro, espero que me ayuden con una duda que tengo:

Estoy haciendo un sistema para un colegio en Delphi con MySql y estoy frenado con el modulo de facturacion, me explico:
Cuando inscribo un estudiante el sistema me le genera los cargos educativos automaticamente.....y cuando voy al modulo de facturacion y llamo a dicho estudiante me tira los 11 cargos en un dbgrid ejemplo:
cargoid-------------Descripcion------------Valor
001.......................Inscripcion.................1000
002.......................mes1.........................800
003.......................mes2.........................800

Dentro del formulario tengo un Edit llamado MONTOAPAGAR..entonces si el estudiante paga 1000 cuando le de a guardar me tiene que poner e valor del primer cargo en CERO. ahora, si el desea pagar 1600 cuando le de a guardar el sistema me tiene que poner el valor del primer cargo en CERO yel valor del segundo cargo en DOSCIENTOS..........NO SE SI ME DI A ENTENDER

osea si el monto a pagar es mayor que el valor del primer cargo que lo reste y que vaya al otro registro y reste dicho valor con el valor que quedo en la primera operacion.
Responder Con Cita
  #2  
Antiguo 18-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Estas cosas no se suelen hacer así, se tiene otra tabla con los pagos.
Por ejemplo:
alumno----fecha-----pago---
1_____01.01.2011__1600
1_____01.02.2011___500
2_____03.01.2011__1000
3_____06.02.2011__2000
1_____04.03.2011___250

Entonces haces una suma de lo que debe pagar el alumno y una suma de esta tabla con los pagos que ha hecho, la diferencia es lo que debe.
Responder Con Cita
  #3  
Antiguo 18-07-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.464
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Estas cosas no se suelen hacer así, se tiene otra tabla con los pagos.
Por ejemplo:
alumno----fecha-----pago---
1_____01.01.2011__1600
1_____01.02.2011___500
2_____03.01.2011__1000
3_____06.02.2011__2000
1_____04.03.2011___250

Entonces haces una suma de lo que debe pagar el alumno y una suma de esta tabla con los pagos que ha hecho, la diferencia es lo que debe.
Cierto pero hay veces que se quiere ir saldando por documentos para en un momento dado poder decirle al deudor qué documentos debe como información complementaria al saldo. Para eso aparte de la nueva tabla que comentas lo que haría sería crear un par de campos nuevos en la tabla original que mantuvieran el importe pagado sobre el documento y el importe pendiente.

Código:
cargoid-------------Descripcion------------Valor----Pagado-Pendiente
001.......................Inscripcion.................1000..............1000............0
002.......................mes1.........................800..................200........600
003.......................mes2.........................800......................0............0
Para esto cada documento de cargo tendría que tener un número distinto de los demás para poder mantener toda la información de forma coherente y el tema de estos acumulados actualizarlos mediante los triggers de la base de datos.

Saludos
Responder Con Cita
  #4  
Antiguo 18-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por supuesto, era sólo por darle una idea a donpedro que hay que controlar todo ese asunto porque de la forma en que lo tiene pensado cada vez que alguien paga una factura ya no puede saber jamás cuánto pagó ni cuánto debía, ya que todo estará a cero.
Responder Con Cita
  #5  
Antiguo 18-07-2011
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Me Explico...

Entiendo lo que dicen..quiero confirmar que tengo dos tablas mas donde me guarda lo que va pagando junto con el numero de factura. Lo que me interesa saber es.....

Como puedo hacer para que cuando el estudiante pague 1600 me le ponga cero al primer cargo y siga verificando la siguiente fila y le vaya restando... porque Lo demas lo tengo.. tengo un campo pendiente y todo lo demas.

Última edición por donpedro fecha: 18-07-2011 a las 14:46:11. Razón: Para ir acorde con las reglas del foro
Responder Con Cita
  #6  
Antiguo 18-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De momento, amigo, revisa nuestra guía de estilo, no escribas todo en mayúsculas, eso en internet representa GRITAR.
Responder Con Cita
  #7  
Antiguo 18-07-2011
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
me disculpo. ya lei la guia de estilo.

estoy utilizando el siguiente codigo pero no me ha dado resultado, porque la parte para cuando el monto que pague el estudiante sea mayor que el valor no se como manejarlo:
Código Delphi [-]
     var a,b,res,x:integer;
begin
     a:=strtoint(emontoapagar.text);
     b:=strtoint(dmdatos.aqfacturadvalor.asstring);

     dmdatos.aqfacturad.first;

//esto es para cuando el monto que va a pagar sea menor o igual al valor del primer cargo

      while not dmdatos.aqfacturad.eof do
begin
      if (b > 0) and (a < b) or (a = b) then
begin
      dmdatos.aqfacturad.edit;
      res:=b-a;
      dmdatos.aqfacturadvalor.asstring:=inttostr(res);
      dmdatos.aqfacturad.post;
break;
      dmdatos.aqfacturad.next;
end;
Responder Con Cita
  #8  
Antiguo 18-07-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por donpedro Ver Mensaje
estoy utilizando el siguiente codigo pero no me ha dado resultado, porque la parte para cuando el monto que pague el estudiante sea mayor que el valor no se como manejarlo:

Hola donpedro, puedes hacer algo como esto:

Código Delphi [-]
var
 flg : boolean;
 a,b,res,x, Valor:integer;
begin
  a:=strtoint(emontoapagar.text);
  flg := False;
  With dmdatos do
  begin
   aqfacturad.first;
    While not aqfacturad.eof do
     begin
      b:=strtoint(aqfacturadvalor.asstring);
      if (a > b) then
       Valor := 0
      else
       if a>0 then
        begin
         Valor := b-a;
         flg := True;
        end;
      a := a-b;
      aqfacturad.edit;
      aqfacturadvalor.asstring:=Valor;
      aqfacturad.post;
      if Not flg then
       aqfacturad.next
      else
       break;
     end;
  end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #9  
Antiguo 18-07-2011
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Cita:
Empezado por Caro Ver Mensaje
Hola donpedro, puedes hacer algo como esto:

Código Delphi [-]
var
 flg : boolean;
 a,b,res,x, Valor:integer;
begin
  a:=strtoint(emontoapagar.text);
  flg := False;
  With dmdatos do
  begin
   aqfacturad.first;
    While not aqfacturad.eof do
     begin
      b:=strtoint(aqfacturadvalor.asstring);
      if (a > b) then
       Valor := 0
      else
       if a>0 then
        begin
         Valor := b-a;
         flg := True;
        end;
      a := a-b;
      aqfacturad.edit;
      aqfacturadvalor.asstring:=Valor;
      aqfacturad.post;
      if Not flg then
       aqfacturad.next
      else
       break;
     end;
  end;

Saluditos
Muchas gracias caro gran parte de mi duda ese codigo lo resuelve, solo falta algo me explico.

si introduzco 1500 el me coloca el primer cargo en cero y el segundo en 300 ya que el resto los 500 que sobraron al siguiente cargo....ahora:

si vuelvo y busco al estudiante para realizar otro pago el sistema no reconoce que el primer cargo esta en cero y me da el siguiente error:

no se puede encontrar la fila para su actualizacion: algunos valores han cambiado desde la ultima vez que se leyo.

tendria que colocar una condicion para identificar que si b = 0 que vaya al siguiente registro.

Gracias, Dios te bendiga
Responder Con Cita
  #10  
Antiguo 18-07-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por donpedro Ver Mensaje
tendria que colocar una condicion para identificar que si b = 0 que vaya al siguiente registro.
Hola de nuevo, si tendrías que colocar esa condición para que no tome los que ya tienen valor 0.

Código Delphi [-]
   aqfacturad.first;
   While not aqfacturad.eof do
    begin
     b:=strtoint(aqfacturadvalor.asstring);
     if b>0 then
     begin 
      if (a > b) then
       Valor := 0
      else
        .......................
        ......................... 
      a := a-b;
      aqfacturad.edit;
      aqfacturadvalor.asstring:=Valor;
      aqfacturad.post;
     end;
     if Not flg then
      aqfacturad.next
     else
      break;
    end;

otra forma para no hacer tantas condiciones, es hacer una consulta que te traiga los registros que sumen el monto a pagar sin tomar en cuenta los que tengan valor 0, así solo recorres esos registros haces el update y tendrias solo dos condiciones.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #11  
Antiguo 18-07-2011
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Mil gracias caro

tu ayuda fue de muy buena utilidad, espero tambien poder compartir parte de mis conocimientos para ayudar a otros, de la misma forma que me ayudaste.

Saluditos...
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
validar datos contra un valor de una tabla robertillo Varios 5 25-05-2007 18:58:15
Problemas para validar entrada de datos en delphi 7 Nelly Varios 1 27-03-2007 23:31:25
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12
como crear exception para validar duplicación de llaves en tabla viajero2015 Conexión con bases de datos 6 21-10-2003 09:54:09
Validar datos en dbgrid jgutti Varios 1 08-09-2003 23:49:23


La franja horaria es GMT +2. Ahora son las 09:48:56.


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