Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: wolf_kof en Febrero 20, 2011, 12:26:37 pm
-
Tengo un gran problema y pido de su sabiduria para poder solucionarlo, no se como le aran ustedes para abrir una tabla. Yo lo hago de la siguiente manera.
Esto va en un módulo en el Sub Main
Data.Open "Driver={MySQL ODBC 5.1 Driver};Server=" & servidor & ";Port=3306;Database=BestSolution;User=usuario; Password=pass;Option=3"
Para Abrir una Tabla de Amortizaciones por ejemplo utilizo esto en el Load Form del Formulario
cuotas.Open "select * from amortizacion order by cant desc", Data, adOpenDynamic, adLockOptimistic
El Problema consiste en lo siguiente: tengo la base de datos con 25,000 datos en MySQL y se vuelve Extremadamente Lenta!! no creo que sea la base de datos, tiene que ser alguna forma de como abrir la base de datos por que no puedo hacer que sea mas rapido...... Espero sus respuestas y de antemano muchas gracias.
-
No recuerdo donde pero leí que colocar el asterisco hace lenta una consulta ya que tiene que comprobar el tipo de dato de cada campo o algo por estilo y se recomedaba colocar todos los campo lo cual supuestamente mejora el rendimiento, ahora si tu tabla tiene 20 o 30 campos colocarlo 1 a 1 seria molesto pero quizas mejore el rendimiento puedes probar con un timer o algo asi y ver si efectivamente te mejora el rendimiento.
Cheka estos link's
http://www.baluart.net/articulo/top-10-errores-mysql-cometidos-por-desarrolladores-php (http://www.baluart.net/articulo/top-10-errores-mysql-cometidos-por-desarrolladores-php)
http://www.baluart.net/articulo/10-tips-para-optimizar-consultas-mysql (http://www.baluart.net/articulo/10-tips-para-optimizar-consultas-mysql)
-
Wolf, en el titulo de tu post mencionas a Access pero el comentario que haces es sobre MYSQL.
De MySQL no se nada.
Si fuera de Access te diría que urgente hagas a tu BD un "compactado y reparado", puede que la tabla este corrupta o por corromperse.
En las ultimas versiones de Access no encuentro esa opcion, asi que en todo caso usa el JetComp.exe
También es correcto no usar el * si es que tienes muchos campos. Mencionar las tablas es lo mas apropiada pq le quitar un poco de chamba al motor. Aunque 25,000 registros incluso para access es poco no deberia demorar incluso con el *, pero es conveniente cambiar la practica de construir el Select.
-
Buenas...!
Usar consultas con el * retarda la respuesta del gestor de BD. Por que? Porque debe comprobar cada campo, verificar el tipo de campo y posteriormente ver si tiene registros...! Por tal motivo fx700 acierta en que debes colocar campo por campo y solo aquellos necesarios que deseas mostrar...! Por otro lado, 25mil registros me parece poco, no debería tardar. Te comente que el listview lo que hace practicamente es repintar, es decir ese control no contiene un conector de BD donde podamos pasarle parametros, simplemente nosotros ejecutamos una consulta y mostramos o repintamos los registros allí...! Totalmente diferente a que si usamos un DataGrid o un MSHFlexGrid...! Sin embargo me quedo con mi ListView...!
Muestranos como estas realizando la carga de los registros en tu ListView...!
-
Ok Muchas gracias a todos, si pondre en practica
No recuerdo donde pero leí que colocar el asterisco hace lenta una consulta ya que tiene que comprobar el tipo de dato de cada campo o algo por estilo y se recomedaba colocar todos los campo lo cual supuestamente mejora el rendimiento, ahora si tu tabla tiene 20 o 30 campos colocarlo 1 a 1 seria molesto pero quizas mejore el rendimiento puedes probar con un timer o algo asi y ver si efectivamente te mejora el rendimiento.
Cheka estos link's
http://www.baluart.net/articulo/top-10-errores-mysql-cometidos-por-desarrolladores-php (http://www.baluart.net/articulo/top-10-errores-mysql-cometidos-por-desarrolladores-php)
http://www.baluart.net/articulo/10-tips-para-optimizar-consultas-mysql (http://www.baluart.net/articulo/10-tips-para-optimizar-consultas-mysql)
Yo utilizo un Sub para llenar el listview y despues lo llamo, osea filtro el recordset y despues lo llamo.
Sub rrellenarcuotas()
On Error Resume Next
cuotas.Requery -1
ListView1.ColumnHeaders.Clear
ListView1.ListItems.Clear
l4.Caption = "0.00"
l5.Caption = "0.00"
l6.Caption = "0.00"
l7.Caption = "0.00"
l8.Caption = "0.00"
ListView1.ColumnHeaders.Add 1, , "No.", 500
ListView1.ColumnHeaders(1).Resizable = False
ListView1.ColumnHeaders(1).Alignment = xtpListViewColumnCenter
ListView1.ColumnHeaders.Add 2, , "Fecha a Pagar", 1500
ListView1.ColumnHeaders(2).Resizable = False
ListView1.ColumnHeaders(2).Alignment = xtpListViewColumnCenter
ListView1.ColumnHeaders.Add 3, , "Cuota", 1100
ListView1.ColumnHeaders(3).Resizable = False
ListView1.ColumnHeaders(3).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 4, , "Interes", 1000
ListView1.ColumnHeaders(4).Resizable = False
ListView1.ColumnHeaders(4).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 5, , "Mora", 1100
ListView1.ColumnHeaders(5).Resizable = False
ListView1.ColumnHeaders(5).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 6, , "Pago", 1100
ListView1.ColumnHeaders(6).Resizable = False
ListView1.ColumnHeaders(6).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 7, , "Saldo", 1100
ListView1.ColumnHeaders(7).Resizable = False
ListView1.ColumnHeaders(7).Alignment = xtpListViewColumnRight
ListView1.ColumnHeaders.Add 8, , "Estado", 2100
ListView1.ColumnHeaders(8).Resizable = False
ListView1.ColumnHeaders.Add 9, , "Fecha de Pago", 1500
ListView1.ColumnHeaders(9).Resizable = False
ListView1.ColumnHeaders(9).Alignment = xtpListViewColumnCenter
ListView1.ColumnHeaders.Add 10, , "Atraso", 975
ListView1.ColumnHeaders(10).Resizable = False
ListView1.ColumnHeaders(10).Alignment = xtpListViewColumnCenter
Do Until cuotas.EOF
ListView1.ListItems.Add 1, , cuotas!cant
ListView1.ListItems(1).ListSubItems.Add 1, , cuotas!fecha
ListView1.ListItems(1).ListSubItems.Add 2, , Format(cuotas!cuota, "0.00")
ListView1.ListItems(1).ListSubItems.Add 3, , Format(cuotas!interes, "0.00")
l4.Caption = Val(l4.Caption) + Val(cuotas!interes)
ListView1.ListItems(1).ListSubItems.Add 4, , Format(cuotas!mora, "0.00")
l6.Caption = Val(l6.Caption) + Val(cuotas!mora)
ListView1.ListItems(1).ListSubItems.Add 5, , Format(cuotas!pago, "0.00")
ListView1.ListItems(1).ListSubItems.Add 6, , Format(cuotas!ssaldo, "0.00")
l8.Caption = Val(l8.Caption) + Format(cuotas!ssaldo, "0.00")
ListView1.ListItems(1).ListSubItems.Add 7, , cuotas!estado
ListView1.ListItems(1).ListSubItems.Add 8, , cuotas!fechap
ListView1.ListItems(1).ListSubItems.Add 9, , cuotas!atraso
If cuotas!estado = "PAGADO" Then
l7.Caption = Val(l7.Caption) + Val(cuotas!pago)
End If
l5.Caption = Val(l5.Caption) + (Val(cuotas!cuota) + Val(cuotas!interes) + Val(cuotas!mora))
l5.Caption = Format(l5.Caption, "0.00")
If (cuotas!atraso > 0) Then
ListView1.ListItems(1).ForeColor = vbRed
ListView1.ListItems(1).ListSubItems(1).ForeColor = vbRed
ListView1.ListItems(1).ListSubItems(2).ForeColor = vbRed
ListView1.ListItems(1).ListSubItems(3).ForeColor = vbRed
ListView1.ListItems(1).ListSubItems(4).ForeColor = vbRed
ListView1.ListItems(1).ListSubItems(5).ForeColor = vbRed
ListView1.ListItems(1).ListSubItems(6).ForeColor = vbRed
ListView1.ListItems(1).ListSubItems(7).ForeColor = vbRed
ListView1.ListItems(1).Bold = True
ListView1.ListItems(1).ListSubItems(1).Bold = True
ListView1.ListItems(1).ListSubItems(2).Bold = True
ListView1.ListItems(1).ListSubItems(3).Bold = True
ListView1.ListItems(1).ListSubItems(4).Bold = True
ListView1.ListItems(1).ListSubItems(5).Bold = True
ListView1.ListItems(1).ListSubItems(6).Bold = True
ListView1.ListItems(1).ListSubItems(7).Bold = True
End If
cuotas.MoveNext
Loop
l4.Caption = Format(l4.Caption, "0.00")
l5.Caption = Val(l2.Caption) - Val(l3.Caption)
l5.Caption = Format(l5.Caption, "0.00")
l6.Caption = Format(l6.Caption, "0.00")
l7.Caption = Format(l7.Caption, "0.00")
l8.Caption = Format(l8.Caption, "0.00")
End Sub
Ese es el codigo y este es el formulario....
(http://icgnxa.bay.livefilestore.com/y1pjQm5fUv5tMl9T70lrfAGagIcTdY61Y4Plphrc30n3Frt315fizciXMzxJlRjEwoxbaU5poGFRAwhxY2sJok1Byy1Iv56oXhl/Pic.JPG?psid=1)
-
Abner, estas aplicando muchos calculos para llenar el listview, eso hace que se retarde el vaciado de datos al objeto...!
-
Ya encontre el problema ;D ;D ;D ;D estaba metiendo todos los datos sin filtrar, y asi si es lento... puse un filtro y agrege un par de carateres y con eso basto para que sea rapido!!! la verdad es que el problema solo era en este formulario.
SSCCAANN grax por tu apoyo pero con el filtro los calculos los hace muy bien el sistema.