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.

No estoy en el Foro Pro ( PERO CREO QUE NO ESTARIA MAL REVISAR LO QUE UNA VEZ COMENTE)

Foro público de Xailer en español
Responder
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

No estoy en el Foro Pro ( PERO CREO QUE NO ESTARIA MAL REVISAR LO QUE UNA VEZ COMENTE)

Mensaje por Martin Del Angel »

Error de Pintado del Browse en busqueda incremental
Cuando se usa Locate sobre MySql con tablas grandes donde los Queries
son como estos:
cSQL:="SELECT t1.*,t2.PROVEEDOR,t3.STATUS, " + ;
" t4.UNIDAD,t5.FAMILIA,t6.ALMACEN,t7.DEPARTAMENTO,t8.GRUPO,t9. MARCA,t10.TIPOPRODUCTO
FROM tblproductos t1 " + ;
"LEFT JOIN tblproveedores t2 ON t1.PROVEEDOR_ID = t2.PROVEEDOR_ID " + ;
"LEFT JOIN tblstatus t3 ON t1.STATUS_ID = t3.STATUS_ID " + ;
"LEFT JOIN tblunidades t4 ON t1.UNIDAD_ID = t4.UNIDAD_ID " + ;
"LEFT JOIN tblfamilias t5 ON t1.FAMILIA_ID = t5.FAMILIA_ID " + ;
"LEFT JOIN tblalmacenes t6 ON t1.ALMACEN_ID = t6.ALMACEN_ID " + ;
"LEFT JOIN tbldepartamentos t7 ON t1.DEPARTAMENTO_ID =
t7.DEPARTAMENTO_ID " + ;
"LEFT JOIN tblgrupos t8 ON t1.GRUPO_ID = t8.GRUPO_ID " + ;
"LEFT JOIN tblmarcas t9 ON t1.MARCA_ID = t9.MARCA_ID " + ;
"LEFT JOIN tbltipoproducto t10 ON t1.TIPOPRODUCTO_ID =
t10.TIPOPRODUCTO_ID " + ;
"WHERE t1.EMPRESA_ID="+ VALTOSTR(APPDATA:EMPRESA_ID) + ;
" AND t1.SUCURSAL_ID=" + VALTOSTR(APPDATA:SUCURSAL_ID) + " ORDER BY
t1.DESCRIPCION "
son una lentitud ya que cada letra que tecleas se ejecuta un query, por
ejemplo: si deseo buscar la palabra HERRAMIENTA , entonces empiezo a
teclar la letra "H" despues que la he tecleado se ejectuta un query
sobre la base de datos buscando la letra H , se imaginan con el Query de
Arriba con 30,000 productos, 2 segundos para posicionarse en la letra
"H" , despues tecleo la "E" y otros 2 segundos y asi sucesivamente.
Pero lo grave es que si tecleo rapidamente la palabra HERRAMIENTA Xailer
2 marca error (aclaro usando MySql) :
Commands out of sync; you can't run this command now [#2014]
antes con la version 1.98 no salia este error , debido a que lo podia
atrapar , con este codigo:
#include "Xailer.ch"
//---------------------------------------------------------- --------------------
// SOPORTE CONEXION DATA SOURCE MySQL
//---------------------------------------------------------- --------------------
#define DK_DEFAULT_OR_NOT DEFAULT // Why ? :'(
CLASS TMySQLDataSource FROM XMySQLDataSource
METHOD Execute( cCmdMySQL, cEOpe, @aData, @aHeaders )
* METHOD File( cLikeVTabName )
ENDCLASS
METHOD Execute( cCmdMySQL, cEOpe, aData, aHeaders ) CLASS TMySQLDataSource
Local oE, lSuccess, lDone := TRUE
Application:oMainForm:oTimerMYSQL:lEnabled:=.f.
while( lDone )
lDone := FALSE
TRY
lSuccess := Super:Execute( cCmdMySQL, cEOpe, @aData, @aHeaders )
// Now the integrity of your DATA is PROBLEM of MySQL. :) :) :)
CATCH oE
lSuccess := FALSE
SWITCH( oE:GenCode )
CASE 2005 // MySQL UNKNOWN_HOST
CASE 2006 // MySQL server has gone away
Waiton("Conectando con Base de Datos ....")
::Disconnect(); ProcessMessages(); Sleep( 10 )
lDone := lSuccess := ::Connect(); ProcessMessages(); Sleep(
10 )
waitoff()
if( !lSuccess )
DEFAULT cEOpe TO ''
::CheckError( cEOpe + ' => Error de Re-Conexion' )
endif
EXIT
CASE 2013 // MySQL server lost
MSGSTOP('Se perdió la Conexión con Servidor')
Waiton("Estableciendo Conexión con Base de Datos ....")
::Disconnect(); ProcessMessages(); Sleep( 10 )
lDone := lSuccess := ::Connect(); ProcessMessages(); Sleep(
10 )
waitoff()
if( !lSuccess )
DEFAULT cEOpe TO ''
::CheckError( cEOpe + ' => Error de Re-Conexion' )
endif
EXIT
CASE 2014 // MySQL Command Out if Sync
ProcessMessages(); Sleep( 10 )
EXIT
CASE 1053 // Desconexion de servidor en proceso
CASE 1152 // Conexión abortada
DK_DEFAULT_OR_NOT // What ??? 8-)
WITH OBJECT oE
:Operation := :ProcName := ProcName( 1 )
:ProcLine := ProcLine( 1 )
END
Throw( oE )
END
END
enddo
Application:oMainForm:oTimerMYSQL:lEnabled:=.t.
RETURN lSuccess
Con la Version 2 ya no funciona , no atrapa los errores (aclaro el
comando TRY CATCH funcionan , hice pruebas en otro modulo y funcionan ,
pero en el codigo de arriba el EXECUTE toma el control de los errores ,
aunque le pongas lo que pongas en la propiedaD lAbortOnErrors pasa lo mismo
Usen este codigo y provoquen errrores y verán que no funciona.
Actualmente tengo 2 grandes problemas con MySql usando la Version 2.
1. Pintado del Browse en busqueda incremental
2. El sistema de errores del los Datacontrols, no ceden el control como
lo hacia la ver 1.99
Por Favor Equipo de Xailer Revinselo!
Saludos....
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9459
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

No estoy en el Foro Pro ( PERO CREO QUE NO ESTARIA MAL REVISAR LO QUE UNA VEZ COMENTE)

Mensaje por ignacio »

Muy Sr. mí­o,
Aunque no esté en el foro PRO le agradecemos que nos reporte todos los
errores que encuentre. No obstante, me temo que la información que nos da es
insuficiente. Como seguro sabrá solemos requerir un pequeño programa de
pocas lí­neas y sin operaciones de copiar y pegar de su propio código que
muestren el error que indica. Serí­a muy recomendable que incluyese
igualmente el backup de la base de datos con el mí­nimo de datos posible para
reproducir su error.
Por otra parte, el problema que comenta con la búsqueda incremental,
independientemente de que funcione o no correctamente, le recomiendo que
utilice un TMemDataset en vez de un TDataset.
Un saludo
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
http://www.xailer.com/forum
http://www.xailer.com/dokuwiki
"Martin Del Angel" <mdangel@dymsasistemas.com> escribió en el mensaje de
noticias:[email=4c4cc5fd@svctag-j7w3v3j....]4c4cc5fd@svctag-j7w3v3j....[/email]
> Error de Pintado del Browse en busqueda incremental
>
> Cuando se usa Locate sobre MySql con tablas grandes donde los Queries son
> como estos:
>
> cSQL:="SELECT t1.*,t2.PROVEEDOR,t3.STATUS, " + ;
> " t4.UNIDAD,t5.FAMILIA,t6.ALMACEN,t7.DEPARTAMENTO,t8.GRUPO,t9. MARCA,t10.TIPOPRODUCTO
> FROM tblproductos t1 " + ;
> "LEFT JOIN tblproveedores t2 ON t1.PROVEEDOR_ID = t2.PROVEEDOR_ID " + ;
> "LEFT JOIN tblstatus t3 ON t1.STATUS_ID = t3.STATUS_ID " + ;
> "LEFT JOIN tblunidades t4 ON t1.UNIDAD_ID = t4.UNIDAD_ID " + ;
> "LEFT JOIN tblfamilias t5 ON t1.FAMILIA_ID = t5.FAMILIA_ID " + ;
> "LEFT JOIN tblalmacenes t6 ON t1.ALMACEN_ID = t6.ALMACEN_ID " + ;
> "LEFT JOIN tbldepartamentos t7 ON t1.DEPARTAMENTO_ID = t7.DEPARTAMENTO_ID
> " + ;
> "LEFT JOIN tblgrupos t8 ON t1.GRUPO_ID = t8.GRUPO_ID " + ;
> "LEFT JOIN tblmarcas t9 ON t1.MARCA_ID = t9.MARCA_ID " + ;
> "LEFT JOIN tbltipoproducto t10 ON t1.TIPOPRODUCTO_ID = t10.TIPOPRODUCTO_ID
> " + ;
> "WHERE t1.EMPRESA_ID="+ VALTOSTR(APPDATA:EMPRESA_ID) + ;
> " AND t1.SUCURSAL_ID=" + VALTOSTR(APPDATA:SUCURSAL_ID) + " ORDER BY
> t1.DESCRIPCION "
>
>
> son una lentitud ya que cada letra que tecleas se ejecuta un query, por
> ejemplo: si deseo buscar la palabra HERRAMIENTA , entonces empiezo a
> teclar la letra "H" despues que la he tecleado se ejectuta un query sobre
> la base de datos buscando la letra H , se imaginan con el Query de Arriba
> con 30,000 productos, 2 segundos para posicionarse en la letra "H" ,
> despues tecleo la "E" y otros 2 segundos y asi sucesivamente.
>
> Pero lo grave es que si tecleo rapidamente la palabra HERRAMIENTA Xailer 2
> marca error (aclaro usando MySql) :
>
> Commands out of sync; you can't run this command now [#2014]
>
> antes con la version 1.98 no salia este error , debido a que lo podia
> atrapar , con este codigo:
>
> #include "Xailer.ch"
>
> //---------------------------------------------------------- --------------------
> // SOPORTE CONEXION DATA SOURCE MySQL
> //---------------------------------------------------------- --------------------
> #define DK_DEFAULT_OR_NOT DEFAULT // Why ? :'(
>
> CLASS TMySQLDataSource FROM XMySQLDataSource
> METHOD Execute( cCmdMySQL, cEOpe, @aData, @aHeaders )
> * METHOD File( cLikeVTabName )
> ENDCLASS
>
> METHOD Execute( cCmdMySQL, cEOpe, aData, aHeaders ) CLASS TMySQLDataSource
> Local oE, lSuccess, lDone := TRUE
> Application:oMainForm:oTimerMYSQL:lEnabled:=.f.
> while( lDone )
> lDone := FALSE
> TRY
> lSuccess := Super:Execute( cCmdMySQL, cEOpe, @aData, @aHeaders )
> // Now the integrity of your DATA is PROBLEM of MySQL. :) :) :)
> CATCH oE
> lSuccess := FALSE
> SWITCH( oE:GenCode )
> CASE 2005 // MySQL UNKNOWN_HOST
> CASE 2006 // MySQL server has gone away
>
> Waiton("Conectando con Base de Datos ....")
> ::Disconnect(); ProcessMessages(); Sleep( 10 )
> lDone := lSuccess := ::Connect(); ProcessMessages(); Sleep(
> 10 )
> waitoff()
> if( !lSuccess )
> DEFAULT cEOpe TO ''
> ::CheckError( cEOpe + ' => Error de Re-Conexion' )
> endif
> EXIT
> CASE 2013 // MySQL server lost
> MSGSTOP('Se perdió la Conexión con Servidor')
> Waiton("Estableciendo Conexión con Base de Datos ....")
> ::Disconnect(); ProcessMessages(); Sleep( 10 )
> lDone := lSuccess := ::Connect(); ProcessMessages(); Sleep(
> 10 )
> waitoff()
> if( !lSuccess )
> DEFAULT cEOpe TO ''
> ::CheckError( cEOpe + ' => Error de Re-Conexion' )
> endif
> EXIT
>
> CASE 2014 // MySQL Command Out if Sync
> ProcessMessages(); Sleep( 10 )
>
> EXIT
> CASE 1053 // Desconexion de servidor en proceso
> CASE 1152 // Conexión abortada
> DK_DEFAULT_OR_NOT // What ??? 8-)
> WITH OBJECT oE
> :Operation := :ProcName := ProcName( 1 )
> :ProcLine := ProcLine( 1 )
> END
> Throw( oE )
> END
> END
> enddo
>
> Application:oMainForm:oTimerMYSQL:lEnabled:=.t.
>
> RETURN lSuccess
>
> Con la Version 2 ya no funciona , no atrapa los errores (aclaro el comando
> TRY CATCH funcionan , hice pruebas en otro modulo y funcionan , pero en el
> codigo de arriba el EXECUTE toma el control de los errores , aunque le
> pongas lo que pongas en la propiedaD lAbortOnErrors pasa lo mismo
>
>
> Usen este codigo y provoquen errrores y verán que no funciona.
>
>
>
> Actualmente tengo 2 grandes problemas con MySql usando la Version 2.
>
> 1. Pintado del Browse en busqueda incremental
>
> 2. El sistema de errores del los Datacontrols, no ceden el control como
> lo hacia la ver 1.99
>
>
> Por Favor Equipo de Xailer Revinselo!
>
>
> Saludos....
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Martin Del Angel
Mensajes: 360
Registrado: Mié Dic 03, 2008 5:05 am

No estoy en el Foro Pro ( PERO CREO QUE NO ESTARIA MAL REVISAR LO QUE UNA VEZ COMENTE)

Mensaje por Martin Del Angel »

On 7/26/2010 3:53 AM, Ignacio Ortiz de Zúñiga wrote:
> Muy Sr. mí­o,
>
> Aunque no esté en el foro PRO le agradecemos que nos reporte todos los
> errores que encuentre. No obstante, me temo que la información que nos
> da es insuficiente. Como seguro sabrá solemos requerir un pequeño
> programa de pocas lí­neas y sin operaciones de copiar y pegar de su
> propio código que muestren el error que indica. Serí­a muy recomendable
> que incluyese igualmente el backup de la base de datos con el mí­nimo de
> datos posible para reproducir su error.
>
> Por otra parte, el problema que comenta con la búsqueda incremental,
> independientemente de que funcione o no correctamente, le recomiendo que
> utilice un TMemDataset en vez de un TDataset.
>
> Un saludo
>
Gracias Ignacio por la Respuesta:
Voy a preparar un ejemplo en cuanto tenga un espacio.
Hice pruebas con MemDataSet y la busqueda incremental sigue igual, El
Browse pinta mal las filas , las duplica
Implemente la Busqueda de otra manera y lo solucione de momento.
En cuanto al metodo execute().
Si se sobrecarga el Metodo Execute y pongo el TRY CATCH
Versión 1.99
estando la propiedad lAbortOnErrors a .F.
y la propiedad lDisplayErrors a .T.
Este Código si funcionaba perfectamente, los errores producidos por
Execute() si eran atrapados por TRY CATCH
TRY
lSuccess := Super:Execute( cCmdMySQL, cEOpe, @aData, @aHeaders )
CATCH oE
Ahora en la Versión 2 no funciona
estando la propiedad lAbortOnErrors a FALSO o en VERDADERO
y la propiedad lDisplayErrors a VERDADERO on en FALSO
los ERRORES producidos en Execute jamas pasan al TRY CATCH, ahora el
mismo DATASOURCE toma el control de los errores producidos en Execute().
Independientemente del ejemplo que prepare mostrando este
comportamiento, considero que se ha roto una compatibilidad de código de
una versión a otra.
Saludos...
Responder