Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-09-2016
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Problema al Insertar un Registro en una Tabla

Saludos

Estoy usando D2009 con Firebird 2.1,, hice un formulario para insertar registro en una tabla,,, En este formulario uso un DbGrid, componentes TIBDataset y unos botones para que el usuario seleccione que quiere hacer (Insertar, Editar, Eliminar,etc),, todo funciona bien , el problema es que por alguna razón que desconozco cuando el usuario trata de insertar un Registro y Cancela la operación el puntero de la tabla se va al ultimo registro mostrado del DbGrid... en vez de quedarse en el registro antes de realizar la operación ...

Alguien sabe porque sucede esto ?,, es una propiedad del TIBDataset ?? ,, del DbGrid ??

Gracias de Antemano
Responder Con Cita
  #2  
Antiguo 11-09-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hay que ver tu código.
Responder Con Cita
  #3  
Antiguo 12-09-2016
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Puesto lo tienes bien facil, guarda donde esta el puntero actualmente y al cancelarlo que regrese donde estaba pasando el puntero guardado.


Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #4  
Antiguo 12-09-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Haces algo al cancelar con ese mismo Dataset?
¿Se está disparando algún evento cuando cancelas?

Coincide con Casimiro. Difícil saber qué puedes estar pasando sin ver el código.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 15-09-2016
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Gracias a Todos por los aportes...

Solo me pasa cuando trato de INCLUIR un registro y si el usuario cancela ejecuto el evento
Código Delphi [-]
CANCEL
.. se mueve,,

Estoy usando para incluir y editar los mismo eventos, la única diferencia es que por supuesto cuando le doy incluir uso en el Evento
Código Delphi [-]
onnewrecord
para inicializar algunos campos incluso los claves.
Responder Con Cita
  #6  
Antiguo 15-09-2016
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
Cita:
ejecuto evento
No me quedo nada claro lo que haces. No deberia ser tu codigo el que invoca directamente a los eventos de los componentes/controles; los eventos estan para que el framework los invoque. Esto se conoce como Hollywood principle/Inversion de Control. Se reduce a basicamente "no me llames, yo te llamo", de ahi lo de "hollywood"

Copia y pega codigo real
Responder Con Cita
  #7  
Antiguo 15-09-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Efren2006.
Cita:
Empezado por Efren2006 Ver Mensaje
...
Solo me pasa cuando trato de INCLUIR un registro y si el usuario cancela ejecuto el evento
Código Delphi [-]
CANCEL
.. se mueve
...
Es un comportamiento del TIBDataSet...

Una solución para tu caso es:
Código Delphi [-]
...
type
  TForm = class(TForm)
    IBDataSet1: TIBDataSet;
    ...
    procedure IBDataSet1AfterCancel(DataSet: TDataSet);
    procedure IBDataSet1BeforeInsert(DataSet: TDataSet);
    ...
   private
     FBookMark: Pointer; 
   ...

implementation

...
// TIBDataSet - BeforeInsert
procedure TForm.IBDataSet1BeforeInsert(DataSet: TDataSet);
begin
  FBookMark := DataSet.GetBookmark;
end;

// TIBDataSet - AfterCancel
procedure TForm.IBDataSet1AfterCancel(DataSet: TDataSet);
begin
  DataSet.GotoBookmark(FBookMark);
  DataSet.FreeBookmark(FBookMark)
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 16-09-2016
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
ecfisa

Es un comportamiento propio del Componente TIBDataSet ? .. por lo que me comentas no existe una propiedad o algo del componente que lo solucione ,, debo controlarlo manualmente como me comentas ?
Responder Con Cita
  #9  
Antiguo 16-09-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si haces un insert/append es lógico que haga eso, aunque yo trabajo de otra forma.
Tú haces el dataset.insert, el usuario teclea y luego commig o cancel. Mi forma de trabajar es distinta:
El usuario pulsa en el botón de "nuevo", muestro un formulario, lo rellena, y luego si pulsa en 'aceptar', hago el insert en la tabla. Y si pulsa en 'cancelar' cierro el formulario. Como ves de esta forma no afecta en nada al dataset, y por lo tanto tampoco al datasource ni al dbgrid.
Responder Con Cita
  #10  
Antiguo 16-09-2016
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
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Si haces un insert/append es lógico que haga eso, aunque yo trabajo de otra forma.
Tú haces el dataset.insert, el usuario teclea y luego commig o cancel. Mi forma de trabajar es distinta:
El usuario pulsa en el botón de "nuevo", muestro un formulario, lo rellena, y luego si pulsa en 'aceptar', hago el insert en la tabla. Y si pulsa en 'cancelar' cierro el formulario. Como ves de esta forma no afecta en nada al dataset, y por lo tanto tampoco al datasource ni al dbgrid.
+1, yo utilizo el mismo concepto y me parece la forma mas correcta de trabajar
Responder Con Cita
  #11  
Antiguo 16-09-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Efren2006.
Cita:
Empezado por Efren2006 Ver Mensaje
ecfisa

Es un comportamiento propio del Componente TIBDataSet ? .. por lo que me comentas no existe una propiedad o algo del componente que lo solucione ,, debo controlarlo manualmente como me comentas ?
Los componentes dbExpress, ADO y BDE no tienen ese comportamiento, pero no me animaría a afirmar que sea exclusivo del IBDataSet.

No conozco otro método que el que te expuse para evitar el desplazamiento visual del cursor en el DBGrid.

De todos modos, no estoy sugeriendote que sea una buena forma de trabajo, sólo te indiqué una solución al problema puntual que nos presentaste.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 16-09-2016
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Entiendo ..

Gracias a todos por sus comentarios y acotaciones ... tomare los cambios y sugerencias necesarias para resolver el problema

Saludos
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
Problema al insertar un registro a una tabla egostar Firebird e Interbase 8 09-08-2008 01:34:29
como insertar un registro en dos tabla kurono Varios 13 27-05-2008 02:49:48
Insertar registro en una tabla efelix Conexión con bases de datos 21 05-12-2006 18:13:50
Insertar un registro en una tabla Paradox maravert Tablas planas 1 14-10-2005 02:08:02
Insertar registro en tabla jzk Conexión con bases de datos 15 26-05-2004 18:58:19


La franja horaria es GMT +2. Ahora son las 20:03:46.


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