Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: raul338 en Octubre 20, 2011, 09:03:36 pm
-
Hooola!
Esta vez vengo a consultar :D
Hay alguna forma de optimizar una conexión en MySQL? Traigo una tabla de unos 1000 registros y Obtenerlos (desde un proc. almacenado) y rellenarlos en un ListView (comun, del OCX) me tarda aproximadamente unos 2 segundos cuando el MySQL Query Browser (del MySQL GUI Tools) tarda... 0.2 segundos en traer 5000 registros del mismo proc almacenado ::)
Uso esta cadena de conexion
Provider=MSDataShape.1;DRIVER={MySQL ODBC 5.1 Driver};Server={IP};Port={port};Database={DB};User={USER};Password={PWD};default command timeout=20; Connection Timeout=5;
Y para obtener los datos
Call rs.Open(consulta, cnn, adOpenForwardOnly, adLockReadOnly) ' Consulta = "CALL spVerClientes();"
Y para rellenar los datos, el tipico While EOF x'D
Call rs.MoveFirst
While Not rs.EOF
iItem = LV.ListItems.Add(, , rs.Fields(0)).Index
With LV.ListItems(iItem)
.SubItems(1) = rs.Fields(1)
.SubItems(2) = rs.Fields(2)
.SubItems(3) = rs.Fields(3)
'....
End With
Call rs.MoveNext
Wend
Asi que pido su consejo, para optimizarlo, ya que la aplicación debe funcionar a travéz de Internet. Y tarda baanda, sin embargo el MySQL Query Browser ni se mosquea cuando es de internet :-\
Algún consejo?
-
Yo con este método abro como 1000 Registros ni 1 segundo le lleva.
En un modulo.
Public cnADO As ADODB.Connection
Public rsADO As ADODB.Recordset
Public StrSQL As String
Public ComandoSQL As String
Public Sub ConectarADO()
Set cnADO = New ADODB.Connection
Set rsADO = New ADODB.Recordset
rsADO.CursorLocation = adUseClient
cnADO.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=control_hotel; User=root;Password=root;Option=3;"
cnADO.Open
End Sub
En un Form
Private Sub cmdConsultar_Click()
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'// Conectar la Base Datos con ADO
Call ConectarADO
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
ListView1.ListItems.Clear
StrSQL = "SELECT * FROM piezas WHERE estado='LIBRE' and reserva='NO' ORDER BY numero"
rsADO.Open StrSQL, cnADO, adOpenStatic, adLockOptimistic, adCmdText
Do Until rsADO.EOF
Set Lv = ListView1.ListItems.Add()
With rsADO
Lv.Text = .Fields("numero")
Lv.SubItems(1) = strReplaceVer(.Fields("nombre") & "")
Lv.SubItems(2) = Format(.Fields("precio"), "##,###0") & ""
Lv.SubItems(3) = .Fields("estado")
Lv.SubItems(4) = .Fields("reserva") & ""
Lv.SubItems(5) = .Fields("cedula") & ""
rsADO.MoveNext
End With
Loop
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
'// Cerrar la base de datos y liberar la memoria
Call CerrarADO
'+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+
End Sub
-
yo siempre trabajo con bucles Do Until...Loop para recorrer el recordset, el MSHflexgrid siempre es mas rapido que un listview, aun mas rapido que el ucListView, en los listview te carga 100 mil items en un pestañeo, pero con un recordset es mucho mas lento. probaste en vez de un procedimiento almacenado.. hacer la consulta limpia ?
saludos.
-
E N T E R, usando esa cadena de conexion, no me funciona :(
seba, tarda lo mismo usando la consulta directa (son 3 Select con uniones :P)
-
E N T E R, usando esa cadena de conexion, no me funciona :(
que raro porque la que te paso ENTER es la verdadera, yo la tengo igual en un proyecto y he visto que se usa asi.
pero espera... lo que tarda es el .Open ? o es el bucle de llenado del listview ?...proba cuanto demora la consulta sola (sin el llenado del listview) eso seria equivalente a lo que tarda el MySQL Query Browser mas o menos, paralo en esa linea y si la pasa rapido, es porque lo que tarda es el llenado.
saludos.
-
que raro porque la que te paso ENTER es la verdadera, yo la tengo igual en un proyecto y he visto que se usa asi.
Si, es raro, medio mundo lo esta usando asi y a mi me tira error de conexion.
pero espera... lo que tarda es el .Open ? o es el bucle de llenado del listview ?...proba cuanto demora la consulta sola (sin el llenado del listview) eso seria equivalente a lo que tarda el MySQL Query Browser mas o menos, paralo en esa linea y si la pasa rapido, es porque lo que tarda es el llenado.
Lo que tarda es el llenado, lo voy a probar