FoxPro/Visual FoxPro - ¿Pueden ayudarme a OPTIMIZAR esta expresión?? =)

 
Vista:

¿Pueden ayudarme a OPTIMIZAR esta expresión?? =)

Publicado por Andrea (325 intervenciones) el 01/05/2010 14:58:56
Hola a todos.
Tengo un programa funcionando en un mercado en red de 3 computadoras

Al cargar una venta, si no lee el código de barra, el cajero puede acceder a una ventana de búsqueda, hecha con LISTBOX

El comando que uso en el ROWSOURCE del LISTBOX es

-------------------------------------------------------------------------------------------------------------------------------

SELECT nombre, codigo FROM articulos ORDER BY nombre INTO CURSOR articulo_tmp

-------------------------------------------------------------------------------------------------------------------------------

El problema es que tarda 4 o 5 segundos en mostrar los datos y les puedo asegurar que es mucho tiempo cuando la gente está esperando en la cola y un cliente tiene lleva mucha mercadería

¿Cómo podría optimizar esa expresión para que aparezca más rápido??

Muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Pueden ayudarme a OPTIMIZAR esta expresión?? =

Publicado por es_binario (757 intervenciones) el 01/05/2010 16:26:06
El problema debe de ser la red, podrias solucionarlo si la red esta cableada, aunque una mejor opcion seria que te cambiarasa a mysql, por ejemplo, la instruccion la probe en una red domestica sobre una tabla que tiene 25 000 articulos registrados y me demoro .020 segundos, podria ser tambien el contenedor, por que no usas un grid en vez del listbox y le quitas las lineas y ocultas el deletemark asi, parecera mas al listbox, digo en caso de que sean unos 3 mil articulos los que contenga la tabla.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Pueden ayudarme a OPTIMIZAR esta expresión?? =

Publicado por Andrea (325 intervenciones) el 02/05/2010 00:00:11
Gracias es_binario

Entiendo lo de MySQL y por lo que estuve leyendo de otros post tuyos debe funcionar muy bien, aunque eso lleva un tiempo de "estudio" y de "modificación" que seguramente los voy a estar usando en próximos programas.

En realidad yo empecé modificando un programa que hice "de prueba" y que se pudo usar en una PC pero luego compraron 2 más y las conectaron en red.

El programa siguió funcionando bien, pero a medida que se van llenando las tablas todo se pone muy pesado.
Obviamente que la solución es migrar a algún motor de bases SQL.

Por eso era mi consulta: saber si había algún error o algo mejorable en la instrucción SELECT para tratar de "aligerar" las búsquedas.

Mientras tantos ya empecé a hacer algunas cosas en MySQL, pero de ahí a que quede funcionando me faltan unas cuantas horitas...

Muchas gracias =)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Pueden ayudarme a OPTIMIZAR esta expresión?? =

Publicado por ACM (162 intervenciones) el 02/05/2010 02:46:33
Hola Andreita

Prueba dentro del interactivechange

SELECT nombre, codigo FROM articulos where alltrim(this.value) $ nombre ORDER BY nombre INTO CURSOR articulo_tmp

Nota. Si tiene razon el amigo es_binario con mysql todo se hace mas facil en cuando a programacion. y en respuestas de informacion.

saludos

Acm.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Intenta Esto

Publicado por es_binario (757 intervenciones) el 02/05/2010 08:47:49
Creo que el problema que tienen a la hora de hacer estos sistemas es que haces el sistema y luego simplemente lo pones en el servidor y lo compartes entonces todos lo executan ahi y ese es el problema.

Mira lo que tienes que hacer es bien simple tener en el servidor nada mas los datos, y en todas las computadoras Tener el programa sin datos y nada mas la ruta del open database en la red y claro de forma compartida con shared

hice un practica, Tome una base de datos entera y la puse en una carpeta que esta compartida en una red y simplente me puse a hacer consultas sobre ella, ejemplo

*// abrir la base de datos Mi servidor se llama Athlonvenice
OPEN DATABASE \\athlonvenice\Hugo_b\Farmaciai\Datos\Datos.dbc SHARED

*// selecciono la tabla articulos y le doy un alias
USE datos!articulos ALIAS arti

*// hago una consulta general sobre la tabla
SELECT * FROM arti
*// En la barra de estado de Foxpro me aparece
*// Selected 14393 records in 0.00 seconds

*ahora voy a hacer una consulta filtrada sobre esa misma tabla
SELECT descrip, p_publico FROM arti WHERE descrip like "%"+"PED"+"%"

*// en la barra de estado de foxpro me aparece la siguiente leyenda
*// selected 173 records in 0.03 seconds

Todo este esperimento lo hice desde la ventana commands de foxpro, esta tabla en particular que consulte esta indexada y pertenece una base de datos llamada datos.dbc la tabla en el explorardor de windows pesa 3,910Kbs entonces creo que esa seria otra solucion alternativa a usar mysql.

pensaba hacer un video, pero creo que no es necesario cualquiera que tenga mas de una pc, en una red, puede hacer este esperimento.

NOTA: Creo que la razon es que cuando compartes la aplicacion entera, todos acceden a ella, y le toca al servidor decidir quien la esta usando pero en realidad no hay un usuario o una entidad a la cual responder propiamente a exepcion de la mac adress de cada equipo, la forma correcta es como lo describi antes en el servidor los datos y cada cliente accede a el de forma normal.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Intenta Esto

Publicado por Luis Polo (134 intervenciones) el 02/05/2010 17:53:40
Saludos Es_binario, esta idea de poner solo la data en el servidor lo he leido muchas veces, pero aun asi no se como hacerlo; tengo un sistema de Planillas y las tengo en las carpetas asi de la sgte manera:

D:\PLANILLA\
D:\PLANILLA\TABLAS
D:\PLANILLA\BMPS
D:\PLANILLA\FORMULARIOS
D:\PLANILLA\INFORMES
D:\PLANILLA\CLASES
D:\PLANILLA\PROGS

El Ejecutable va dentro de la raiz D:\PLANILLA\, ahora siguiendo tu ejm me dices que solo deje los datos en el servidor en mi caso seria dejar los datos en la carpeta D:\PLANILLA\TABLAS\, entonces en los 3 equipos de red que tengo dejaria solo el EXE y las demas carpetas. esta es la manera de hacerlo amigo; o que me faltaria.
Uso VFP 9 y windows Xp/Vista.

Saludos amigo y gracias por apoyar a mucha gente como Yo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Intenta Esto

Publicado por Andrea (325 intervenciones) el 03/05/2010 03:29:30
A ACM y es_binario, GRACIAS por las respuestas y las sugerencias

Las voy a poner en práctica y luego les cuento

=)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:¿Pueden ayudarme a OPTIMIZAR esta expresión?? =

Publicado por Juanma Cruz (512 intervenciones) el 03/05/2010 13:40:28
No hay mucho más optimizable en tal consulta. Recuerda tener un índice por NOMBRE a fin de que sea -en teoría- más rápido.

Estoy seguro que la lentitud se debe a la carga de los datos en el ListBox, lo mismo que si fuese un combo.

Yo cambiaría el ListBox por una Grid, convenientemente maquillada, que no intenta cargar en memoria todos los datos a mostrar, sino que lo hace progresivamente a medida que te desplazas por ellos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar