Lentitud en programa multisuaurio VB6 php y access

Tengo un programa que consiste en la gestión de personal de tal forma que en un programa en VB 6 que tira contra access 2003 se conceden permisos almacenados en la bd y además los usuarios a través de una web hecha en PHP que tira contra la misma bd se validan contra la bd y piden a través de un formulario los permisos.

En una tabla se almacenan los permisos y lo único que hago es cambiar el estado de los mismos de solicitado al que corresponda. El programa en VB se conecta mediante odbc de access.mdb y la web php también.

ADO:

filtrosolexcel = Sql3
'forma de abrir el recordset y asociarlo a la base de datos
Rstaceptarsolicitud. Open Sql3, dbusu, adOpenDynamic, adLockOptimistic

La web tiene sesiones. Y me conecto de la siguiente forma

$enlace = odbc_connect('personalwebw', '', ''); //esto esta en acceso_db.php

//De esta forma accedo a la base de datos. En todos los sitios.php

include('acceso_db.php');
if(isset($_POST['enviar']))
{ // comprobamos que se hayan enviado los datos del formulario
$sql = "SELECT numero,contrasena FROM usuario WHERE numero='".$_REQUEST['usuario']."' AND contrasena='".$_REQUEST['contrasena']."'";
if ($resultado = odbc_exec($enlace,$sql))

PROBLEMA : Cuando un usuario abre la aplicación vb en red, va bien, pero en el momento que se abre la aplicación web ralentiza enormemente la aplicación de VB. ¿POR QUÉ?

Los permisos están bien.

Respuesta
-1

Bajo mi punto de vista, puede ser que el problema es que Access no suele responder demasiado bien cuando se intenta usar como servidor de datos, acaba ralentizando los procesos de lectura/escritura en la base de datos.

Entiendo que la conexión ODBC en este sentido se comporta de forma similar a una conexión "permanente", de modo que en el momento de establecerla la mantiene abierta para el cliente que hace la consulta y pone al resto a la cola.

Yo me encontré con este problema años atrás con una aplicación que usaban, sólo en escritorio, de forma simultánea entre 4 y 8 usuarios, además de yo mismo, que la usaba mediante un túnel IP a distancia (unos 1500 km).

A mi me iba lento, pero a los otros usuarios, incluso cuando yo no lo usaba, también, los tiempos de respuesta de carga de datos de la tabla más grande (en aquel momento en torno a 40 campos y 250.000 registros) eran de unos cinco minutos.

La solución que emplée y que me solucionó todos los problemas de congestión fue doble:

- Por un lado puse un servidor Linux (openSuSE) con MySQL en un ordenador aparte.

- Modifiqué el código de todos los formularios afectados para que los datos se cargaran por código VBA.

El tiempo pasó a ser de minutos a segundos. Yo, desde mi casa, conectaba por Terminal Server con un servidor de la oficina en España, y de ahí accedía al servidor que tenía, en este caso en Marruecos (donde la subida de la ADSL no era nada del otro mundo), y los tiempos de respuesta eran de unos 4 o 5 segundos.

Si tienes ocasión, te valdría con un ordenador común y corriente, no hace falta que sea un servidor.

Aparte, Access es una base de datos de archivo, y por lo que dices, te convendría usar un servidor de BBDD.

Una cosa más: cambiar el acceso a datos a código VBA es un rollazo, pero vale la pena. Yo me acostumbré a trabajar así y no he vuelto a diseñar nada con acceso directo a datos, es decir, ningún formulario de los que diseño tienen asociada una tabla o una consulta en Origen de datos, lo hago por código.

Ya te digo, programarlo es un rollazo, pero los resultados son buenos: controlas absolutamente todo dato que usas.

En el sistema de vb abro una conexión al principio y la cierro al final. Toda la programación esta en código de vb no enlazo por propiedades el formulario a las tablas.

En la parte web si es cierto que lo mismo abro la conexión al principio de cada página y no la cierro hasta que el usuario cierra sesión. Es decir en cada página pongo:

include('acceso_db.php'); 

y ese fichero tiene:

$enlace = odbc_connect('personalwebw', '', '');

Ahora después de vuestras ideas voy a cerrar conexión en cada página.php a ver que tal .

Gracias

Ok, de todos modos, permíteme insistir, estás usando una base de datos de archivo como un servidor. No es que no se pueda, pero no es lo más aconsejable, porque ocurre lo que te pasa a tí.

Los servidores suelen trabajar con multithreading, Access, que yo sepa no.

Desconozco cuantos usuarios concurrentes tienes, pero es como intentar ganar un gran premio de F1 con un Ford Fiesta.

1 respuesta más de otro experto

Respuesta

Has probado hacer conexiones distintas para cada tipo de sistema, ejemplo... Que vb se conecte con un usuario y contraseña distinto al del entorno web. Además de eso en tu código abres y cierras la conexión dependiendo de la acción a ejecutar.? O siempre mantienes abierta la conexión a la base de datos. Eso puede ayudar mucho a que tu aplicación no corra tan lento.

En el ordenador donde tengo el apache y php que es donde esta la base de datos tengo un odbc para el servidor php y otro en cada maquina cliente con diferente nombre.

En la parte web si es cierto que lo mismo abro la conexión al principio de cada página y no la cierro hasta que el usuario cierra sesión. Es decir en cada página pongo:

include('acceso_db.php'); 

y ese fichero tiene:

$enlace = odbc_connect('personalwebw', '', '');

Ahora después de vuestras ideas voy a cerrar conexión en cada página.php a ver que tal .

Gracias

Recuerda valorar la respuesta si te funciono.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas