Melhor forma de trocar dois registros no TDataset Delphi?
Pergunta
Novo em Delphi e programação de banco de dados em geral, mas estou curioso para saber se existe uma maneira melhor de trocar registros em um TDataset?Li alguma ajuda e não consigo encontrar nenhum método óbvio.Atualmente tenho um procedimento implementado para mover os registros para baixo no conjunto de dados até atingirem o marcador Eof.No entanto, estou recebendo alguns erros estranhos quando chego ao último registro dos meus dados.Tudo o que tenho é implementado uma rotina de troca de estilo de array padrão tentando preservar dados e outros enfeites enquanto faz malabarismos com registros ativos.
Código até agora
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;
Solução
Parece que você está usando um conjunto de dados na memória, como TClientDataset.Se você simplesmente colocar um índice no conjunto de dados, ele manterá as coisas ordenadas para que você não precise reorganizá-las manualmente.Basta configurar o índice com base nos critérios que você deseja que ele use.