Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: Solrac_V2.0 en Noviembre 08, 2016, 08:02:36 pm
-
Hola buenas tardes Soy nuevo por aqui, soy aficionado a la programacion con VB6. El problema radica en que son 15 computadoras, una con W xp y todas las demas con W7, cada computadora tiene instalada la aplicacion VB6, esta aplicacion conecta con una unica base de datos .mdb que esta en una carpeta compartida en una de las computadoras de la red, no existe servidor todas son un grupo de trabajo nada mas. El problema es lentitud extrema en la computadora que tiene W xp, sin embargo en pruebas usando la base de datos en disco duro local mejora el rendimiento. Todas las computadoras tienen office 2007 instalado. Cuando abro la base de datos directamente desde Access no noto el problema, solamente cuando la abre mi programa VB6. El rendimiento en las otras computadoras es muy bueno. A alguien le a ocurrido algo parecido?. Por que con W7 todo funciona OK y con Windows XP SP3 pasa esto?, alguna idea?. gracias de antemano.
-
Probaste de indicar el path del mdb remoto usando el nombre de la pc o la ip? Me pasó algunas veces que usando nombre, o ip abre más rápido una conexión Ado
-
El path es el siguiente: \\Coordinacion-1\Users\Public\Documents\ARCHIVOS VARIOS\CARLOS VINCENT\CAMI.mdb
y te dejo parte del codigo del modulo .bas que usa mi aplicacionpara conectarse a la base de datos:
Public Sub Ini_BD()
If IsNumeric(Servidores) = True Then
If Conex.State = 1 Then Conex.Close 'Pregunto primero si está abierta la base de datos; por si acaso, de un mal cierre anterior de la base de datos
Conex.Provider = "Microsoft.Jet.OLEDB.4.0;" 'Establesco mi Proveedor de motor de Base de Datos
'***********************************************************'
'// ESTE CODIGO GENERA ERROR 7005 CUANDO SE SELECCIONA UN REGISTRO EN EL DATAGRID // OJO
'If Err.Number <> 0 Then 'Verifico si ocurrió error (Esto por si se ejecuta el aplicativo, en un equipo donde no está instalado el motor de base de datos ACCESS)
' MsgBox "Se ha producido un Error al intentar acceder al motor de Base de Datos JET, por favor verifique o comuníquese con soporte técnico carlosvincent@hotmail.com . La descripción del error es la siguiente: " & Err.Number & ". : " & Err.Description & ".", vbCritical, "CAMIRED" 'Mensaje de error y su descripción
' Terminacion
'End If
'***********************************************************'En algunos entornos Unix/Linux que usen WINE para la ejecuión de aplicaciones Windows pueden darse estos casos, y también en instalaciones Windows que no tengan instado MS Office; puede darse este error
Verif_BD 'Verifico existencia de base de datos
'/////////////////////////////// //////////////////////////////////////////////////////////////////
Conex.ConnectionTimeout = 590 '/------------------> / EN EVALUACIÒN... /
Conex.CommandTimeout = 590 '/ / POR ERRORES EN CONCURRENCIA (SI FALLA SE BUSCARÁ OTRA SOLUCIÓN)/
'/////////////////////////////// //////////////////////////////////////////////////////////////////
Conex.ConnectionString = "Data Source=" & Patch_BD & " ;Jet OLEDB:Database Password=45RT6" 'Especifico mi cadena de conexión a la base de Datos, indico el Path y la contraseña
Conex.Open 'Abro mi conexión
If RecS.State = 1 Then RecS.Close 'Por si acaso el RecordSet no hubieses sido cerrado anteriormente lo cierro antes de ponerme a trabajar con él
RecS.CursorLocation = ClientServi
RecS.CacheSize = CacheTamaño
RecS.Open CONSULTA, Conex, TipoCursor, BloQueos 'Abro el RecordSet y lo lleno con mi consulta, para esta operación hago mención de mi conección "Conex", defino el tipo de cursor y defino el control de concurrencia
Else
'///////////////////////////////////////////////////////////////
If Conex.State = 1 Then Conex.Close '/
Conex.Open Servidores '/
Conex.ConnectionTimeout = 590 '/
Conex.CommandTimeout = 590 '/
If RecS.State = 1 Then RecS.Close '/----------------------->en prueba
RecS.CursorLocation = ClientServi '/
RecS.CacheSize = CacheTamaño '/
RecS.Open CONSULTA, Conex, TipoCursor, adLockReadOnly '/
End If '/
'///////////////////////////////////////////////////////////////
End Sub
Espero me puedan ayudar, es raro; repito con W7 funciona perfecto pero la computadora que tiene Windows XP SP3 va lenta como una tortuga.
Probare como tu dices Waldo, usando direccion IP 192.xxx.xxx.xxx a ver que pasa.
Muchas gracias por responder tan pronto, y disculpa si mi codigo es un poco desordenado, je je je :P
-
recuerda poner la ip fija del servidor en el router.
-
:)
Muy Agradecido !!!!!!
\\192.168.0.100\Users\Public\Documents\ARCHIVOS VARIOS\CARLOS VINCENT\CAMI.mdb
¡¡¡SORPRENDENTE!!! SI MEJORÓ EL RENDIMIENTO No es un Rayo; pero va a una velocidad Normal.
¿Por qué ocurre esto? ¿Podrían decirmelo? Por Favor ...
Conex.ConnectionString = "Data Source=\\192.168.0.100\Users\Public\Documents\ARCHIVOS VARIOS\CARLOS VINCENT\CAMI.mdb ;Jet OLEDB:Database Password=45RT6" 'Especifico mi cadena de conexión a la base de Datos, indico el Path y la contraseña
Muchas Gracias !!!!
-
Cuando un usuario se conecta, Access además de comprobar el nombre de usuario y la contraseña también comprueba el host, osea, resuelve a través del servicio DNS (ya sea local o remoto) la IP y/o dominio desde donde se realiza la conexión... es aquí donde se produce el problema: si el servicio DNS no responde con la rapidez necesaria (algo muy común) se retrasa el login y todo lo demás (consulta, ejecución o lo que sea que se quiera hacer en el servidor). Tomando primero como referencia el ip primero.
-
Si todavía esta lenta te invito a leer el soporte de microsoft aqui te dejo el enlace
https://support.office.com/es-es/article/Aumentar-la-velocidad-de-ejecuci%C3%B3n-de-Access-f6827763-bb5c-4f48-8457-7a14addab6be (https://support.office.com/es-es/article/Aumentar-la-velocidad-de-ejecuci%C3%B3n-de-Access-f6827763-bb5c-4f48-8457-7a14addab6be)
-
para aumentar la velocidad de windows 7 y xp.
Nota tener en cuenta optiones que necesites tener activo como el compartir impresora entre otros
http://docdro.id/S14U3lh (http://docdro.id/S14U3lh)
-
Muchas Gracias por tu explicación obethermy y también a ti Waldo, que respondiste primero. Si también es que mi aplicación es un poco pesada y hace muchos querys seguidos, ya que debe verificar existencia de ciertos datos o hacer comprobaciones con los datos antes de guardar, ejemplo saber si ya el dato de una persona ya estaba registrado para un día en particular y que no se repita dos veces la misma acción con esa persona con unas mismas condiciones en una misma fecha, etc, etc. Entre otras cosas ...
Espero yo también poder aportar más adelante algo de lo poco que sé ... para ayudar a otros.
Saludos desde Venezuela.
-
Yo te recomendaría que con tiempo te pases a un sql express, y te olvidas de todos esos problemas, está pensado para trabajar en red
-
Hola Waldo, si yo también estuve pensando en esa posibilidad una vez finalizara el proyecto (Versión Alfa), al cual se me ocurre hacerle una y mil mejoras.
Creo que para pasar de Access a SQL Server; por ejemplo debería modificar todos los Querys de Access #03/03/2016# y cambiarlos por '03/03/2016' verificando todos los demás para compatibilidad, ¿Podrías hacerme alguna recomendación? . El programa hace cálculos con fechas, y tiene que hacer comparaciones con fechas (ejemplo : calcular la edad de la persona en base a su fecha de nacimiento, cantidad de días transcurridos entre dos fechas, fechas de recepción de exámenes médicos contra fechas de salida de entrega a los pacientes, sumar días a una fecha para despues hacer algún cálculo, etc.). A parte de que estoy verificando siempre el formato de fecha empleado tanto por VB6 (dd/mm/yyy) como por el motor de base de datos (mm/dd/yyyy). El usuario usa el formato dd/mm/yyyy , pero la base de datos está usando el formato mm/dd/yyyy. Muchas gracias por tu aporte, si pudieras hacerme alguna sugerencia al respecto, es bienvenida.
-
El tema de las fechas es un tema:D. Lo que te conviene hacer es siempre guardar las fechas y horas en su formato date como corresponde, tanto dentro de vb como base de datos.
Para expresarlas conviene usar el formato yyyymmdd asi te olvidas de la configuración regional, siempre atrás del año, viene el mes. Es preferible que se dé un error fecha invalida, a que se invierta día x mes, y no te enteres.
A Sql se lo podés pasar como '20161110' .
Lo mejor es en lugar de escribir un string con la consulta SQL, es usar un Ado Command, declaras un parámetro tipo date y él se encarga de formatear la fecha.
Espero te sirva.
Saludos
-
lo que necesitas es exportar tablas access a archivos .csv para luego cargarlo a cualquier base de datos.
-
Agradezco la amabilidad de ustedes, para Waldo, el diseno de la base de datos tiene ya previstos los campos tipo fecha y en el codigo VB6 ya hay varibles de tipo Date para almacenar las fechas, acostumbro usar mucho Format(nombreVarible, "DD/MM/YYYY"), esto ultimo incluso dentro del Query .... " & Format(DateTimePicker.Value, "DD/MM/YYYY") & " ...RESTO DEL QUERY o uso .... " & Format(Var_tipo_Date, "DD/MM/YYYY") & " ...RESTO DEL QUERY.
Obviamente si como dices tu la base de datos me devuelve un valor YYYY/MM/DD, pienso debo mostrarle el resultado al usuario con cambio en el formato a DD/MM/YYYY por codigo. :)
Con respecto al Ado Command nunca lo he usado, siembre he usado Query sql dentro de un String, y no entiendo bien lo del parametro tipo Date. Quien me enseno me dijo que asi se veia mas profesional... cuestion criterios supongo...
Y nuevamente muchas gracias Waldo.
Y lo que me dice obethermy esta bien; pero los Query's SQL de Access no son tan compatibles (Standar ANSII 92 creo sino me equivoco), y todos los comandos SQL contenidos a lo largo de todos los formularios del programa deben ser revisados, porque yo puedo exportar a un archivo .cvs pero creo que igual deberia modificar los comandos SQL que envia mi programa contra la base de datos. Por ejemplo en versiones viejas de Oracle no existia el INNER JOIN ... y si mi programa le lanzara un query con INNER JOIN a una BD Oracle de una version que no lo soporte voy a obtener un posible error en RUNTIME. Ahora te pregunto que tan compatibles son los Query's SQL de Access contra SQL Server Express ?????
Porque son muchas lineas de codigo que deberia modificar....
Igual Tambien agradecido contigo obethermy por querer ayudarme.
-
Salvo las fechas que en Acces van entre ## creo que con otra cosa no tendrías problemas, ojo siempre hablando de querys sql 'normales' ya si dentro del query usas funciones, case, datediff, etc ahí si se te va a complicar
-
Pues seguiré las recomendaciones agradeciendo la amabilidad de este foro, siempre se aprenden cosas nuevas en estas conversaciones. Seguiré programando sea por trabajo o por Hobby. Saludos desde Caracas.
-
hola a Todos
Yo te recomendaría que con tiempo te pases a un firebirdsql , y te olvidas de todos esos problemas, está pensado para trabajar en red