Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   calcular e intercambiar datos entre dos o mas tablas (https://www.clubdelphi.com/foros/showthread.php?t=82120)

miguelgalindo87 30-01-2013 01:35:40

calcular e intercambiar datos entre dos o mas tablas
 
Primero que nada un cordial saludo a todos los participantes el foro. Al igual que todos necesito ayuda urgente con un problemita que tengo, les cuento:

estoy diseñando una aplicación de facturación con 3 tablas sencillas(paradox 7)
tcliente(contiene todos los datos ci,direccion,nombre y apellidos)
tdeuda(contiene la ci(como clave principal)y los meses del año como en un control de pago manual)
tfactucar( contiene los datos de la factura el monto, numero de factura, fecha, a quien fue realizada y el concepto o detalle de la misma)
hasta aqui todo va bien(creo yo)puedo editar los registros existentes...

El detalle es que un usuario puede facturar varios años(logicamente) pero cuando voy a agregar otro registro a la tabla tdeuda se tranca el programa y tengo varios errores entre los cuales destaca 'key violation'.
Código Delphi [-]
este es el boton calcular donde hago los procesos necesarios
 if(data.tdeuda.FieldByName('AÑO').AsInteger=strtoint(edit3.Text))then
begin
//parte en la que agrego registros a la tabla factura//
data.tfactura.Locate('CEDULA',Edit2.Text,[]);
data.tfactura.edit;
data.tfactura.FieldByName('DETALLE').AsString:= cadena;
data.tfactura.FieldByName('MONTO').NewValue:=total;
data.tfactura.FieldByName('AÑO').AsString:=edit3.Text;
data.tfactura.ApplyUpdates;
//parte en la que agrego registros a la tabla factura//
//parte en la que agrego registros a la tabla deuda//
data.tdeuda.Edit;
data.tdeuda.FieldByName('ENERO').AsInteger:= data.tfactura.FieldValues['Nº DE RECIBO'];
data.tdeuda.FieldByName('FEBRERO').AsInteger:= data.tfactura.FieldValues['Nº DE RECIBO'];
data.tdeuda.ApplyUpdates;
end;
//prueba del if si sirve condiciono la entrada segun los checklist//
if(data.tdeuda.FieldByName('AÑO').AsInteger<>STRTOINT(EDIT3.Text)) THEN
begin
showmessage('Año No Existe, Se Factura Otro Año');
data.tfactura.Append;
data.tdeuda.Append;
data.tdeuda.FieldByName('AÑO').NewValue:=strtoint(edit3.Text);
data.tdeuda.FieldByName('CEDULA_CLIENTE').AsInteger:= strtoint(edit2.Text);
data.tdeuda.FieldByName('ENERO').NewValue:= data.tfactura.FieldValues['Nº DE RECIBO']; //FALTA VALIDACION SEGUN CHECKLIST//
data.tfactura.FieldByName('DETALLE').AsString:= cadena;
data.tfactura.FieldByName('MONTO').NewValue:=total;
data.tfactura.FieldByName('Nº DE RECIBO').NewValue:= data.tfactura.FieldValues['Nº DE RECIBO']*2;
data.tfactura.FieldByName('AÑO').AsString:=edit3.Text;

data.tfactura.ApplyUpdates;
data.tdeuda.ApplyUpdates;

end;
end;

seria muy gentil de su parte colaborarme con mis errores

ecfisa 30-01-2013 15:56:08

Cita:

El detalle es que un usuario puede facturar varios años(logicamente) pero cuando voy a agregar otro registro a la tabla tdeuda se tranca el programa y tengo varios errores entre los cuales destaca 'key violation'.
Hola miguelgalindo87.

En principio sólo puedo opinar sobre el error que comentas: Key violation. Este se produce por que estas intentando guardar un registro en el que el campo declarado como Primary Key ya existe en la tabla.

Como estimo que los campos que has elegido como Primary Key, los has declarado autoincrementales para evitar duplicaciónes, revisa si te sirve este enlace: key violation en paradox

Saludos.

miguelgalindo87 02-02-2013 05:49:42

muchas gracias eficsa lo revisare y dare mi resultado y ya vi que he hecho varias cosas mal


La franja horaria es GMT +2. Ahora son las 10:10:45.

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