FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Post de las tablas
Hola a todos:
Tengo un problema con el post de las tablas, en que consiste este? pues tengo 3 tablas de las cuales 1 es la maestra y 2 las hijas, y al momento de hacer el post de la maestra primero se va al beforepost de la ultima hija sin que yo haya mendado a ejecutar el post previamente de ella y es que priimero necesito ejecutar el post de la trabla maestra ya que en base a ello obtengo los campos de serie y numero que sirven de base para ligarlas con las 2 hijas. a que se debe que ejecute primero el beforepost del la hija y como puedo hacer para haga primero post de la tabla maestra. Desde ya muchas gracias Reciban un coordial saludo |
#2
|
||||
|
||||
Si vas a añadir un registro en la hija, es lógico que al guardarlo, se haga en la hija, y el beforePost de la maestra no ocurra.
En las tablas hijas, en sus evento BeforePost, añade un Maestra.Edit guarda lo que necesites y haz el post de la maestra. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
|||
|
|||
pues se me hace raro el problema seguro que no tienes el beforepost del maestro apuntando al de detalle o algo asi?, a mi nunca me ha pasado, sin embargo, en el before post de la del detalle, revisa si esta la tabla en modo de insercion o de edicion, como no va a estar (bueno, se supone) entonces no hara nada en el before post de la hija...
|
#4
|
|||
|
|||
primero antes que nada gracias por sus respuestas.
esta asi la situación tengo una forma el la cual tengo 3 ttable, la primera que es la maestra, despliega la información principalmete en dbedits, las otras 2 estan apuntando cada una a un dbgrid respectivamente, y tengo un boton para guardar la información entonces a la hora de presionarlo manda a hacer el post de las 3 tablas pimero el de la maestra si estado de edicion o inserción y posteriormente el de las detalle. Y validando que este la maestra en estado de inserción o edicion, mando a ejecutar el post de de dicha tabla, y sabiendo que existe un registro tambien de inserción en una de las tablas detalle, me manda a ejecutar primero el beforepost de la tabla datalle, a pesar de que yo le mande a ejecutar primero el post de la maestra, y es que necesito que haga primero el de la maestra para obtener los valores de los campos que van a relacionar dichas tablas |
#5
|
||||
|
||||
Pues tendrás un código que hace que se mueva el registro activo en la maestra o algo por el estilo, y hace que se guarde primero el detalle.
Tendrás que mostrar el código que usas para guardar el maestro y los detalles. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
|||
|
|||
este es el codigo que estoy utilizando
bueno solo la parte que manda a guardar Código:
procedure Tsilfpe0001.TB_SalvarClick(Sender: TObject); begin if sistema_lw_trigger_pedi = 'UPDATE' then begin if sil_pedi_lw_cambio_datos = 'S' then begin sistema_lw_ejecuta_bitacora := 'TRUE'; if sistema_lw_ejecuta_bitacora = 'TRUE' then begin Application.CreateForm(Tsilfpe0001_Bitacora_Cambios_Pedidos,silfpe0001_Bitacora_Cambios_Pedidos); silfpe0001_Bitacora_Cambios_Pedidos.ShowModal; end; sistema_lw_ejecuta_bitacora := 'FALSE'; end; end; sistema_lw_ejecuta_bitacora := 'FALSE'; if T_PEDI.State <> dsBrowse then COMPLEMENTA_PEDIDO(); {Stores.SIL_P_COMPLEMENTA_PEDIDO(T_PEDI.FieldByName('pedi_serie').Value, T_PEDI.FieldByName('pedi_numero').Value, lw_error); if not(VarIsNull(lw_error)) and (lw_error <> '') then begin Application.MessageBox(PChar(lw_error), 'SIL Light', mb_ok+mb_iconinformation); Abort; end;} sil_pedi_lw_usuario_autoriza := T_PEDI.FieldValues['pedi_usuario_autoriza']; sil_pedi_lw_clave_autoriza := T_PEDI.FieldValues['pedi_clave_autoriza']; sil_pedi_lw_pedi_estatus := T_PEDI.FieldValues['pedi_estatus']; sil_pedi_lw_ante_estatus := sil_pedi_lw_pedi_estatus; sil_pedi_lw_prod_original := NVL(T_PEDI.FieldValues['pedi_prod_clave'],''); sil_pedi_lw_cant_fec_actual := FPE0001_CANTIDAD_FECHA(gw_plan_clave,T_PEDI.FieldValues['pedi_fecha_suministro'],T_PEDI.FieldValues['pedi_serie'],T_PEDI.FieldValues['pedi_numero'],'A'); sil_pedi_lw_cant_fec_ante := FPE0001_CANTIDAD_FECHA(gw_plan_clave,T_PEDI.FieldValues['pedi_fecha_suministro'],T_PEDI.FieldValues['pedi_serie'],T_PEDI.FieldValues['pedi_numero'],'O'); //Aquie es la parte donde mandoa guardar la tabla maestra T_PEDI y los detalles T_BOPE Y T_DEPE if T_PEDI.State in [dsInsert, dsEdit] then T_PEDI.Post; if T_BOPE.State in [dsInsert, dsEdit] then T_BOPE.Post; if T_DEPE.State in [dsInsert, dsEdit] then T_DEPE.Post; PPE0001_INSERTA_PROG_PEDIDO; //inserta programacion de pedidos Q_Consulta.Close; Q_Consulta.SQL.Clear; Q_Consulta.SQL.Add(' UPDATE sil_programas_pedido '); Q_Consulta.SQL.Add(' SET prpe_pedi_serie = :gw_pedi_serie, '); Q_Consulta.SQL.Add(' prpe_pedi_numero = :gw_pedi_numero '); Q_Consulta.SQL.Add(' WHERE prpe_pedi_serie = ''X'' '); Q_Consulta.SQL.Add(' AND prpe_pedi_numero = 0 '); Q_Consulta.ParamByName('gw_pedi_serie').Value := DBE_Pedi_Serie.Text; Q_Consulta.ParamByName('gw_pedi_numero').Value := DBE_Pedi_Numero.Text; Q_Consulta.ExecSQL; A_PRPE := NIL; //limpia el arreglo end; //aqui es donde surge el problema porque en lugar de hacer directamente el boforepost de PEDI hace el de DEPE procedure Tsilfpe0001.T_PEDIBeforePost(DataSet: TDataSet); begin if T_PEDI.State = dsInsert then begin PEDI_PRE_INSERT(); end else if T_PEDI.State = dsEdit then begin PEDI_PRE_UPDATE(); end; end; procedure Tsilfpe0001.T_BOPEBeforePost(DataSet: TDataSet); begin if not(T_BOPE.FieldByName('bope_pedi_serie').IsNull) and not(T_BOPE.FieldByName('bope_pedi_numero').IsNull) then begin if T_BOPE.State = dsInsert then begin T_BOPE_PRE_INSERT; silfse0000.Trigger_Insert(DataSet); sistema_lw_trigger_bope := 'INSERT'; end; if T_BOPE.State = dsEdit then begin T_BOPE_PRE_UPDATE; silfse0000.Trigger_Update(DataSet); sistema_lw_trigger_bope := 'UPDATE'; end; end else begin T_BOPE.Cancel; Abort; end; end; procedure Tsilfpe0001.T_DEPEBeforePost(DataSet: TDataSet); begin if not(T_DEPE.FieldByName('depe_pedi_serie').IsNull) and not(T_DEPE.FieldByName('depe_pedi_numero').IsNull) then begin if T_DEPE.State = dsInsert then begin T_DEPE_PRE_INSERT; silfse0000.Trigger_Insert(DataSet) end; end else begin T_DEPE.Cancel; Abort; end; end; gracias Lepe por el apoyo |
#7
|
||||
|
||||
Lo mismo para la tabla Depe. Prueba eso y si persiste los problemas, ya despues nos metemos con otras dudas que tengo sobre el código. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
|