Hola, desarrollé un sistema con VB6, ADO y cuando lo instalo en una red con servidor y terminales W98, el tiempo de respuesta es muy alto, no sucede lo mismo en una red XP. Probé en conectarme directamente (mediante el driver que maneja bases dbf) y mediante ODBC pero no hubo mejoría en ningún caso. Por ejemplo se demora mucho cuando muestra los elementos de un listview, cuando lo ordena, también cuando se emiten reportes mediante Crystal Report 8.5.
Sabes como podría mejorar la velocidad, ya que la red no la puedo modificar. Muchas gracias! Cecilia.
Podrías enviarme el código de la parte cuando te conectas al listview ¿Usas recordset? Si usas recordset por favor mandame la parte del open hay que ver los tipos de cursos y lockeo que usas. ¿Esta enlazada? Gracias Leandro Emperador20
Al no responderme espero que hayas podido resolver tu problema Podrías terminar la pregunta o sino simplemente me haces una pregunta que diga que no hice nada y la descarto
Perdón por no contestarte antes pero estuve con otras cosas y esto lo postergue. Te envío todas las funciones que uso. Si te llegan mal por favor dame alguna dirección de e-mail para enviártelo adjunto. Muchas gracias! ' Carga el listview Public Sub AddListView(listview As listview, _ isCliente As Boolean, _ Text As String, _ isCod As Boolean, _ istodos As Boolean) 'isCliente: Es cliente o vendedor? 'Text: texto a buscar 'isCod: hay que ordenar por código o por descripción? 'istodos: Lista todos los registros sin filtrar? Dim sT As String Dim sItem As String Dim NewItem As listitem Dim Conexion As String Dim CX As ADODB.Connection Dim RS As ADODB.Recordset Dim lentxt As Integer Screen.MousePointer = vbHourglass 'Crear la conexión y ponerle la cadena de conexión en su propiedad ConnectionString Set CX = New ADODB.Connection Conexion = "Driver={Driver do Microsoft dBase (*.dbf)}; " & _ "DBQ=" & gPathDB & " " 'CX.ConnectionString = "DSN=informes" 'Abrir el objeto Connection CX.Open Conexion 'CX.Open 'Crear el Recordset Set RS = New ADODB.Recordset ' Borra todos los elementos del listview listview.ListItems.Clear sT = "" ' Listar cliente If isCliente Then sT = " SELECT * FROM GVA14 " ' Por Código de cliente If istodos Then If isCod Then sT = sT & " ORDER BY GVA14.Cod_client " Else sT = sT & " ORDER BY GVA14.Razon_soci Asc" End If ElseIf isCod Then sT = sT & " WHERE GVA14.Cod_client>='" & Text & "'" sT = sT & " ORDER BY GVA14.Cod_client " ' Por descripción Else lentxt = Len(Text) sT = sT & " WHERE LEFT(GVA14.Razon_soci," & lentxt & ") = '" & Text & "'" sT = sT & " ORDER BY GVA14.Razon_soci Asc" End If ' Listar vendedor Else sT = " SELECT * FROM GVA23 " ' Por Código de vendedor If istodos Then If isCod Then sT = sT & " ORDER BY GVA23.Cod_vended " Else sT = sT & " ORDER BY GVA23.Nombre_ven Asc" End If ElseIf isCod Then sT = sT & " WHERE GVA23.Cod_vended>='" & Text & "'" sT = sT & " ORDER BY GVA23.Cod_vended " ' Por descripción Else lentxt = Len(Text) sT = sT & " WHERE LEFT(GVA23.Nombre_ven," & lentxt & ") = '" & Text & "'" sT = sT & " ORDER BY GVA23.Nombre_ven Asc" End If End If Call CargarRecordset_ADO(RS, CX, sT) Do While Not RS.EOF If isCliente Then Set NewItem = listview.ListItems.Add(, , RS("Cod_client")) NewItem.SubItems(1) = RS("Razon_soci") Else Set NewItem = listview.ListItems.Add(, , RS("Cod_vended")) NewItem.SubItems(1) = RS("Nombre_ven") End If If listview.ListItems.Count = 1 Then listview.ListItems.Item(1).Selected = True End If RS.MoveNext Loop RS.Close 'cerrar recordset CX.Close 'cerrar conexión Screen.MousePointer = vbDefault End Sub ' Si los elementos coinciden con la búsqueda los copia a una nueva ' lista y muestra esta nueva ocultando la anterior (mantiene 2 listview ' una con todos los elementos y otra con los elementos que coinciden con ' los filtros de la búsqueda.) Public Sub CopyListView(ListView2 As listview, _ listitem As listitem) 'listview2: listview destino 'listitem: item para agregar de la listview origen 'isCliente: Cliente o vendedor? 'isCod: hay que ordenar por código o por descripción? Dim NewItem As listitem Screen.MousePointer = vbHourglass 'ListView1.listitems(i).ListSubItems.Item (1) Set NewItem = ListView2.ListItems.Add(, , listitem.Text) NewItem.SubItems(1) = listitem.SubItems(1) If ListView2.ListItems.Count = 1 Then ListView2.ListItems(1).EnsureVisible ListView2.ListItems.Item(1).Selected = True End If Screen.MousePointer = vbDefault End Sub Public Sub CargarRecordset_ADO(rec As ADODB.Recordset, _ con As ADODB.Connection, _ sT As String) Err.Clear On Error GoTo Err_Rs rec.Open sT, con, adOpenDynamic Exit Sub Err_Rs: If Err.Number <> 0 Then MsgBox Err.Number & " - " & Err.Description Set rec = Nothing End If End Sub
Rsbaja. Open con1, cn, adOpenDynamic, adLockOptimistic, 1 Hola lo de arriba es como yo hago el recordset proba agregándole adlockoptimistic o cualquiera de las otras opciones que da el visual (son el tipo del lockeo del recordset, ¿ayuda muchísimo a la hora de traer datos? Rec. Open sT, con, adOpenDynamic esta es tu recordset Proba y decime si hay diferencia sino hay diferencia decime cuando notas que se pone lento al traer los datos.