Una pequeña puntualización:
No estás copiando nada. En memoria RAM, solo tienes un conjuto de registros al que accedes desde dos punteros:
- uno el "dm.Ibdataset1"
- otro puntero el "cv"
Si cierras la consulta mediante el "cv" o mediante el "dm.Ibdataset1", estás actuando sobre los mismos datos.
Lo normal es tener un IBdataset por cada tabla que quieras modificar. En todas las aplicaciones, tengo una rutina del tipo:
Código Delphi
[-]
function CreaQry(const TheSql:string):Tibquery;
begin
Result := Tibquery.create(nil);
Result.Database := midtb;
Result.Transaction := trans1;
Result.sql.text := TheSql;
end;
Ahora solo tienes que llamar a la función así:
Código Delphi
[-]
var q:Tibquery;
begin
q := CreaQry('update tabla set miCampo = 3 where codigo =2');
q.ExecSql;
q.Sql.Text := 'select * from tabla';
q.Open;
....
FreeAndnil(q);
Saludos