Visual Basic - problema con velocidad

Life is soft - evento anual de software empresarial
 
Vista:

problema con velocidad

Publicado por Alex (9 intervenciones) el 14/09/2005 19:50:16
hola, tengo q rellenar un combobox con 2000 registros y me tarda un rato largo, los saco de una tabla que esta en un servidor sql server en la misma red, mi pregunta es:

1. como puedo hacer q vaya mas deprisa la carga del formulario, pq tarda mucho ya que tiene q rellenar el dichoso combo?

2. es mejor abrir y cerrar recordset o lo abro al inicio de la aplicacion?

a continuacion os pongo el codigo con le q relleno el combobox y con el codigo de la conexion.

Function RELLENAR_COMBO(cb As ComboBox, RST As Recordset)
If RST.RecordCount > 0 Then
RST.MoveFirst
Do While Not RST.EOF
cb.AddItem Trim(RST!NOMBRE)
cb.ItemData(cb.NewIndex) = RST!codigo
RST.MoveNext
Loop
RST.MoveFirst
End If
End Function

CON.CursorLocation = adUseClient
CON.Open "DSN=aplicacion;"
R_CLIENTES.ActiveConnection = CON
R_CLIENTES.Open "SELECT * FROM CLIENTES ORDER BY NOMBRE", , adOpenDynamic, adLockOptimistic


gracias de atemano, y a ver si alguien me ayuda pq no se como arreglar el problema
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

RE:problema con velocidad

Publicado por Nicolas Gori (2 intervenciones) el 26/10/2005 17:32:08
Tu problema de rendimiento se da basicamente por que en la conexion que haces con SQL Server estas usando un cursor del lado del cliente, la solucion es que modifiques la conexion y utilizar cursor de lado del servidor. El problema es que la propiedad Recordcount cuando se usa cursor del lado del servidor, siempre da -1, por lo tanto no sirve. Vos utilizas recordcount para saber si existen registros y asi empezar a transferir a los combos, ahora en vez de recordcount debes preguntar por BOF y EOF. Por lo tanto el codigo modificado seria el siguiente, y el que debes usar:

Function RELLENAR_COMBO(cb As ComboBox, RST As Recordset)
If Not (RST.BOF And RST.EOF) THEN
RST.MoveFirst
Do While Not RST.EOF
cb.AddItem Trim(RST!NOMBRE)
cb.ItemData(cb.NewIndex) = RST!codigo
RST.MoveNext
Loop
End IF
RST.MoveFirst
End Function

CON.CursorLocation = adUseServer
CON.Open "DSN=aplicacion;"
R_CLIENTES.ActiveConnection = CON
R_CLIENTES.Open "SELECT * FROM CLIENTES ORDER BY NOMBRE", , adOpenDynamic, adLockOptimistic

Espero que te sirva, adios.
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