Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por contestar Casimiro Notevi,
Si, lo que hago es eso, poner una base de datos, la transaccion, un dataset y un datasource todo en un datamodule.
Por lo que me dices, puedo poner datamodules separados y los datasource acompañando en los forms donde vayan por ejemplo los dbgrid.
De todas formas, ponerlos juntos o separados no debe de influir solo seria por estetica de diseño?.

Entiendo ademas que, segun lo que he descrito en el primer mensaje del post, esta correcta la forma: insertar o edit, asignar y postear, despues tan solo hace un commitretaining. No debiera de haber problemas.

Gracias de nuevo.
Responder Con Cita
  #2  
Antiguo 08-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por anubis Ver Mensaje
De todas formas, ponerlos juntos o separados no debe de influir solo seria por estetica de diseño?.
No es por estética, es porque la conexión a la base de datos y transacción sirve para todo el programa y, sin embargo, el datasource de un dbgrid es solamente para ese dbgrid que está en un form. Y es más cómodo asignarlo porque no hay que incluir en el uses el datamodule, ni tampoco hay que escribir más código innecesario: datamodulexx.datasource.....
Cita:
Empezado por anubis Ver Mensaje
Entiendo ademas que, segun lo que he descrito en el primer mensaje del post, esta correcta la forma: insertar o edit, asignar y postear, despues tan solo hace un commitretaining. No debiera de haber problemas.
Es muy difícil poder aconsejar porque no podemos ver nada más, ni siquiera sabemos qué parámetros has puesto en las transacciones.
Responder Con Cita
  #3  
Antiguo 09-08-2016
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Ah perdon,
en transaction tengo:
defaultaction->tacommitretaining

en parametros
read_commited
rec_version
nowait

del resto, no se que mas opciones comentaros.
Responder Con Cita
  #4  
Antiguo 09-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En principio, todo bien, tendrás que verificar exactamente qué datos son esos que se pierden y verificar esa parte de tu código.
Porque perderse datos es imposible, salvo que los borren a propósito.
Responder Con Cita
  #5  
Antiguo 21-02-2017
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
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'; // para sacar el último producto que acabo de añadir.
   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.
Responder Con Cita
  #6  
Antiguo 21-02-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cuando grabas el precio, en el medio pedís el último ID del producto. Ese paso se hace correctamente? Es decir, se graba el ID correspondiente, o te graba 0? Estás usando un generador para el ID?
Responder Con Cita
  #7  
Antiguo 21-02-2017
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por contestar .

Si, al pedir el ultimo id si lo saca correctamente, de momento no he tenido problemas con eso.

El problema lo tengo cuando quiero sacar el id directamente de la tabla productos de ese registro. Algo me debe de faltar en la transaccion, la tabla, la base de datos o no se, para que actualice id_producto.

O no se como debiera de hacerse.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
forma de programar no se si es la correcta ? gulder MySQL 4 05-04-2016 17:49:51
Liberar Tlist de forma correcta BDWONG Varios 3 01-11-2014 17:28:46
Forma correcta de conectar a la base.. linuxtin Conexión con bases de datos 4 19-07-2012 20:30:20
validar usuarios de forma correcta hibero PHP 3 04-01-2010 15:47:04
Cual es la Forma Correcta de Guardar Texto en un IbDataset con TcpServer???? AGAG4 Varios 0 10-12-2004 22:14:41


La franja horaria es GMT +2. Ahora son las 05:22:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi