Ver Mensaje Individual
  #1  
Antiguo Hace 2 Semanas
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 241
Reputación: 14
darkamerico Va por buen camino
Red face El mejor método para generar IDs en tablas de movimiento

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;   // NroPago
                  dm.q_INSPagoIni.Params[3].AsString:='0';  // Estado Pendiente
                  dm.q_INSPagoIni.Params[4].AsSmallInt:=1;  // Tipo Cronograma Principal
                  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
Responder Con Cita