Visual Basic - Solo para expertos

Life is soft - evento anual de software empresarial
 
Vista:

Solo para expertos

Publicado por Silvia (38 intervenciones) el 01/04/2006 18:23:38
Perdonad que ponga ese título en el mensaje pero esque ya lo he consultado tanto y nadie ha sabido contestarmelo que ya pienso que es solo para expertos esta pregunta o es imposible hacerlo

Suponed que teneis una base de datos en access con cien registros, os posicionais al principio de los registros con el fin de recorrer todos los registros hasta el fin.
En cada registro en el que os posicionais cogeis unos valores de los campos con los que realizais una función que tarda en devolverte un valor aproximadamente en 30 segundos, una vez te devuelve a los treinta segundos el valor de la función, se posiciona en el siguiente registro y hace lo mismo, y así hasta llegar al final de los cien registros uno por uno. Es decir un monton de tiempo.
Para esto uso el típico bucle while not rst.eof ........... wend.
Y yo me pregunto ¿No existe un metodo mas rápido?, es decir que tarde treinta segundos en devolverte el valor de la función pase, pero ...¿no hay forma de moverme por los registros de arriba a abajo y que al pasar por cada registro se ejecute la función, sin tener que esperar a que me de el resultado de ese registro y así continuar con el siguiente registro?
Es decir yo quiero moverme de forma asíncrona por la base de datos, pero no se como o si se puede hacer eso.
No es lo mismo encender un cohete y esperar a que suene el trueno para lanzar otro que encender la mecha de forma seguida a todos y luego que cada uno suene cuando le toque.
En fin dadme un consejo 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:Solo para expertos

Publicado por Alex (119 intervenciones) el 01/04/2006 20:55:50
Hola, trato de responder la pregunta que haces pero la verdad es que no te entiendo muy bien lo que escribes, lo unico que entendi es que tarda demasiado tiempo en ir de registro en registro, un bucle como el que tu estas utilizando es muy rapido en manejar ese tipo de datos, lo que creo que este pasando es que tal vez tarda es por la velocidad del microprocesador que tienes... Como te dije antes, no te entendi muy bien lo que tratas de darnos a entender, espero quete explique un poco mas y asi poder ayudarte... Hasta luego...
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:Solo para expertos

Publicado por Cecilia Colalongo (3116 intervenciones) el 01/04/2006 21:00:36
Podría hacerse teóricamente con Threads o Hilos y la implementación en VB es bastante tediosa y suele tornarse inestable por los manejos de memoria.

Sería más prudente revisar cual es esa función que solo con los valores de unos campos tarda 30 segundos en devolver un resultado y desde ahí intentar optimizar.
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:Solo para expertos

Publicado por Silvia (38 intervenciones) el 02/04/2006 11:19:14
Silvia y alex imaginad:
En una base de datos de access he almacenado los tiempos de cada corredor en una carrera, es decir en un campo del registro almaceno el tiempo que hace al entrar en la meta, en otro campo almaceno el dorsal del corredor, y en otro campo almaceno el teléfono móvil del corredor.
Bien una vez que ha terminado la carrera mediante:
rst.movefirst
While not rst.eof
aqui creo el objeto para mandar mensajes al movil del corredor el cual tarda unos 15 segundos en mandar el mensaje y mandarme la respuesta de si ha sido enviado correctamente o no
dim b
dim j
b=createobject("mandarmensajes")' objeto proporcionado por empresa para mandar mensajes
mandarmensajes.setaccount("[email protected]")' cuenta del que manda los mensajes
mandarmensajes.setpasword("1233")' contraseña
mandarmensajes.settext(rst.dorsal)' dorsal
mandarmensajes.setto(rst.telefono)' telefono
mandarmensajes.send ' envia el mensaje sms
j=mandarmensajes.getresult ' te dice si ha mandado el mensaje ok o ko
rst.movenext ' nos movemos al siguiente registro y hacemos lamisma operacion y asi hasta el final.
wend

Claro si tuviera que mandar diez mensajes no pasaba nada, pero son muchos mensajes, unos mil mensajes y si por cada mensaje tarda unos 12-15 segundos es mucho tiempo esperando en la meta.

Cuando mandas el mensaje con mandarmensajes.send y esperas a recibir el resultado j=mandarmensajes.getresult es ahí donde tarda tiempo en pasar de registro a registro.
Por eso yo preguntaba si había forma de que una vez hubiera mandado el mensaje no se esperara a recibir el resultado, si no que continuara mandando mensajes hasta el fin, independientemente de lo que tardara en recibir la respuesta del mensaje enviado.
En fin un lio.
Yo no puedo modificar la libreria aportada por la empresa de envio de mensajes sms. Ya intenté hacerlo de otra forma es decir que pasara de registro en registro y me creara por cada registro por el que pasaba un archivo script .vbs el cual ejecutaba de forma asíncrona con un shellexecute, pero de repente el ordenador se me quedaba sin memoria.
Gracias de todas formas.
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:Solo para expertos

Publicado por Cecilia Colalongo (3116 intervenciones) el 02/04/2006 12:35:18
Consulta con el proveedor de la librería si tiene algún método asincrónico, sino revisa en otras respuestas del foro que se dieron sobre multithreading e intenta implementarlo a ver que sucede.

Fijate en:

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=31822&lngWId=1

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=24747&lngWId=1

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=36997&lngWId=1

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=34927&lngWId=1

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=56175&lngWId=1

que tienes ejemplos.
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:Solo para expertos

Publicado por Cecilia Colalongo (3116 intervenciones) el 02/04/2006 14:29:15
Fijate de hacer lo siguiente, el objeto para enviar mensajes crearlo solamente antes del inicio del bucle While:

b=createobject("mandarmensajes")

Setear los parámetros que nunca cambian también antes del bucle:

mandarmensajes.setaccount("[email protected]")
mandarmensajes.setpasword("1233")

Y dentro del bucle solo hacer:

mandarmensajes.settext(rst.dorsal)
mandarmensajes.setto(rst.telefono)
mandarmensajes.send

De ésta forma imagino que será un poco más rápido ya que no estará esperando el resultado ni crearas muchas veces el mismo objeto.
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:Solo para expertos

Publicado por Silvia (38 intervenciones) el 02/04/2006 15:36:40
Gracias Cecilia tu si que sabes, eres un verdadera experta
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:Solo para expertos

Publicado por masnuevo (2 intervenciones) el 02/04/2006 23:11:52
¿Cual es el español estándar que utilizas?
porque en "ocaciones"??????? puede tardar mucho este proceso.
¿De dónde te has sacado este palabro? ¿es TU español estándar? En vez de dedicarte a criticar y menospreciar a los demás, aprende lenguaje (además de programación).
ktdn
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:Solo para expertos

Publicado por Alex (119 intervenciones) el 03/04/2006 05:01:57
Nuevo, todos estamos de acuerdo con masnuevo, asi que ya vete calmando tu showsito estandarizado, por que aqui solo habemos personas "nada estandar" que sabemos lo que estamos haciendo y no nos quedamos en la misma como tu, que solo sigues criticando y no aprendes de lo que preguntamos...
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:Solo para expertos

Publicado por Alex (119 intervenciones) el 03/04/2006 05:03:17
Nuevo, todos estamos de acuerdo con masnuevo, asi que ya vete calmando tu showsito estandarizado, por que aqui solo habemos personas "nada estandar" que sabemos lo que estamos haciendo y no nos quedamos en la misma como tu, que solo sigues criticando y no aprendes de lo que preguntamos...
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:Solo para expertos

Publicado por Alex (119 intervenciones) el 03/04/2006 05:03:58
Nuevo, todos estamos de acuerdo con masnuevo, asi que ya vete calmando tu showsito estandarizado, por que aqui solo habemos personas "nada estandar" que sabemos lo que estamos haciendo y no nos quedamos en la misma como tu, que solo sigues criticando y no aprendes de lo que preguntamos...
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:Solo para expertos

Publicado por marcos (7 intervenciones) el 03/04/2006 18:33:27
se que es basico lo de que poner antes y que poner despues de un while, pero a todos nos pasa alguna vez... y nuevo yo entendi a la perfeccion su español, eres retrasado?
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:Solo para expertos

Publicado por tiranorex (1 intervención) el 17/06/2006 20:49:39
hola es medio complejos recorrer una base con ciclos while siempre es lento, deberias intentar hacerlo mediante alguna consulta SQL es mucho mas rapido, yo he probado calcular algo con while y si son muchos registro se demora mucho pero con SQL te devuelve los valores al instante. en este caso el problema es realizar una buena consulta SQL
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