Saludos amigos,
En un entorno multiusuario, garantizar que las IDs (PKs) son únicas es parte fundamental de cualquier sistema bien estructurado.
Actualmente, por ejemplo yo hago lo siguiente:
Código Delphi
[-]
for i := 1 to StrToInt(txtNroPagosTDR.Text) do
begin
idPago:=clsFx.CalcIDNewPago;
try
dm.q_INSPagoIni.Close;
dm.q_INSPagoIni.Params[0].AsLargeInt:=idPago;
dm.q_INSPagoIni.Params[1].AsLargeInt:=IdObjeto;
dm.q_INSPagoIni.Params[2].AsInteger:=i; dm.q_INSPagoIni.Params[3].AsString:='0'; dm.q_INSPagoIni.Params[4].AsSmallInt:=1; dm.q_INSPagoIni.Params[5].AsFloat:=montoCuota;
dm.q_INSPagoIni.ExecSQL;
savedOk:=True;
except
savedOk:=False;
end;
if not savedOk then
begin
ShowMessage('Error: No se pudo Insertar el Registro de Pago - Cuota Simple');
exit;
end;
end;
Función:
Código Delphi
[-]
function TFunciones.CalcIDNewPago: LongInt;
begin
dm.q_CalcIDNewPago.Close;
dm.q_CalcIDNewPago.Open;
result:=dm.q_CalcIDNewPago.Fields[0].AsLargeInt;
end;
Consulta q_CalcIDNewPago:
Código SQL
[-]
if((select top 1 id_pago from gestion.pago) is null) select 1;
else select max(id_pago)+1 from gestion.pago
sin embargo, no estoy seguro que sea la mejor forma de hacerlo.
Cualquier aporte será bienvenido.
Atte,
Américo