Visual Basic - Existe algo mas rápido

Life is soft - evento anual de software empresarial
 
Vista:

Existe algo mas rápido

Publicado por moises (13 intervenciones) el 03/03/2006 15:24:06
Hola buen día a todos, quisiera me dierán su valiosa opinión, si le ven algo incorrecto a lo que estoy haciendo, pues no encuentro la manero de hacer mas veloz esta consulta, o si por la carga de las tablas, no se puede hacer mucho, gracias por sus comentarios, les presento el código

Option Explicit
Dim adoConnect As ADODB.Connection
Dim g_adConn As ADODB.Connection
Dim m_Movtos As ADODB.Recordset
Dim entry
Dim strTemp, sValores As String
Dim nMovtos As Integer
Dim strConnect As String

Private Sub Form_Load()

Screen.MousePointer = vbHourglass
Set adoConnect = New ADODB.Connection
strConnect = "Provider=sqloledb;" & _
"Network Library=DBMSSOCN;" & _
"Data Source=SERVIDOR,1433;" & _
"Initial Catalog= RESTAURANT;" & _
"User ID=SA;" & _
"Password="
adoConnect.Open strConnect
Set g_adConn = adoConnect
Screen.MousePointer = vbDefault

Set m_Movtos = New ADODB.Recordset
strTemp = "SELECT mesero, cuenta, comanda, mesa, fecha, producto FROM Movtos_Det"
m_Movtos.Open strTemp, g_adConn
m_Movtos.MoveFirst

'Muy Veloz, pero la presentación Pésima filtrando por ej mesero='benito'
'devuelve 25mil registros de 285mil en 9 segs., muy atractivo, si no hay filtro
´pues a tomarse una cervecita, cafecito o lo que gustes pues tarda 3 min.
'y por otro lado la presenteción de los datos nada atractiva
List1.AddItem ""
Do While Not m_Movtos.EOF
With m_Movtos
sValores = .Fields!Cuenta & " " & .Fields!comanda & " " & .Fields!mesa & _
" " & .Fields!mesero & " " & .Fields!producto
List1.AddItem sValores
End With
m_Movtos.MoveNext
Loop

'por este camino, si filtras con el mismo ejemplo anterior, tarda 1 min, si no hay
'filtro igual a esperar mas de 3min.
'De no ser tan lento, este camino es el ideal, pues puedes manipular (Creo) con
'un estilo mas elegante los registros.
MSHFlexGrid1.Rows = 1
MSHFlexGrid1.Cols = 6
MSHFlexGrid1.TextMatrix(0, 0) = "Cuenta"
MSHFlexGrid1.TextMatrix(0, 1) = "Comanda"
MSHFlexGrid1.TextMatrix(0, 2) = "Mesa"
MSHFlexGrid1.TextMatrix(0, 3) = "Fecha"
MSHFlexGrid1.TextMatrix(0, 4) = "Mesero"
MSHFlexGrid1.TextMatrix(0, 5) = "Producto"
MSHFlexGrid1.ColWidth(0) = 2000
MSHFlexGrid1.ColWidth(1) = 2000
MSHFlexGrid1.ColWidth(2) = 2000
MSHFlexGrid1.ColWidth(3) = 2000
MSHFlexGrid1.ColWidth(4) = 2000
MSHFlexGrid1.ColWidth(5) = 2000
n = 1

While Not m_Movtos.EOF
With m_Movtos
entry = .Fields!cuenta & Chr(9)
entry = entry & .Fields!comanda & Chr(9)
entry = entry & .Fields!mesa & Chr(9)
entry = entry & .Fields!fecha & Chr(9)
entry = entry & .Fields!mesero & Chr(9)
entry = entry & .Fields!producto & Chr(9)
MSHFlexGrid1.AddItem entry
End With
m_Movtos.MoveNext

Wend

End Sub

*Algo está mal?, o no hay otra cosa mejor que hacer, te agradezco tus comantarios.

Moises Fabro
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:Existe algo mas rápido

Publicado por Luis Prieto (166 intervenciones) el 03/03/2006 17:25:30
Hola, Moises!!

'tienes que trabajar con procedimientos almacenados y objetos Command
esto es lo mas rapido que hay y otras cosas mas, pero por ahora prueba este codigo mejorado

Option Explicit
Dim adoConnect As ADODB.Connection
Dim Rs_m_Movtos As ADODB.Recordset
'esto es el objeto command
Dim Cmd_m_Movtos As ADODB.Command
'esto es un parametro del objeto command usalo si tu procedimiento almacenado tiene parametros
Dim Prm1_m_Movtos as ADODB.Parameter
Dim entry
Dim strTemp, sValores As String
Dim nMovtos As Integer
Dim strConnect As String

Private Sub Form_Load()

Screen.MousePointer = vbHourglass
Set adoConnect = New ADODB.Connection
strConnect = "Provider=sqloledb;" & _
"Network Library=DBMSSOCN;" & _
"Data Source=SERVIDOR,1433;" & _
"Initial Catalog= RESTAURANT;" & _
"User ID=SA;" & _
"Password="
adoConnect.CursorLocation=adUseClient
adoConnect.Open strConnect
Screen.MousePointer = vbDefault
Set Rs_m_Movtos = New ADODB.Recordset
Set Cmd_m_Movtos = New ADODB.Command
Cmd_m_Movtos.ActiveConnection=adoConnect
Cmd_m_Movtos.CommnadType=adCmdStoredProc
Cmd_m_Movtos.CommandText="Procedimiento_Almacenado"
'esto es si tu procedimiento tiene parametros
Set Prm1_m_Movtos= New ADODB.Parameter
Prm1_m_Movtos=Cmd_m_Movtos.CreateParameter("Prm1",Tipo,Tipo E/S,tamaño,valor)
Cmd_m_Movtos.Parameters.Append Prm1_m_Movtos
set Rs_m_Movtos=Cmd_m_Movtos.Exexute

'si quieres haces esto, hace que automaticamente llene el datagrid1 en vez de recorrer todo el recordset
Set datagrid1.datasouce=Rs_m_Movtos

' esta consulta tiene que estar en un procedimiento almacenado en la BD strTemp = "SELECT mesero, cuenta, comanda, mesa, fecha, producto FROM Movtos_Det"

'o si quieres haces este mismo codigo
List1.AddItem ""
Do While Not m_Movtos.EOF
With m_Movtos
sValores = .Fields!Cuenta & " " & .Fields!comanda & " " & .Fields!mesa & _
" " & .Fields!mesero & " " & .Fields!producto
List1.AddItem sValores
End With
m_Movtos.MoveNext
Loop

'por este camino, si filtras con el mismo ejemplo anterior, tarda 1 min, si no hay
'filtro igual a esperar mas de 3min.
'De no ser tan lento, este camino es el ideal, pues puedes manipular (Creo) con
'un estilo mas elegante los registros.
MSHFlexGrid1.Rows = 1
MSHFlexGrid1.Cols = 6
MSHFlexGrid1.TextMatrix(0, 0) = "Cuenta"
MSHFlexGrid1.TextMatrix(0, 1) = "Comanda"
MSHFlexGrid1.TextMatrix(0, 2) = "Mesa"
MSHFlexGrid1.TextMatrix(0, 3) = "Fecha"
MSHFlexGrid1.TextMatrix(0, 4) = "Mesero"
MSHFlexGrid1.TextMatrix(0, 5) = "Producto"
MSHFlexGrid1.ColWidth(0) = 2000
MSHFlexGrid1.ColWidth(1) = 2000
MSHFlexGrid1.ColWidth(2) = 2000
MSHFlexGrid1.ColWidth(3) = 2000
MSHFlexGrid1.ColWidth(4) = 2000
MSHFlexGrid1.ColWidth(5) = 2000
n = 1

While Not m_Movtos.EOF
With m_Movtos
entry = .Fields!cuenta & Chr(9)
entry = entry & .Fields!comanda & Chr(9)
entry = entry & .Fields!mesa & Chr(9)
entry = entry & .Fields!fecha & Chr(9)
entry = entry & .Fields!mesero & Chr(9)
entry = entry & .Fields!producto & Chr(9)
MSHFlexGrid1.AddItem entry
End With
m_Movtos.MoveNext

Wend

End Sub

Eso es todo, cualquier consulta escribeme a mi correo.
Espero te sirva

Saludos.

Luis Prieto (Perú)
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