PDA

Ver la Versión Completa : Control de Datos Repetidos Delphi. (Necesito Ayuda)


napsterk89
03-03-2015, 03:09:19
Hola, tengo un problema, mañana rindo un final en Delphi y no hay forma de encontrarle solución a una parte del código, así que si alguien sabe algo lo agradecería.

Básicamente tengo que hacer un programa donde se cargan datos en un archivo y le realizo consultas. Es sobre venta de pasajes, ingreso nombre ,dni, importe, destino etc. Y luego puedo realizar consultas sobre los pagos y destinos.

Mi problema es con esta parte del enunciado:
c) NO SE PUEDE pagar más de una vez un mismo destino contratado (CONTROLAR SI YA SE REALIZÓ EL PAGO. SI YA SE HIZO MOSTRAR UN MENSAJE DE ERROR Y DESCARTAR EL PAGO, SINO ACEPTAR EL PAGO).

Lo que yo sé es que tengo que comparar el destino y el núm de doc. si son iguales significa que para ese destino con ese doc ya se realizó el pago. La comparación la haría de este modo

(Registro.NumDoc=Edit2.Text) and (Registro.Destino=Combobox2.Items[Combobox2.itemindex])

Según mi profesor tengo que utilizar un While o un Until para resolverlo. Si a alguien se le ocurre algo bienvenido sea.
Desde ya, gracias.

ecfisa
03-03-2015, 04:37:29
Hola napsterk89.

...
Lo que yo sé es que tengo que comparar el destino y el núm de doc. si son iguales significa que para ese destino con ese doc ya se realizó el pago.
...

Lo típico sería declarar un campo de pago, pero si la condición para considerar un registro pagado es tál como comentas, podrías hacer:

function IfHavePay(var FileReg: TFileReg; reg: TRegister): Boolean;
var
r: TRegister;
begin
Result:= False;
Seek(FileReg, 0);
while not Result and not Eof(FileReg) do
begin
Read(FileReg, r);
Result:= (r.NumDoc = reg.NumDoc) and (r.Destino = reg.Destino);
end;
end;


Un ejemplo de uso:

...
type
TRegister = packed record
NumDoc : string[9];
Destino: string[15];
...
end;

TFileReg = file of TRegister;
...

procedure ...
var
FileReg: TFileReg;
r: TRegister;
begin
AssignFile(FileReg, 'nombre_archivo.dat');
Reset(FileReg);

r.NumDoc := Edit2.Text;
r.Destino:= Combobox2.Items[Combobox2.itemindex];

if IfHavePay(FileReg, r) then
ShowMessage('Pagado')
else
ShowMessage('Impago');

CloseFile(FileReg);
end;


Saludos :)