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.
Busqueda Incremental Lenta Mysql
-
- Mensajes: 360
- Registrado: Mié Dic 03, 2008 5:05 am
Busqueda Incremental Lenta Mysql
METHOD BtnBuscarClick( oSender ) CLASS TSeguros
LOCAL cadena:=UPPER(ALLTRIM(::oCadena:Value)),cSQLSTR
LOCAL nCUAL,cBuscar
IF EMPTY(CADENA)
MSGSTOP('Busqueda Vacia')
::oCadena:SETFOCUS()
RETURN nil
ENDIF
oSender:lEnabled:=.f.
Waiton('Buscando Datos espere un momento ....')
WITH OBJECT ::oSQLCONSULTA
:oDataSource:=AppData:cnn
IF :lOpen
:Close()
ENDIF
cSQLSTR:="Select clientes.*,autos.*,CONCAT_WS('-',clientes.lada,clientes.telc hofer) as PHONE FROM clientes "+;
"LEFT JOIN autos ON clientes.cliente_id=autos.cliente_id "+;
"WHERE autos.placas LIKE '%"+cadena +"%'" + " OR autos.serie LIKE '%"+cadena +"%'" +;
" OR clientes.telchofer LIKE '%"+cadena +"%'"+;
" OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
" OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
" ORDER BY clientes.nombrecliente,autos.ano"
cBuscar:='Búsqueda de Clientes'
:cSelect:=''
:cSelect:=cSQLSTR
:Open()
IF !:lOpen
:lOpen:=.T.
IF !:lOpen
MSGSTOP('Error al Abrir Consulta de Clientes','Error')
AppData:cnn:lConnected:=.f.
Waitoff()
QUIT
ENDIF
ENDIF
END WITH
IF ::oSQLCONSULTA:RECCOUNT()=0
MSGSTOP('No Existen Datos Solicitados',cBuscar)
::oCadena:SetFocus()
oSender:lEnabled:=.t.
Waitoff()
RETURN NIL
ENDIF
oSender:lEnabled:=.t.
Waitoff()
RETURN Nil
--
LOCAL cadena:=UPPER(ALLTRIM(::oCadena:Value)),cSQLSTR
LOCAL nCUAL,cBuscar
IF EMPTY(CADENA)
MSGSTOP('Busqueda Vacia')
::oCadena:SETFOCUS()
RETURN nil
ENDIF
oSender:lEnabled:=.f.
Waiton('Buscando Datos espere un momento ....')
WITH OBJECT ::oSQLCONSULTA
:oDataSource:=AppData:cnn
IF :lOpen
:Close()
ENDIF
cSQLSTR:="Select clientes.*,autos.*,CONCAT_WS('-',clientes.lada,clientes.telc hofer) as PHONE FROM clientes "+;
"LEFT JOIN autos ON clientes.cliente_id=autos.cliente_id "+;
"WHERE autos.placas LIKE '%"+cadena +"%'" + " OR autos.serie LIKE '%"+cadena +"%'" +;
" OR clientes.telchofer LIKE '%"+cadena +"%'"+;
" OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
" OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
" ORDER BY clientes.nombrecliente,autos.ano"
cBuscar:='Búsqueda de Clientes'
:cSelect:=''
:cSelect:=cSQLSTR
:Open()
IF !:lOpen
:lOpen:=.T.
IF !:lOpen
MSGSTOP('Error al Abrir Consulta de Clientes','Error')
AppData:cnn:lConnected:=.f.
Waitoff()
QUIT
ENDIF
ENDIF
END WITH
IF ::oSQLCONSULTA:RECCOUNT()=0
MSGSTOP('No Existen Datos Solicitados',cBuscar)
::oCadena:SetFocus()
oSender:lEnabled:=.t.
Waitoff()
RETURN NIL
ENDIF
oSender:lEnabled:=.t.
Waitoff()
RETURN Nil
--
-
- Mensajes: 180
- Registrado: Lun Sep 15, 2008 2:53 pm
Busqueda Incremental Lenta Mysql
Martin y si aparte de la cadena a buscar, tambien le pedis al cliente que
indique por que dato desea buscar con 5 TRadio. O un CombBox cargado con las
descripciones de las 5 columnas.
Entonces realizarias una busqueda simple por la columan que te indicaron.
Juan
"Martin Del Angel" <mdangel@dymsasistemas.com> escribió en el mensaje
news:[email=49e3a092@svctag-j7w3v3j....]49e3a092@svctag-j7w3v3j....[/email]
> Hola a Todos!
>
> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
> llenado con el codigo que ajunto:
>
>
> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
> esas 2 tablas de esta manera:
>
> WHERE autos.placas LIKE '%"+cadena +"%'" +;
> " OR autos.serie LIKE '%"+cadena +"%'" +;
> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
> " ORDER BY clientes.nombrecliente,autos.ano"
>
>
> Tengo un busqueda incremental en un TDBBrowse asi:
>
> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>
> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>
> El Problema es :
>
>
> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>
> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
> del LOCATE?
>
> la tabla de autos tiene 116,353 registros
> la tabla de clientes tiene 90,435 registros
>
>
>
>
> Hay otra manera mas eficiente de hacer esta busqueda?
>
>
>
>
>
> Saludos...
>
>
>
------------------------------------------------------------ --------------------
> METHOD BtnBuscarClick( oSender ) CLASS TSeguros
> LOCAL cadena:=UPPER(ALLTRIM(::oCadena:Value)),cSQLSTR
> LOCAL nCUAL,cBuscar
>
> IF EMPTY(CADENA)
> MSGSTOP('Busqueda Vacia')
> ::oCadena:SETFOCUS()
> RETURN nil
> ENDIF
> oSender:lEnabled:=.f.
>
> Waiton('Buscando Datos espere un momento ....')
>
> WITH OBJECT ::oSQLCONSULTA
> :oDataSource:=AppData:cnn
> IF :lOpen
> :Close()
> ENDIF
> cSQLSTR:="Select
> clientes.*,autos.*,CONCAT_WS('-',clientes.lada,clientes.telc hofer) as
> PHONE FROM clientes "+;
> "LEFT JOIN autos ON clientes.cliente_id=autos.cliente_id "+;
> "WHERE autos.placas LIKE '%"+cadena +"%'" + " OR autos.serie
> LIKE '%"+cadena +"%'" +;
> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
> " ORDER BY clientes.nombrecliente,autos.ano"
>
> cBuscar:='Búsqueda de Clientes'
> :cSelect:=''
> :cSelect:=cSQLSTR
> :Open()
> IF !:lOpen
> :lOpen:=.T.
> IF !:lOpen
> MSGSTOP('Error al Abrir Consulta de Clientes','Error')
> AppData:cnn:lConnected:=.f.
> Waitoff()
> QUIT
> ENDIF
> ENDIF
> END WITH
> IF ::oSQLCONSULTA:RECCOUNT()=0
> MSGSTOP('No Existen Datos Solicitados',cBuscar)
> ::oCadena:SetFocus()
> oSender:lEnabled:=.t.
> Waitoff()
> RETURN NIL
> ENDIF
>
> oSender:lEnabled:=.t.
> Waitoff()
> RETURN Nil
>
indique por que dato desea buscar con 5 TRadio. O un CombBox cargado con las
descripciones de las 5 columnas.
Entonces realizarias una busqueda simple por la columan que te indicaron.
Juan
"Martin Del Angel" <mdangel@dymsasistemas.com> escribió en el mensaje
news:[email=49e3a092@svctag-j7w3v3j....]49e3a092@svctag-j7w3v3j....[/email]
> Hola a Todos!
>
> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
> llenado con el codigo que ajunto:
>
>
> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
> esas 2 tablas de esta manera:
>
> WHERE autos.placas LIKE '%"+cadena +"%'" +;
> " OR autos.serie LIKE '%"+cadena +"%'" +;
> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
> " ORDER BY clientes.nombrecliente,autos.ano"
>
>
> Tengo un busqueda incremental en un TDBBrowse asi:
>
> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>
> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>
> El Problema es :
>
>
> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>
> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
> del LOCATE?
>
> la tabla de autos tiene 116,353 registros
> la tabla de clientes tiene 90,435 registros
>
>
>
>
> Hay otra manera mas eficiente de hacer esta busqueda?
>
>
>
>
>
> Saludos...
>
>
>
------------------------------------------------------------ --------------------
> METHOD BtnBuscarClick( oSender ) CLASS TSeguros
> LOCAL cadena:=UPPER(ALLTRIM(::oCadena:Value)),cSQLSTR
> LOCAL nCUAL,cBuscar
>
> IF EMPTY(CADENA)
> MSGSTOP('Busqueda Vacia')
> ::oCadena:SETFOCUS()
> RETURN nil
> ENDIF
> oSender:lEnabled:=.f.
>
> Waiton('Buscando Datos espere un momento ....')
>
> WITH OBJECT ::oSQLCONSULTA
> :oDataSource:=AppData:cnn
> IF :lOpen
> :Close()
> ENDIF
> cSQLSTR:="Select
> clientes.*,autos.*,CONCAT_WS('-',clientes.lada,clientes.telc hofer) as
> PHONE FROM clientes "+;
> "LEFT JOIN autos ON clientes.cliente_id=autos.cliente_id "+;
> "WHERE autos.placas LIKE '%"+cadena +"%'" + " OR autos.serie
> LIKE '%"+cadena +"%'" +;
> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
> " ORDER BY clientes.nombrecliente,autos.ano"
>
> cBuscar:='Búsqueda de Clientes'
> :cSelect:=''
> :cSelect:=cSQLSTR
> :Open()
> IF !:lOpen
> :lOpen:=.T.
> IF !:lOpen
> MSGSTOP('Error al Abrir Consulta de Clientes','Error')
> AppData:cnn:lConnected:=.f.
> Waitoff()
> QUIT
> ENDIF
> ENDIF
> END WITH
> IF ::oSQLCONSULTA:RECCOUNT()=0
> MSGSTOP('No Existen Datos Solicitados',cBuscar)
> ::oCadena:SetFocus()
> oSender:lEnabled:=.t.
> Waitoff()
> RETURN NIL
> ENDIF
>
> oSender:lEnabled:=.t.
> Waitoff()
> RETURN Nil
>
-
- Mensajes: 360
- Registrado: Mié Dic 03, 2008 5:05 am
Busqueda Incremental Lenta Mysql
Juan Castañeda wrote:
> Martin y si aparte de la cadena a buscar, tambien le pedis al cliente que
> indique por que dato desea buscar con 5 TRadio. O un CombBox cargado con las
> descripciones de las 5 columnas.
> Entonces realizarias una busqueda simple por la columan que te indicaron.
>
> Juan
>
> "Martin Del Angel" <mdangel@dymsasistemas.com> escribió en el mensaje
> news:[email=49e3a092@svctag-j7w3v3j....]49e3a092@svctag-j7w3v3j....[/email]
>> Hola a Todos!
>>
>> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
>> llenado con el codigo que ajunto:
>>
>>
>> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
>> esas 2 tablas de esta manera:
>>
>> WHERE autos.placas LIKE '%"+cadena +"%'" +;
>> " OR autos.serie LIKE '%"+cadena +"%'" +;
>> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
>> " ORDER BY clientes.nombrecliente,autos.ano"
>>
>>
>> Tengo un busqueda incremental en un TDBBrowse asi:
>>
>> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>>
>> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>>
>> El Problema es :
>>
>>
>> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
>> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>>
>> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
>> del LOCATE?
>>
>> la tabla de autos tiene 116,353 registros
>> la tabla de clientes tiene 90,435 registros
>>
>>
>>
>>
>> Hay otra manera mas eficiente de hacer esta busqueda?
>>
>>
>>
>>
>>
>> Saludos...
>>
>>
>>
>
>
> ------------------------------------------------------------ --------------------
>
>
>> METHOD BtnBuscarClick( oSender ) CLASS TSeguros
>> LOCAL cadena:=UPPER(ALLTRIM(::oCadena:Value)),cSQLSTR
>> LOCAL nCUAL,cBuscar
>>
>> IF EMPTY(CADENA)
>> MSGSTOP('Busqueda Vacia')
>> ::oCadena:SETFOCUS()
>> RETURN nil
>> ENDIF
>> oSender:lEnabled:=.f.
>>
>> Waiton('Buscando Datos espere un momento ....')
>>
>> WITH OBJECT ::oSQLCONSULTA
>> :oDataSource:=AppData:cnn
>> IF :lOpen
>> :Close()
>> ENDIF
>> cSQLSTR:="Select
>> clientes.*,autos.*,CONCAT_WS('-',clientes.lada,clientes.telc hofer) as
>> PHONE FROM clientes "+;
>> "LEFT JOIN autos ON clientes.cliente_id=autos.cliente_id "+;
>> "WHERE autos.placas LIKE '%"+cadena +"%'" + " OR autos.serie
>> LIKE '%"+cadena +"%'" +;
>> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
>> " ORDER BY clientes.nombrecliente,autos.ano"
>>
>> cBuscar:='Búsqueda de Clientes'
>> :cSelect:=''
>> :cSelect:=cSQLSTR
>> :Open()
>> IF !:lOpen
>> :lOpen:=.T.
>> IF !:lOpen
>> MSGSTOP('Error al Abrir Consulta de Clientes','Error')
>> AppData:cnn:lConnected:=.f.
>> Waitoff()
>> QUIT
>> ENDIF
>> ENDIF
>> END WITH
>> IF ::oSQLCONSULTA:RECCOUNT()=0
>> MSGSTOP('No Existen Datos Solicitados',cBuscar)
>> ::oCadena:SetFocus()
>> oSender:lEnabled:=.t.
>> Waitoff()
>> RETURN NIL
>> ENDIF
>>
>> oSender:lEnabled:=.t.
>> Waitoff()
>> RETURN Nil
>>
>
>
Gracias Juan por tu respuesta !
El Cliente desea hacer en una sola captura :
Buscar por Placas/Serie/ Propietario/Conductor/Tel.Conductor:
en una sola captura, lo que pasa que el sistema que tenian antes en fox
asi lo hacian y lo quieren igual.
El problema no es en la busqueda en 5 columnas de 2 tablas diferentes
eso lo hace rapido.
EL LOCATE es lento.
Una vez creado el dataset y estando en el Browse que apunta a ese
dataset y hago la busqueda incremental, es ahi cuando esta superlento.
caundo presiono la primer letra de lo que deseo encontrar , tarda ,
despues tecleo la segunda e igual tarda, tambien cuando le doy BackSpace
tarda.
Dijera uno , tengo un dataset con 100,000 registros , bueno tal vez ,
pero con 42 registros lo hace.
Hay otra manera de hacer busquedas incrementales que no sea por medio
del metodo Locate() ?
Hacer busqueda nadamas en el DataSet( solo en esos 42 registros)
Gracias y Saludos...
> Martin y si aparte de la cadena a buscar, tambien le pedis al cliente que
> indique por que dato desea buscar con 5 TRadio. O un CombBox cargado con las
> descripciones de las 5 columnas.
> Entonces realizarias una busqueda simple por la columan que te indicaron.
>
> Juan
>
> "Martin Del Angel" <mdangel@dymsasistemas.com> escribió en el mensaje
> news:[email=49e3a092@svctag-j7w3v3j....]49e3a092@svctag-j7w3v3j....[/email]
>> Hola a Todos!
>>
>> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
>> llenado con el codigo que ajunto:
>>
>>
>> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
>> esas 2 tablas de esta manera:
>>
>> WHERE autos.placas LIKE '%"+cadena +"%'" +;
>> " OR autos.serie LIKE '%"+cadena +"%'" +;
>> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
>> " ORDER BY clientes.nombrecliente,autos.ano"
>>
>>
>> Tengo un busqueda incremental en un TDBBrowse asi:
>>
>> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>>
>> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>>
>> El Problema es :
>>
>>
>> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
>> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>>
>> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
>> del LOCATE?
>>
>> la tabla de autos tiene 116,353 registros
>> la tabla de clientes tiene 90,435 registros
>>
>>
>>
>>
>> Hay otra manera mas eficiente de hacer esta busqueda?
>>
>>
>>
>>
>>
>> Saludos...
>>
>>
>>
>
>
> ------------------------------------------------------------ --------------------
>
>
>> METHOD BtnBuscarClick( oSender ) CLASS TSeguros
>> LOCAL cadena:=UPPER(ALLTRIM(::oCadena:Value)),cSQLSTR
>> LOCAL nCUAL,cBuscar
>>
>> IF EMPTY(CADENA)
>> MSGSTOP('Busqueda Vacia')
>> ::oCadena:SETFOCUS()
>> RETURN nil
>> ENDIF
>> oSender:lEnabled:=.f.
>>
>> Waiton('Buscando Datos espere un momento ....')
>>
>> WITH OBJECT ::oSQLCONSULTA
>> :oDataSource:=AppData:cnn
>> IF :lOpen
>> :Close()
>> ENDIF
>> cSQLSTR:="Select
>> clientes.*,autos.*,CONCAT_WS('-',clientes.lada,clientes.telc hofer) as
>> PHONE FROM clientes "+;
>> "LEFT JOIN autos ON clientes.cliente_id=autos.cliente_id "+;
>> "WHERE autos.placas LIKE '%"+cadena +"%'" + " OR autos.serie
>> LIKE '%"+cadena +"%'" +;
>> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
>> " ORDER BY clientes.nombrecliente,autos.ano"
>>
>> cBuscar:='Búsqueda de Clientes'
>> :cSelect:=''
>> :cSelect:=cSQLSTR
>> :Open()
>> IF !:lOpen
>> :lOpen:=.T.
>> IF !:lOpen
>> MSGSTOP('Error al Abrir Consulta de Clientes','Error')
>> AppData:cnn:lConnected:=.f.
>> Waitoff()
>> QUIT
>> ENDIF
>> ENDIF
>> END WITH
>> IF ::oSQLCONSULTA:RECCOUNT()=0
>> MSGSTOP('No Existen Datos Solicitados',cBuscar)
>> ::oCadena:SetFocus()
>> oSender:lEnabled:=.t.
>> Waitoff()
>> RETURN NIL
>> ENDIF
>>
>> oSender:lEnabled:=.t.
>> Waitoff()
>> RETURN Nil
>>
>
>
Gracias Juan por tu respuesta !
El Cliente desea hacer en una sola captura :
Buscar por Placas/Serie/ Propietario/Conductor/Tel.Conductor:
en una sola captura, lo que pasa que el sistema que tenian antes en fox
asi lo hacian y lo quieren igual.
El problema no es en la busqueda en 5 columnas de 2 tablas diferentes
eso lo hace rapido.
EL LOCATE es lento.
Una vez creado el dataset y estando en el Browse que apunta a ese
dataset y hago la busqueda incremental, es ahi cuando esta superlento.
caundo presiono la primer letra de lo que deseo encontrar , tarda ,
despues tecleo la segunda e igual tarda, tambien cuando le doy BackSpace
tarda.
Dijera uno , tengo un dataset con 100,000 registros , bueno tal vez ,
pero con 42 registros lo hace.
Hay otra manera de hacer busquedas incrementales que no sea por medio
del metodo Locate() ?
Hacer busqueda nadamas en el DataSet( solo en esos 42 registros)
Gracias y Saludos...
-
- Mensajes: 620
- Registrado: Jue Mar 23, 2006 2:39 am
Busqueda Incremental Lenta Mysql
Martin:
Donde estás abriendo el cursor ?, del lado del cliente o del lado del
servidor ?
Estoy seguro que por ahi van los tiros.
Saludos
Rene Flores
http://www.ciber-tec.com
Del Angel escribió:
> Hola a Todos!
>
> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
> llenado con el codigo que ajunto:
>
>
> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
> esas 2 tablas de esta manera:
>
> WHERE autos.placas LIKE '%"+cadena +"%'" +;
> " OR autos.serie LIKE '%"+cadena +"%'" +;
> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
> " ORDER BY clientes.nombrecliente,autos.ano"
>
>
> Tengo un busqueda incremental en un TDBBrowse asi:
>
> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>
> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>
> El Problema es :
>
>
> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>
> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
> del LOCATE?
>
> la tabla de autos tiene 116,353 registros
> la tabla de clientes tiene 90,435 registros
>
>
>
>
> Hay otra manera mas eficiente de hacer esta busqueda?
>
>
>
>
>
> Saludos...
>
>
Donde estás abriendo el cursor ?, del lado del cliente o del lado del
servidor ?
Estoy seguro que por ahi van los tiros.
Saludos
Rene Flores
http://www.ciber-tec.com
Del Angel escribió:
> Hola a Todos!
>
> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
> llenado con el codigo que ajunto:
>
>
> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
> esas 2 tablas de esta manera:
>
> WHERE autos.placas LIKE '%"+cadena +"%'" +;
> " OR autos.serie LIKE '%"+cadena +"%'" +;
> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
> " ORDER BY clientes.nombrecliente,autos.ano"
>
>
> Tengo un busqueda incremental en un TDBBrowse asi:
>
> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>
> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>
> El Problema es :
>
>
> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>
> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
> del LOCATE?
>
> la tabla de autos tiene 116,353 registros
> la tabla de clientes tiene 90,435 registros
>
>
>
>
> Hay otra manera mas eficiente de hacer esta busqueda?
>
>
>
>
>
> Saludos...
>
>
-
- Mensajes: 360
- Registrado: Mié Dic 03, 2008 5:05 am
Busqueda Incremental Lenta Mysql
Rene Flores wrote:
> Martin:
>
> Donde estás abriendo el cursor ?, del lado del cliente o del lado del
> servidor ?
>
> Estoy seguro que por ahi van los tiros.
>
> Saludos
>
> Rene Flores
> http://www.ciber-tec.com
>
> Del Angel escribió:
>> Hola a Todos!
>>
>> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
>> llenado con el codigo que ajunto:
>>
>>
>> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
>> esas 2 tablas de esta manera:
>>
>> WHERE autos.placas LIKE '%"+cadena +"%'" +;
>> " OR autos.serie LIKE '%"+cadena +"%'" +;
>> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
>> " ORDER BY clientes.nombrecliente,autos.ano"
>>
>>
>> Tengo un busqueda incremental en un TDBBrowse asi:
>>
>> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>>
>> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>>
>> El Problema es :
>>
>>
>> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
>> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>>
>> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
>> del LOCATE?
>>
>> la tabla de autos tiene 116,353 registros
>> la tabla de clientes tiene 90,435 registros
>>
>>
>>
>>
>> Hay otra manera mas eficiente de hacer esta busqueda?
>>
>>
>>
>>
>>
>> Saludos...
>>
>>
Gracias Rene !
Siempre lo he usado del lado del cliente , probe poniendolo del lado del
Servidor y pasa lo mismo:
Creo que en la Busqueda que hace el Metodo Locate la hace sobre las 2
Tablas usando la condiciones que se usaron en el WHERE cuando se creo el
DataSet.
De ser asi las tablas son enormes, por eso puede tardar.
Saludos...
> Martin:
>
> Donde estás abriendo el cursor ?, del lado del cliente o del lado del
> servidor ?
>
> Estoy seguro que por ahi van los tiros.
>
> Saludos
>
> Rene Flores
> http://www.ciber-tec.com
>
> Del Angel escribió:
>> Hola a Todos!
>>
>> Tengo un TSQLQuery conectado a una Base de Datos Mysql el cual es
>> llenado con el codigo que ajunto:
>>
>>
>> relaciono 2 tablas y busco una cadena de caracteres en 5 columnas de
>> esas 2 tablas de esta manera:
>>
>> WHERE autos.placas LIKE '%"+cadena +"%'" +;
>> " OR autos.serie LIKE '%"+cadena +"%'" +;
>> " OR clientes.telchofer LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrecliente LIKE '%"+cadena +"%'"+;
>> " OR clientes.nombrechofer LIKE '%"+cadena +"%'"+ ;
>> " ORDER BY clientes.nombrecliente,autos.ano"
>>
>>
>> Tengo un busqueda incremental en un TDBBrowse asi:
>>
>> METHOD BrowPolizasSeek( oSender, cSeek ) CLASS TSeguros
>>
>> RETURN oSender:oDataSet:Locate( "NOMBRECLIENTE LIKE '%"+cSEEK+"%'" )
>>
>> El Problema es :
>>
>>
>> con 42 registros en el DataSet La Busqueda es demasiadamente lenta.
>> aunque tuviera 10 registros en el dataset , sigue siendo lo mismo.
>>
>> será por la clausula WHERE que busca en 5 columnas + la nueva busqueda
>> del LOCATE?
>>
>> la tabla de autos tiene 116,353 registros
>> la tabla de clientes tiene 90,435 registros
>>
>>
>>
>>
>> Hay otra manera mas eficiente de hacer esta busqueda?
>>
>>
>>
>>
>>
>> Saludos...
>>
>>
Gracias Rene !
Siempre lo he usado del lado del cliente , probe poniendolo del lado del
Servidor y pasa lo mismo:
Creo que en la Busqueda que hace el Metodo Locate la hace sobre las 2
Tablas usando la condiciones que se usaron en el WHERE cuando se creo el
DataSet.
De ser asi las tablas son enormes, por eso puede tardar.
Saludos...
Busqueda Incremental Lenta Mysql
Quizás puedas mejorarlo creando índices.
Saludos
Rafa Carmona
Saludos
Rafa Carmona
-
- Mensajes: 360
- Registrado: Mié Dic 03, 2008 5:05 am
Busqueda Incremental Lenta Mysql
rafa wrote:
> Quizás puedas mejorarlo creando índices.
>
> Saludos
> Rafa Carmona
Gracias Rafa !
En la Tabla de Clientes tengo 2 indices :
uno ordenado por CLIENTE_ID PRIMARY UNIQUE
y el otro es un Fulltext :por NOMBRECLIENTE, NOMBRECHOFER
EL de Autos tengo 3 indices:
PRIMARY AUTOS_ID UNIQUE
CLIENTE_ID
SERIE,PLACAS FULLTEXT
El Campo que le paso al LOCATE es NOMBRECLIENTE que por supuesto esta en
el Indice.
Saludos....
> Quizás puedas mejorarlo creando índices.
>
> Saludos
> Rafa Carmona
Gracias Rafa !
En la Tabla de Clientes tengo 2 indices :
uno ordenado por CLIENTE_ID PRIMARY UNIQUE
y el otro es un Fulltext :por NOMBRECLIENTE, NOMBRECHOFER
EL de Autos tengo 3 indices:
PRIMARY AUTOS_ID UNIQUE
CLIENTE_ID
SERIE,PLACAS FULLTEXT
El Campo que le paso al LOCATE es NOMBRECLIENTE que por supuesto esta en
el Indice.
Saludos....
Busqueda Incremental Lenta Mysql
Bueno, quizás usando expresiones regulares , sean más efectivas que usar
el LIKE.
El usar LIKE %NOMRE% penaliza mucho.
Quizas, haciendo un REGEXP "^NOMBRE" sea más efectiva.
Saludos
Rafa Carmona
el LIKE.
El usar LIKE %NOMRE% penaliza mucho.
Quizas, haciendo un REGEXP "^NOMBRE" sea más efectiva.
Saludos
Rafa Carmona
-
- Mensajes: 360
- Registrado: Mié Dic 03, 2008 5:05 am
Busqueda Incremental Lenta Mysql
rafa wrote:
> Bueno, quizás usando expresiones regulares , sean más efectivas que usar
> el LIKE.
>
> El usar LIKE %NOMRE% penaliza mucho.
>
> Quizas, haciendo un REGEXP "^NOMBRE" sea más efectiva.
>
> Saludos
> Rafa Carmona
Gracias Rafa !
Ya lo hice y de todas maneras es lo mismo .
Reitero: El llenado del Query es rápido , en eso no tengo ningún problema.
Hice pruebas: hasta con un resultado en el Query de 3 registros la
busqueda es lentisima.
Como que la busqueda no la hace sobre el resultado (Query).
En Delphi, el metodo Locate del Query , realiza la busqueda sobre el
Resultado y no basado en el SELECT que formo dicho Query.
Seria bueno que hubiese un metodo en los datasets de xailer que buscara
sobre el Resultado del dataset.
Saludos...
> Bueno, quizás usando expresiones regulares , sean más efectivas que usar
> el LIKE.
>
> El usar LIKE %NOMRE% penaliza mucho.
>
> Quizas, haciendo un REGEXP "^NOMBRE" sea más efectiva.
>
> Saludos
> Rafa Carmona
Gracias Rafa !
Ya lo hice y de todas maneras es lo mismo .
Reitero: El llenado del Query es rápido , en eso no tengo ningún problema.
Hice pruebas: hasta con un resultado en el Query de 3 registros la
busqueda es lentisima.
Como que la busqueda no la hace sobre el resultado (Query).
En Delphi, el metodo Locate del Query , realiza la busqueda sobre el
Resultado y no basado en el SELECT que formo dicho Query.
Seria bueno que hubiese un metodo en los datasets de xailer que buscara
sobre el Resultado del dataset.
Saludos...