¿La mejor manera de intercambiar dos registros en TDataSet Delphi?
Pregunta
Nuevo en Delphi y la programación de bases de datos en general, pero con curiosidad, ¿si hay una mejor manera de intercambiar registros en un TDataSet?He leído a través de alguna ayuda y no puedo encontrar ningún método obvio.Actualmente tengo un procedimiento implementado para mover registros en el conjunto de datos hasta que golpeen el marcador EOF.Sin embargo, estoy obteniendo algunos errores extraños cuando llego al último registro en mis datos.Todo lo que he implementado, se implementa una rutina de intercambio de estilo de matriz estándar que intenta preservar los datos y no, mientras hace malabares con registros activos.
Código hasta ahora
procedure TForm2.btnDownClick(Sender: TObject);
var
sTmp,sTmp2 : string;
iTmp,iTmp2 : integer;
begin
tblMatched.DisableControls;
if ( tblMatched.Eof <> true ) then
begin
// Grab data to swap
tblMatched.GotoBookmark( tblMatched.GetBookmark );
iTmp := tblMatched.Fields[0].AsInteger;
sTmp := tblMatched.Fields[1].AsString;
tblMatched.Next;
iTmp2 := tblMatched.Fields[0].AsInteger;
sTmp2 := tblMatched.Fields[1].AsString;
// Swap data
tblMatched.Prior;
tblMatched.Edit;
tblMatched.Fields[0].Value := iTmp2;
tblMatched.Fields[1].Value := sTmp2;
tblMatched.Next;
tblMatched.Edit;
tblMatched.Fields[0].AsInteger := iTmp;
tblMatched.Fields[1].AsString := sTmp;
end;
tblMatched.EnableControls;
end;
Solución
Parece que está utilizando un conjunto de datos en memoria, como TclientDataset.Si simplemente coloca un índice en el conjunto de datos, mantendrá las cosas ordenadas para usted para que no tenga que reorganizarlas manualmente.Simplemente configure el índice según cualquier criterio que desee tenerlo.