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.

oDBBrowse:Insert() no funciona correctamente

Foro público de Xailer en español
Responder
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

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.
Adjuntos
BrwEdit.zip
(3.41 KiB) Descargado 126 veces
Un Saludo,
Xevi.
jvtecheto
Mensajes: 127
Registrado: Jue Dic 19, 2013 1:18 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por jvtecheto »

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.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

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.
Un Saludo,
Xevi.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

Acabo de descargar la DEMO de la version 4 de Xailer, con su respectivo Harbour...

El comportamiento anómalo persiste.


Un Saludo,
Xevi.
Un Saludo,
Xevi.
jvtecheto
Mensajes: 127
Registrado: Jue Dic 19, 2013 1:18 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por jvtecheto »

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.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

Ignacio,

alguna solución???


Un Saludo,
Xevi.
Un Saludo,
Xevi.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

Vaya, vaya... ni p*** caso!!!

:evil:
Un Saludo,
Xevi.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

Arriba!!!

A ver alguien del equipo lo ve y lo contesta.

Un Saludo,
Xevi.
Un Saludo,
Xevi.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

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.
Un Saludo,
Xevi.
jvtecheto
Mensajes: 127
Registrado: Jue Dic 19, 2013 1:18 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por jvtecheto »

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.
Avatar de Usuario
gabo1
Mensajes: 127
Registrado: Lun Oct 13, 2014 9:42 am

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por gabo1 »

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!
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por Carlos Ortiz »

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
jvtecheto
Mensajes: 127
Registrado: Jue Dic 19, 2013 1:18 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por jvtecheto »

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.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por ignacio »

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
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

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.
Un Saludo,
Xevi.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por ignacio »

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
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

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.
Un Saludo,
Xevi.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

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.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por ignacio »

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. :cry: Siento no saber explicarme mejor.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Re: oDBBrowse:Insert() no funciona correctamente

Mensaje por XeviCOMAS »

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.
Adjuntos
BrwEdit.zip
(4.61 KiB) Descargado 111 veces
Un Saludo,
Xevi.
Responder