Hola.
Perdón que reabra este post después de tanto tiempo de inactividad pero digamos que estuve ausente del tema por algunos problemas.
Retomando lo que preguntaba y, viendo que Casimiro Notevi ya me contestó que, en principio, todo se veía más o menos bien, quería añadir lo siguiente:
Si tengo dos tablas, una de productos y otra de precios.
Cuando doy de alta un producto, lo que hago es lo siguiente:
Bueno, lo primero es tener asignadas las tablas y abiertas.
Código Delphi
[-]
with modulodatos do
begin
ibproductos.SelectSQL.clear;
ibproductos.selectsql.Text:='select * from productos';
ibproductos.Open;
ibprecios.SelectSQL.clear;
ibprecios.selectsql.Text:='select * from precios';
ibprecios.Open;
end;
Código Delphi
[-]with modulodatos do
begin
ibproductos.insert;
ibproductos.fieldbyname('codigo_barras').asstring;
ibproductos.fieldbyname('nombre_producto').asstring;
ibproductos.post;
ibtransaction1.CommitRetaining;
ibtemporal.selectsql.clear;
ibtemporal selectsql.text:='select max(id_producto) as ultimo_id from productos'; ibtemporal.open;
ultimo_producto:=ibtemporal.fieldbyname('ultimo_id').asstring;
ibprecios.insert;
ibprecios.fieldbyname('id_producto').asinteger:=ultimo_producto;
ibprecios.fieldbyname('precio_costo').asfloat:=precio_costo;
ibprecios.post;
ibtransaction1.commitretaining;
end;
En principio eso funciona sin mayor problema, imagino que no es la mejor manera de programarlo.
Sólo tengo el problema si quiero hacer esto:
Código Delphi
[-]
producto_registrado:=ibproducto.fieldbyname('id_producto').asinteger;
nombre_producto:=ibproducto.fieldbyname('nombre_producto').asstring;
Es el último producto que acabo de añadir.
El id_producto aparece en 0 pero el nombre_producto si me lo devuelve.
Si le añado un dbgrid para probar, el id_producto aparece vacío.
Ya he probado a cerrar la tabla y vuelto a abrir, a refrescarla, ... Pero con los mismos resultados.
La idea de todo lo anterior, es poder insertar un producto y tambien su precio en otra tabla.
Perdonen que ande preguntando sobre estas cosas, sé que son cosas muy básicas pero no consigo resolverlas.
Gracias.