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 ???

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....