Ver Mensaje Individual
  #2  
Antiguo 26-06-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Lo mejor, creo yo, es hacer un select del código para ver si te devuelve algo. Si devuelve algo, quiere decir que ya existe y deberás evitar ese insert.
Para esto, los DataSets tiene los métoso onBeforeInsert/onBeforeUpdate

También puedes poner algo en la base de datos que no permita duplicados. Puede ser:
un PrimaryKey
un UniqueKey
un Trigger que se encargue de verificarlo.

Si de todos modos quieres hacerlo mediante el dataset en memoria:

Primero guarda el código de dónde estás.
Luego deshabilitas el dataset, para que no se refresquen los datos mientras hacer el recorrido
Recorres buscando lo el código
Vuelves a posicionarte en el código que guardaste
Habilitas el dataset

Código Delphi [-]
with DataSet do
begin
   DisableControls;
   try
      // Codigo que queremos verificar si está repetido.
      Codigo := DataSet.Codigo;
      // Algo para saber cual es el registro en el que estas
      idRegistro := DataSet.IdRegistro;

      First;
      while ((not EOF) and (DataSet.IdRegistro <> IdRegistro) and (Codigo <> DataSet.Codigo)) do
         Next;

      // Si llegue al final y en este registro no se cumple la condición quiere decir que no existe
      if ((EOF) and (DataSet.IdRegistro <> IdRegistro) and (Codigo <> DataSet.Codigo)) then
         Duplicado := False;

      // Vuelvo a reposicionar el registro
      First;
      while ((not EOF) and (DataSet.IdRegistro <> IdRegistro)) do
         Next;
   finally
      EnableControls;
   end;
end

Nota: Si estás insertando o editando, este método no sirve, porque al moverte deberás hacer un Post o un Cancel
Responder Con Cita