Visual Basic - Visual Basic DAO3.6 Recordset cuelga aplicacion

Life is soft - evento anual de software empresarial
   
Vista:

Visual Basic DAO3.6 Recordset cuelga aplicacion

Publicado por Gio (6 intervenciones) el 26/06/2014 19:21:23
Buenos. Acudo a su sabiduria
Tengo una aplicación en VB6.0 que usa DAO3.6 para conectarse a una base de datos Accsess2007
Al abrir un formulario, abro un Recordset de la siguiente forma:
Set rsnro = dbbase.OpenRecordset("select n from venta order by n", dbOpenDynaset, , 3)
El problema es que gran parte de las veces abre el formulario y el recordset en 1 segundo (normal). Pero de vez en cuando se cuelga la aplicación y el recordset demor en abrir 20 segundos o más.
La aplicación corre en red y este problema pasa tanto en el equipo donde se encuentra la base como en el resto de los equipos.
Agradezco cualquier información
Sds
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
Imágen de perfil de Oscar

Visual Basic DAO3.6 Recordset cuelga aplicacion

Publicado por Oscar (63 intervenciones) el 26/06/2014 21:44:22
Puedes poner una función que ejecute la instrucción y con control de errores verificar que se haya realizado, de esta forma puedes poner un número de intentos de ejecución para que no se pare si falla en el primer intento. Yo lo uso bastante con conexiones a BBDD SQL que usan muchos usuarios con consultas grandes por lo que a veces se supera el tiempo de espera. Pero solo es útil si lo mas frecuente es que vaya bien si te falla la mayoría de las veces tendrías que buscar otra solución.

El caso de que a veces vaya muy rápido y otras más lento podría ser por la red pero indicas que también pasa en el equipo en el que esta el fichero de access, quizás lentitudes del equipo o del antivirus etc

Si quieres algún ejemplo de lo que uso te lo podría buscar, un saludo
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

Visual Basic DAO3.6 Recordset cuelga aplicacion

Publicado por Gio (6 intervenciones) el 26/06/2014 22:12:20
Muchas gracias Oscar por la pronta respuesta.
Acepto tu ofrecimiento. Si no es molestia me gustaría que me muestres esos ejemplos que comentas, así lo pruebo.
Aprovecho para consultar. Hay alguna ventaja si en lugar de DAO 3.6 (en las Proyecto/Referencias) uso Microsoft Office 12 access database engine?
Gracias otra vez
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
Imágen de perfil de Oscar

Visual Basic DAO3.6 Recordset cuelga aplicacion

Publicado por Oscar (63 intervenciones) el 27/06/2014 17:33:39
En cuanto a usar DAO 3.6 o La referencia a Access dependerá del uso que le quieras dar yo personalmente para conectar a ficheros de access uso ADO 2.8, más por costumbre y porque me sirve para todo el uso que le doy que por otro motivo. Seguramente halla aquí gente con mayor conocimiento de ellos que te pueda dar una respuesta mucho más técnica.

En cuanto a como realizar la conexión que te comento te adjunto un código que puedes implementar fácilmente que uso además para una conexión a un fichero de access.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Option Explict
 
Dim comm As New ADODB.Connection
Const MaxIntentos = 3
 
Private Sub Form_Load()
    comm.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & App.Path & "\BBDD.accdb;Persist Security Info=False;"
    comm.Open
End Sub
 
Private Sub BtConsultar_Click()
    Dim tabla As New ADODB.Recordset
    Dim sql as string
    Dim intentos as Integer
    Dim continuar as boolean
 
    intentos = 0
    continuar = False
    sql = "Select n from venta order by n"
 
    Do While intentos < MaxIntentos and Not(continuar)
	continuar = Realizar_Consulta(tabla, sql)
	intentos = intentos + 1
    Loop
 
    If continuar then
	' Continua aquí con la ejecución de tu código
	. . .
	. . .
 
    End If
 
End Sub
 
 
Private Function Realizar_Consulta(rsnro As Object, instruccion As String) As Boolean
    On Error GoTo Flag
    rsnro.Open instruccion, comm
    Realizar_Consulta = True
    Exit Function
 
Flag:
 Realizar_Consulta = False
End Function


Está echa con ADO 2.8 (Objeto ADODB) pero el ejemplo es válido para el uso que tu haces, tan sólo tienes que adaptarlo un poco.

La idea es que la ejecución de las consultas se haga a través de la función Realizar_Consulta que recibe como parámetros el objeto recordset y la instrucción a ejecutar, si se realiza correctamente te devuelve True y continuas con tu código si da un error este se pone a cero (y no se te para la aplicación) pero devuelve un False por lo que se vuelve a ejecutar la consulta hasta que se realiza correctamente o pasan un cierto numero de intentos (yo he puesto 3 por defecto).

En el caso que se superen los intentos máximos el programa no da error pero no se ejecutará el resto de código, en el If puedes generar una ventana de aviso para indicarle al usuario que no se puede realizar la operación, que lo intente de nuevo mas tarde, que reinicie el equipo o la aplicación o lo que consideres conveniente.

Parte del código lo acabo de escribir a mano en el editor de texto, así que puede que te salte alguna errata al depurar coméntame con lo que sea
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
Imágen de perfil de Oscar

Visual Basic DAO3.6 Recordset cuelga aplicacion

Publicado por Oscar (63 intervenciones) el 27/06/2014 17:56:52
Una cosa que te he escrito pero no he puesto en el código es que para poner el error a 0 en Flag: debes añadir la línea Err = 0

Tampoco es critico ya que el programa no se para con ese error y en caso de otro error el nuevo error sobre escribe al primero pero es lo más correcto, también puedes utilizar la variable Err para generar una log con el error y así poder analizarlo a posteriori para ver si localizas el origen del problema.

Un saludo
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

Visual Basic DAO3.6 Recordset cuelga aplicacion

Publicado por Gio (6 intervenciones) el 27/06/2014 21:41:24
Un gracias enorme Oscar
Valoro mucho tu ayuda
Pondré en práctica la funcion.
En cuanto a lo de seguir usando DAO o si tengo alguna ventaja al cambiar, lo colgaré como una consulta aparte para, como tu dices, alguien que lo haya usado me de una respuesta
Vuelvo a agradecerte
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