Creo te estas complicando la vida. Es normal cuando se empieza con Firebird, aquí la solución:
Uso del TIbDataset (todo en tiempo de diseño !!):
- Asignar la Base de datos y transaction
- Asignar el Select "select * from tabla where claveprimaria = :clave"
- Usar el evento beforeOpen del TibDataset y poner:
ibdataset1.parambyname('clave').Asxxxx := lo que sea;
- Boton derecho sobre el TIbdataset y "Dataset Editor"
Saldrá una ventana con todos los campos de la tabla, pulsa los 3 botones que tienes a la izquierda (no hace falta encomillar los nombres de los campos si no usas espacios en dichos nombres.
- por curiosidad, mira las sqls que propone el componente (insert sql, delete, update, etc)
-Acepta la ventana.
Ahora el código:
Código Delphi
[-]
dmDatos.dsArticulos.Open;
dmDatos.dsArtículos.Edit;
dmDatos.dsArticulos.FieldByName('Referencia').AsString:= dmDatos.dsArticulosREFERENCIA.Value;
dmDatos.dsArticulos.Post;
---- hacer el commit o commitRetaining ---
dmDatos.Close;
dmDAtos.Open;
Las 3 últimas líneas quizás no te hagan falta, si tiene el objeto transaction configurado para que automáticamente haga el commitRetainig después del Post, suprime las 3 últimas líneas
Como ves he usado un select que solo trae un registro a la vez, se supone es lo más efiiciente y como debería hacerse. En caso de usar un "Select * from tabla order by nombre", no hace falta usar el evento BeforeOpen, ni tampoco pasar parámetros.
Saludos