In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
oDBBrowse:Insert() no funciona correctamente
oDBBrowse:Insert() no funciona correctamente
Buenas, mucho tiempo sin escribir... sera por que hasta hoy no me he dado de canto con los dientes
Pues liado con el tema de hacer mi aplicación funcional ya sea con DBFs, SQLite o MariaDB, segun me de el caso de mis clientes o hasta no ser 100% operativo a los 3 motores, seguira funcionando con mis queridas DBFs...
Resulta que por mas que pruebo, estoy atorado y me decido a probarlo en el Sample de Xailer, cuando veo que no es error de mi programación, sinó que en ese Sample también ocurre.
Decir que estoy utilizando Xailer 3.3.1.
El problema esta en el método Insert() de un DBBrowse. Su funcionamiento correcto seria de "INSERTAR" una linea para editar un nuevo registro... pues no es así, el comportamiento de INSERT() en el DBBrowse es el de APPEND(), o sea se va al final del browse a crear ese nuevo registro.
de hecho, en el BrwEdit de Samples de Xailer, he añadido un boton nuevo en la pestaña DataSets que OnClick = {|| ::oDBBrowse1:Insert() }
y refleja perfectamente esta anomalia.
El comportamiento en el DbfBrowse es correcto, como el ArrayBrowse, NO así el DBBrowse
adjunto sample con el añadido.
Un Saludo,
Xevi.
Pues liado con el tema de hacer mi aplicación funcional ya sea con DBFs, SQLite o MariaDB, segun me de el caso de mis clientes o hasta no ser 100% operativo a los 3 motores, seguira funcionando con mis queridas DBFs...
Resulta que por mas que pruebo, estoy atorado y me decido a probarlo en el Sample de Xailer, cuando veo que no es error de mi programación, sinó que en ese Sample también ocurre.
Decir que estoy utilizando Xailer 3.3.1.
El problema esta en el método Insert() de un DBBrowse. Su funcionamiento correcto seria de "INSERTAR" una linea para editar un nuevo registro... pues no es así, el comportamiento de INSERT() en el DBBrowse es el de APPEND(), o sea se va al final del browse a crear ese nuevo registro.
de hecho, en el BrwEdit de Samples de Xailer, he añadido un boton nuevo en la pestaña DataSets que OnClick = {|| ::oDBBrowse1:Insert() }
y refleja perfectamente esta anomalia.
El comportamiento en el DbfBrowse es correcto, como el ArrayBrowse, NO así el DBBrowse
adjunto sample con el añadido.
Un Saludo,
Xevi.
- Adjuntos
-
- BrwEdit.zip
- (3.41 KiB) Descargado 126 veces
Un Saludo,
Xevi.
Xevi.
Re: oDBBrowse:Insert() no funciona correctamente
Hola amigo:
Yo creo que es debido a que la propiedad lAllowInsert esta asignada a .F. (False) en modo diseño, puedes cambiarla a .T. y veras como funciona bien
Al menos a mi, si que me funciona.
Saludos y feliz fin de semana.
Jose Vte.
Yo creo que es debido a que la propiedad lAllowInsert esta asignada a .F. (False) en modo diseño, puedes cambiarla a .T. y veras como funciona bien
Al menos a mi, si que me funciona.
Saludos y feliz fin de semana.
Jose Vte.
Re: oDBBrowse:Insert() no funciona correctamente
Jose,
No, NO es eso... el sample que he adjuntado, aunque se cambie la propiedad lAllowInsert a .T. el metodo Insert() continua comportándose como el Append()
Si a ti te funciona el Sample que he adjuntado, por favor, dime en que version de Xailer lo estas compilando, porque corriendo con la 3.3.1 no funciona correctamente.
Un Saludo,
Xevi.
No, NO es eso... el sample que he adjuntado, aunque se cambie la propiedad lAllowInsert a .T. el metodo Insert() continua comportándose como el Append()
Si a ti te funciona el Sample que he adjuntado, por favor, dime en que version de Xailer lo estas compilando, porque corriendo con la 3.3.1 no funciona correctamente.
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
Re: oDBBrowse:Insert() no funciona correctamente
Acabo de descargar la DEMO de la version 4 de Xailer, con su respectivo Harbour...
El comportamiento anómalo persiste.
Un Saludo,
Xevi.
El comportamiento anómalo persiste.
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
Re: oDBBrowse:Insert() no funciona correctamente
Cierto Xevi.
No funciona, pero te puedo asegurar que ayer me funcionaba perfectamente.
Hoy volviendo a instalar el ejemplo limpio sin ninguna modificación y probando con el botón no funciona.
Se comporta como un Append().
Tienes razón, lo que no se es porque ayer funciono. :oops: , perdona por la información errónea.
Saludos.
Jose Vte.
No funciona, pero te puedo asegurar que ayer me funcionaba perfectamente.
Hoy volviendo a instalar el ejemplo limpio sin ninguna modificación y probando con el botón no funciona.
Se comporta como un Append().
Tienes razón, lo que no se es porque ayer funciono. :oops: , perdona por la información errónea.
Saludos.
Jose Vte.
Re: oDBBrowse:Insert() no funciona correctamente
Ignacio,
alguna solución???
Un Saludo,
Xevi.
alguna solución???
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
Re: oDBBrowse:Insert() no funciona correctamente
Arriba!!!
A ver alguien del equipo lo ve y lo contesta.
Un Saludo,
Xevi.
A ver alguien del equipo lo ve y lo contesta.
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
Re: oDBBrowse:Insert() no funciona correctamente
Otra vez arriba!!!
A ver si alguien puede contestar este mensaje, si se trata de bug, clase inacabada,...
En fin, así sigo.
Un Saludo,
Xevi.
A ver si alguien puede contestar este mensaje, si se trata de bug, clase inacabada,...
En fin, así sigo.
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
Re: oDBBrowse:Insert() no funciona correctamente
Hola amigo Xevi:
Dos cosas, una la gente no esta mucho por ayudar, ya se que es libre y tal no perdáis tiempo, otra si es un bug como parece el equipo Xailer debería de tenerlo en cuenta.
Raro es que nadie se haya dado cuenta hasta ahora de dicho comportamiento.
A ver si acotamos el problema.
En la ayuda de Xailer La clase TDBBrowse no tiene explicado el método Insert, supongo que será porque deriva de TBrowse y allí si esta explicado pero dice que no tiene ningún parámetro y si
vamos a los fuentes del DBBrowse tiene este código:
METHOD Insert( lFromUser ) CLASS XDBBrowse
LOCAL xRet
xRet := ::OnInsert()
IF Valtype( xRet ) == "L" .AND. !xRet
RETURN .F.
ENDIF
RETURN ::Append( lFromUser )
Como podemos ver se le puede pasar un parámetro lógico, también a Append(lFromUser), Delete....
Mirando el código vemos esta línea
xRet := ::OnInsert()
Con lo poco de Xailer que se...
OnInsert() es un evento y se refiere al formulario ¿No?, esto debería de devolver un valor lógico,
pero el formulario no tiene el evento OnInsert(), al menos eso creo....
pero si seguimos investigando vemos que al final comprobando que xRet no tenga valor .T. o .F.
RETURN ::Append (lFromUser)
creo que significa que el método Insert al final llama al método Append
con lo cual seria un Bug y el equipo Xailer debería arreglarlo.
No se si te he aclarado algo o te he liado mas, de todas formas estoy contigo.
saludos.
Jose Vte.
Dos cosas, una la gente no esta mucho por ayudar, ya se que es libre y tal no perdáis tiempo, otra si es un bug como parece el equipo Xailer debería de tenerlo en cuenta.
Raro es que nadie se haya dado cuenta hasta ahora de dicho comportamiento.
A ver si acotamos el problema.
En la ayuda de Xailer La clase TDBBrowse no tiene explicado el método Insert, supongo que será porque deriva de TBrowse y allí si esta explicado pero dice que no tiene ningún parámetro y si
vamos a los fuentes del DBBrowse tiene este código:
METHOD Insert( lFromUser ) CLASS XDBBrowse
LOCAL xRet
xRet := ::OnInsert()
IF Valtype( xRet ) == "L" .AND. !xRet
RETURN .F.
ENDIF
RETURN ::Append( lFromUser )
Como podemos ver se le puede pasar un parámetro lógico, también a Append(lFromUser), Delete....
Mirando el código vemos esta línea
xRet := ::OnInsert()
Con lo poco de Xailer que se...
OnInsert() es un evento y se refiere al formulario ¿No?, esto debería de devolver un valor lógico,
pero el formulario no tiene el evento OnInsert(), al menos eso creo....
pero si seguimos investigando vemos que al final comprobando que xRet no tenga valor .T. o .F.
RETURN ::Append (lFromUser)
creo que significa que el método Insert al final llama al método Append
con lo cual seria un Bug y el equipo Xailer debería arreglarlo.
No se si te he aclarado algo o te he liado mas, de todas formas estoy contigo.
saludos.
Jose Vte.
Re: oDBBrowse:Insert() no funciona correctamente
Xavi,
Quizas nadie conteste, por que la mayoria (incluyendome a mi) damos por sentado que el metodo <Insert> hace un <append> a la tabla.Quizas en concepto deberia ser tal y como el metodo se indica "Insertar" un registro en la posicion que se encuentre el cursor. pero si no estoy equivocado el metodo insert siempre se portado haciendo un append. Para que se realice un proceso como tu quieres, te lo tienes que trabajar con codigo. De manera automatica no existe para las tablas o al menos yo no lo conozco.
Saludos!
Quizas nadie conteste, por que la mayoria (incluyendome a mi) damos por sentado que el metodo <Insert> hace un <append> a la tabla.Quizas en concepto deberia ser tal y como el metodo se indica "Insertar" un registro en la posicion que se encuentre el cursor. pero si no estoy equivocado el metodo insert siempre se portado haciendo un append. Para que se realice un proceso como tu quieres, te lo tienes que trabajar con codigo. De manera automatica no existe para las tablas o al menos yo no lo conozco.
Saludos!
- Carlos Ortiz
- Mensajes: 872
- Registrado: Mié Jul 01, 2009 5:44 pm
- Ubicación: Argentina - Córdoba
- Contactar:
Re: oDBBrowse:Insert() no funciona correctamente
Estimados no es un error, Insert siempre fue un append a la tabla, si queres insertar algo entre medio tendras que hacerlo, como tal no existe ni existió en ninguna version de Xailer ni similares anteriores (desde clipper S 87 a la fecha) si hubo en las nanfor lib un browse que hacia eso o algun browse recontra tuneado de manuel mercado pero son todas cosas de terceros.
Saludos
Saludos
@dbfarma
www.dbfarma.com.ar
www.dbfarma.com.ar
Re: oDBBrowse:Insert() no funciona correctamente
Carlos, Gabo
Gracias por participar, supongo que teneis razón en lo del Metodo Insert() y mas viendo el código de la clase. Desde luego en Clipper
no existio nunca , al menos yo nunca tuve constancia de ello.
Pero entonces..., ¿Cuál es la necesidad del mismo?, si hace lo mismo que el Append(), no logro entenderlo, si hay que programarlo
ya se lo hara el que lo necesite., tampoco estaría de mas que se añadiera, a ver si el equipo Xailer tiene un segundo y nos dice
su opinión sobre el asunto.,
Carlos , tengo que comentarlo, Has hablado de Manuel Mercado, que se hizo de este, era gran programador, bueno para mi,
hizo aportes a la comunidad luego prometio un IDE Visual y algo paso.
luego que no supe mas de el.
Saludos.
Gracias por participar, supongo que teneis razón en lo del Metodo Insert() y mas viendo el código de la clase. Desde luego en Clipper
no existio nunca , al menos yo nunca tuve constancia de ello.
Pero entonces..., ¿Cuál es la necesidad del mismo?, si hace lo mismo que el Append(), no logro entenderlo, si hay que programarlo
ya se lo hara el que lo necesite., tampoco estaría de mas que se añadiera, a ver si el equipo Xailer tiene un segundo y nos dice
su opinión sobre el asunto.,
Carlos , tengo que comentarlo, Has hablado de Manuel Mercado, que se hizo de este, era gran programador, bueno para mi,
hizo aportes a la comunidad luego prometio un IDE Visual y algo paso.
luego que no supe mas de el.
Saludos.
- ignacio
- Site Admin
- Mensajes: 9246
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: oDBBrowse:Insert() no funciona correctamente
Solo funciona con matrices, es decir, con TArrayBrowse. En el resto de los casos su comportamiento es idéntico a Append. No obstante se pueden sobrecargar los eventos de la clase para conseguir el efecto deseado, según el caso.
Saludos
Saludos
Re: oDBBrowse:Insert() no funciona correctamente
Ignacio, como bien dices, funciona con TArrayBrowses...
PERO, también con TDbfBrowses, por lo que lo he estado usando hasta hoy perfectamente.
El cambio que estoy haciendo ahora de utilizar directamente los DataControls i Datasets que me proviene Xailer es ahí que echo en falta este evento, pues la carencia de él me cambia el sistema de entrada de datos que tengo acostumbrados a mis clientes.
Si no es mucho pedir, la implementación de ese evento... para vosotros, equipo Xailer es tarea fàcil, creo. Si me pongo yo en ello, voy a estropear más que arreglar
Un Saludo,
Xevi.
PERO, también con TDbfBrowses, por lo que lo he estado usando hasta hoy perfectamente.
El cambio que estoy haciendo ahora de utilizar directamente los DataControls i Datasets que me proviene Xailer es ahí que echo en falta este evento, pues la carencia de él me cambia el sistema de entrada de datos que tengo acostumbrados a mis clientes.
Si no es mucho pedir, la implementación de ese evento... para vosotros, equipo Xailer es tarea fàcil, creo. Si me pongo yo en ello, voy a estropear más que arreglar
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9246
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: oDBBrowse:Insert() no funciona correctamente
Las operaciones de inserción no tienen mucho sentido en Dbfs debido a los índices activos y a la imposibilidad de los ficheros dbf de insertar registros. Cualquier operación de este tipo debe de tratarse íntegramente con código ad-hoc.
Un saludo
Un saludo
Re: oDBBrowse:Insert() no funciona correctamente
Ignacio,
pues te puedo asegurar que en TDbfBrowses està funcionando perfectamente el método Insert, refrescando perfectamente el Browse con el índice activo.
Yo me estoy peleando con el método en la clase TDBBrowse, pero no me sale.
Gracias.
Un Saludo,
Xevi.
pues te puedo asegurar que en TDbfBrowses està funcionando perfectamente el método Insert, refrescando perfectamente el Browse con el índice activo.
Yo me estoy peleando con el método en la clase TDBBrowse, pero no me sale.
Gracias.
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
Re: oDBBrowse:Insert() no funciona correctamente
Teneis previsto que funcione, (de manera al ArryaBrowse o TDbfBrowse), Insert() en los TDBBrowses en la próxima versión???
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9246
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: oDBBrowse:Insert() no funciona correctamente
Buenos días Xavi,
De forma categórica te digo que no. Y no porque no quiera, sino porque no se puede. Es imposible dar una solución general a este problema. He intentado explicarme y no lo he conseguido. Siento no saber explicarme mejor.
Un saludo
De forma categórica te digo que no. Y no porque no quiera, sino porque no se puede. Es imposible dar una solución general a este problema. He intentado explicarme y no lo he conseguido. Siento no saber explicarme mejor.
Un saludo
Re: oDBBrowse:Insert() no funciona correctamente
Ignacio,
igual he sido yo quien no me he explicado lo suficiente. No veo demasiada complicación en adaptar ese evento en el DBBrowse por un equipo como el vuestro.
Yo me he puesto hoy a "toquetear" las clases, y después de detectar que alguna clase facilitada en los fuentes no "cuadran" con las que son funcionales en mi Xailer 3.3.1... me he salido con la mia
Visto lo poco que se y entiendo, ya tengo funcionando y operativo el Insert en los DBBrowses, funcionando en DBFs, SQLite (MariaDB supongo que tambien, lo provaré)
Seguro que lo he hecho "a palos", pero funciona. Seguro que si le hechais una hojeada lo pulís como maestros que sois, vaya, si quereis.
Adjunto el Sample de Xailer Browses, modificado, funcionando, incluso si se ordenan las columnas, al insertar el registro se posiciona correctamente en su orden, esto es cosa del Browse mismo.
el código...
CLASS TDBBrowse FROM XDBBrowse
METHOD Insert( lFromUser )
ENDCLASS
//--------------------------------------------------------------------------
METHOD Insert( lFromUser ) CLASS TDBBrowse
//Metodo Insert de TDbfBrowse
LOCAL xRet
DEFAULT lFromUser TO .F.
xRet := ::OnInsert()
IF Valtype( xRet ) == "L" .AND. !xRet
RETURN .F.
ENDIF
IF ! ::lAllowInsert .AND. lFromUser
RETURN .F.
ENDIF
IF ::lEditMode .OR. ! ::IsEditable()
RETURN .F.
ENDIF
::DrawLine( Nil, .F. )
::nEditMode := beINSERT
::nPhantomRow := ::nRowSel
::Refresh()
* ::Edit( lFromUser ) //No entramos en edición
//Fin evento Insert de TDbfBrowse
If ::oDataSet:ClassName() == "TDbfDataSet"
//Metodo Append de TDBBrowse... modificando Append por Edit
//Funciona en DBBrowses DBFs, però no en SQLite ni MariaDB
IF ::oDataset == Nil .OR. !::oDataSet:lOpen .OR. ::oDataset:lReadOnly
RETURN .F.
ENDIF
* IF !::Super:Append( lFromUser )
IF !::Super:Edit( lFromUser )
RETURN .F.
ELSE
IF ::lAutoSave .AND. !::oDataSet:AddNew() // AddNew... lanza error "Already in Edit Mode [#0]"
RETURN .F.
ENDIF
ENDIF
::Refresh()
//Fin evento Append de TDbfBrowse
Else //::oDataSet:ClassName() == "TSQLTable"
::Edit( lFromUser )
AEval( ::aCols, {|x| x:oGridEdit:cText := "" } )
::oDataSet:Blank()
::oDataSet:oRecords:AddNew()
::Refresh()
EndIf
RETURN .T.
Un Saludo,
Xevi.
igual he sido yo quien no me he explicado lo suficiente. No veo demasiada complicación en adaptar ese evento en el DBBrowse por un equipo como el vuestro.
Yo me he puesto hoy a "toquetear" las clases, y después de detectar que alguna clase facilitada en los fuentes no "cuadran" con las que son funcionales en mi Xailer 3.3.1... me he salido con la mia
Visto lo poco que se y entiendo, ya tengo funcionando y operativo el Insert en los DBBrowses, funcionando en DBFs, SQLite (MariaDB supongo que tambien, lo provaré)
Seguro que lo he hecho "a palos", pero funciona. Seguro que si le hechais una hojeada lo pulís como maestros que sois, vaya, si quereis.
Adjunto el Sample de Xailer Browses, modificado, funcionando, incluso si se ordenan las columnas, al insertar el registro se posiciona correctamente en su orden, esto es cosa del Browse mismo.
el código...
CLASS TDBBrowse FROM XDBBrowse
METHOD Insert( lFromUser )
ENDCLASS
//--------------------------------------------------------------------------
METHOD Insert( lFromUser ) CLASS TDBBrowse
//Metodo Insert de TDbfBrowse
LOCAL xRet
DEFAULT lFromUser TO .F.
xRet := ::OnInsert()
IF Valtype( xRet ) == "L" .AND. !xRet
RETURN .F.
ENDIF
IF ! ::lAllowInsert .AND. lFromUser
RETURN .F.
ENDIF
IF ::lEditMode .OR. ! ::IsEditable()
RETURN .F.
ENDIF
::DrawLine( Nil, .F. )
::nEditMode := beINSERT
::nPhantomRow := ::nRowSel
::Refresh()
* ::Edit( lFromUser ) //No entramos en edición
//Fin evento Insert de TDbfBrowse
If ::oDataSet:ClassName() == "TDbfDataSet"
//Metodo Append de TDBBrowse... modificando Append por Edit
//Funciona en DBBrowses DBFs, però no en SQLite ni MariaDB
IF ::oDataset == Nil .OR. !::oDataSet:lOpen .OR. ::oDataset:lReadOnly
RETURN .F.
ENDIF
* IF !::Super:Append( lFromUser )
IF !::Super:Edit( lFromUser )
RETURN .F.
ELSE
IF ::lAutoSave .AND. !::oDataSet:AddNew() // AddNew... lanza error "Already in Edit Mode [#0]"
RETURN .F.
ENDIF
ENDIF
::Refresh()
//Fin evento Append de TDbfBrowse
Else //::oDataSet:ClassName() == "TSQLTable"
::Edit( lFromUser )
AEval( ::aCols, {|x| x:oGridEdit:cText := "" } )
::oDataSet:Blank()
::oDataSet:oRecords:AddNew()
::Refresh()
EndIf
RETURN .T.
Un Saludo,
Xevi.
- Adjuntos
-
- BrwEdit.zip
- (4.61 KiB) Descargado 111 veces
Un Saludo,
Xevi.
Xevi.