Estimado Antonio:
Muchas gracias por responder.
Antes de analizar el resto del c贸digo de VB, por favor analicemos estas l铆neas en donde se ejecuta la consulta tanto en FW como VB6; y es aqu铆 en donde hago la medici贸n de tiempos:
Con Fw:
聽 Llama la funci贸n que ejecuta la Consulta y genera el Recordset:
聽 oRsAprvt:=''
聽 oRsAprvt:=fCreaRecSet(oCnxSrv, cCmdSql, adUseClient, adLockOptimistic, adOpenStatic)
Esta es la funci贸n que ejecuta la consulta y crea el Recordset:
FUNCTION fCreaRecSet(xoCnxSrv, xcCmdSql, xnCursor, xnLockType, xnCurType)
聽 聽 聽LOCAL oRsLocal, oError 聽
聽 聽 聽TRY
聽 聽 聽 聽oRsLocal := TOleAuto():New( "ADODB.RecordSet" ) 聽 聽 聽
聽 聽 聽CATCH oError
聽 聽 聽 聽MsgStop('No se puede establecer conexion con Recordset ...!')
聽 聽 聽 聽ShowErrorCnx( oError ) 聽 聽 聽
聽 聽 聽 聽RETURN NIL
聽 聽 聽END 聽
聽 聽 聽xnCursor 聽:=IF(xnCursor=NIL,adUseServer,xnCursor) 聽// adUseClient
聽 聽 聽xnLockType:=IF(xnLockType=NIL,adLockOptimistic,xnLockType)
聽 聽 聽xnCurType :=IF(xnCurType=NIL,adOpenKeyset,xnCurType)
聽 聽 聽oRsLocal:CursorLocation:=xnCursor
聽 聽 聽oRsLocal:LockType 聽 聽 聽:=xnLockType
聽 聽 聽oRsLocal:CursorType 聽 聽:=xnCurType 聽 聽
聽 聽 聽oRsLocal:Source 聽 聽 聽 聽:=xcCmdSql
聽 聽 聽oRsLocal:ActiveConnection:=xoCnxSrv 聽
聽 聽 聽TRY
聽 聽 聽 聽oRsLocal:Open() 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 =====> Aqu铆 es donde se ejecuta la consulta .... tiempo: 03:00 Minutos.
聽 聽 聽CATCH oError
聽 聽 聽 聽MsgStop('No se puede establecer conexion con Recordset ...!')
聽 聽 聽 聽ShowErrorCnx( oError ) 聽 聽 聽
聽 聽 聽 聽RETURN NIL
聽 聽 聽END
聽 聽 聽IF !oRsLocal:EOF()
聽 聽 聽 聽oRsLocal:MoveFirst()
聽 聽 聽ENDIF聽 聽
聽 聽 聽RETURN oRsLocal
Este el c贸digo VB que ejecuta la Consulta y crea el Recordset:
聽 聽 Dim rs As New ADODB.Recordset
聽 聽 聽rs.CursorLocation = adUseClient
聽 聽 聽rs.Open SQL, cCnx, adOpenStatic 聽 聽 聽 聽 聽====> Aqu铆 es donde se Ejecuta la Consulta ... tiempo: 00:10 sgdos.
聽 聽 聽Set rs.ActiveConnection = Nothing
Este es el c贸digo de VB que hace lo mismo con FW. Ambos hacen exactamente la misma consulta y la muestran en una grilla.
Option Explicit
'Database fields names from SQL query
Const DB_CSUP = "c_super"
Const DB_CVEN = "c_perso"
Const DB_TVEN = "d_perso"
Const DB_CRUT = "ruta"
Const DB_TDESRUT = "d_ruta"
Const DB_CCLI = "idcliente"
Const DB_TNOMREP = "nomcli"
' DB_FECENTRE 聽:= "fecentre"
Const DB_CTIP = "iddocument"
Const DB_NFAC = "nroped"
Const DB_CARTAG = "c_artag"
Const DB_DARTAG = "d_artag"
Const DB_CSUBAG1 = "c_subag1"
Const DB_DSUBAG1 = "d_subag1"
Const DB_CCODART = "codart"
Const DB_TDESART = "descrip"
Const DB_QCANPED = "nqbultos"
Const DB_QUMVTA = "umedstd"
Const DB_QIMPORTE = "qimporte"
'Cube fields names, arbitrary
'Definir Descripcion Campos de la Tabla Contenedora del Cubo.
聽 聽 聽
Const CUBEFLD_CSUP = "Cod Supervisor"
Const CUBEFLD_CVEN = "Cod Prevendedor"
Const CUBEFLD_TVEN = "Nombre Prevendedor"
Const CUBEFLD_CRUT = "Cod Ruta"
Const CUBEFLD_TDESRUT = "Descripcion Ruta"
Const CUBEFLD_CCLI = "Cod Cliente"
Const CUBEFLD_TNOMREP = "Nombre del Cliente"
' CUBEFLD_FECENTRE 聽:= "Fecha Entrega"
Const CUBEFLD_CTIP = "Tipo Documento"
Const CUBEFLD_NFAC = "Numero Pedido"
Const CUBEFLD_CARTAG = "Agrup Articulo"
Const CUBEFLD_DARTAG = "Descripcion Agrupa Articulo"
Const CUBEFLD_CSUBAG1 = "Sub Agrup Articulo"
Const CUBEFLD_DSUBAG1 = "Descripcion Sub Agrup Articulo"
Const CUBEFLD_CCODART = "Cod Articulo"
Const CUBEFLD_TDESART = "Descripcion Articulo"
Const CUBEFLD_QCANPED = "Cantidad Bultos"
Const CUBEFLD_QUMVTA = "Cantida Umed"
Const CUBEFLD_QIMPORTE = "Importe Soles"
'Const CUBEFLD_C_SUPER = "Supervisor"
'Const CUBEFLD_C_PERSO = "Cod Vend"
'Const CUBEFLD_D_PERSO = "Nombre Vendedor"
'Const CUBEFLD_FECENTRE = "Fecha Entrega"
'Const CUBEFLD_CODART = "Cod Articulo"
'Const CUBEFLD_DESCRIP = "Nombre Articulo"
'Const CUBEFLD_QCANPED = DB_QCANPED
'Const CUBEFLD_CANT = DB_CANT
'Const CUBEFLD_CATEGORY = DB_CATEGORY
'Const CUBEFLD_PRODUCT = DB_PRODUCT
'Const CUBEFLD_DATE = "Date"
'Const CUBEFLD_YEAR = "Year"
'Const CUBEFLD_QUARTER = "Quarter"
'Const CUBEFLD_MONTH = "Month"
'Const CUBEFLD_QUANTITY = DB_QUANTITY
'Const CUBEFLD_AMOUNT = DB_AMOUNT
Const xCmdSql1 = "SELECT PUB.perscom.c_super AS c_super, PUB.carga.c_perso AS c_perso, PUB.perscom.d_perso AS d_perso, " & vbCrLf & _
聽 聽 聽 聽 聽"PUB.carga.ruta AS ruta, PUB.rutasv.d_ruta AS d_ruta, PUB.carga.idcliente AS idcliente, " & vbCrLf & _
聽 聽 聽 聽 聽"PUB.clientes.nomcli AS nomcli, "
Const xCmdSql2 = "PUB.carga.iddocumento AS iddocument, PUB.carga.fecentre AS fecentre, PUB.carga.nroped AS nroped, " & vbCrLf & _
聽 聽 聽 聽 聽"PUB.artagru.c_artag AS c_artag, PUB.foragru.d_artag AS d_artag, PUB.artagru.c_subag1 AS c_subag1, " & vbCrLf & _
聽 聽 聽 聽 聽"PUB.subagru1.d_subag1 AS d_subag1, PUB.lincarga.codart AS codart, PUB.articulos.descrip AS descrip, " & vbCrLf & _
聽 聽 聽 聽 聽"(PUB.lincarga.cant * PUB.articulos.resto + PUB.lincarga.resto) / PUB.articulos.resto AS nqbultos, "
Const xCmdSql3 = "(PUB.lincarga.cant * PUB.articulos.resto + PUB.lincarga.resto) / PUB.articulos.resto * PUB.articulos.valor AS umedstd, " & vbCrLf & _
聽 聽 聽 聽 聽"PUB.lincarga.cant * PUB.lincarga.precio + PUB.lincarga.resto * (PUB.lincarga.precio / PUB.articulos.resto) + PUB.lincarga.iva1 + PUB.lincarga.per212 AS qimporte "
Const xCmdSql4 = "FROM 聽PUB.artagru, PUB.foragru, PUB.subagru1, PUB.lincarga, PUB.carga, PUB.articulos, PUB.perscom, PUB.rutasv, PUB.clientes " & vbCrLf & _
聽 聽 聽 聽 聽"WHERE PUB.artagru.c_artag = PUB.foragru.c_artag AND PUB.artagru.c_artag = PUB.subagru1.c_artag AND PUB.artagru.c_subag1 = PUB.subagru1.c_subag1 AND " & vbCrLf & _
聽 聽 聽 聽 聽"PUB.artagru.codart = PUB.articulos.codart AND PUB.lincarga.nroped = PUB.carga.nroped AND PUB.lincarga.codart = PUB.articulos.codart AND "
Const xCmdSql5 = "PUB.carga.idSucur = PUB.perscom.idSucur AND PUB.carga.c_perso = PUB.perscom.c_perso AND PUB.carga.idSucur = PUB.rutasv.idSucur AND " & vbCrLf & _
聽 聽 聽 聽 聽"PUB.carga.ruta = PUB.rutasv.ruta AND PUB.carga.idSucur = PUB.clientes.idSucur AND PUB.carga.idcliente = PUB.clientes.idcliente AND " & vbCrLf & _
聽 聽 聽 聽 聽"(PUB.artagru.c_artag = 21) AND (PUB.carga.idSucur = 1)"
Const SQL = xCmdSql1 + xCmdSql2 + xCmdSql3 + xCmdSql4 + xCmdSql5
Dim cCnx As ADODB.Connection
Private CONS As String
Private Sub ContourCubeX1_BeforeMoveDimension(ByVal ViewDim As CCubeX4.IViewDim, ByVal NewAxis As CCubeX4.TxDimAxis, ByVal NewPos As Long, ByVal Cancel As CCubeX4.IBoolean)
聽 Select Case ViewDim.Name
聽 聽 Case CUBEFLD_CCODART
聽 聽 聽 If NewAxis <> xda_outside Then
聽 聽 聽 聽 聽 聽 If NewAxis <> ContourCubeX1.Cube.Dims(CUBEFLD_CCODART).Axis Then
聽 聽 聽 聽 聽 聽 聽 Cancel.Value = True
聽 聽 聽 聽 聽 聽 Else
聽 聽 聽 聽 聽 聽 聽 If NewPos <= ContourCubeX1.Cube.Dims(CUBEFLD_TDESART).Pos Then Cancel.Value = True
聽 聽 聽 聽 聽 聽 End If
聽 聽 聽 End If
聽 聽 Case CUBEFLD_CVEN
聽 聽 聽 If NewAxis <> xda_outside Then
聽 聽 聽 聽 聽If NewAxis <> ContourCubeX1.Cube.Dims(CUBEFLD_CVEN).Axis Then
聽 聽 聽 聽 聽 聽Cancel.Value = True
聽 聽 聽 聽 聽Else
聽 聽 聽 聽 聽 聽If NewPos >= ContourCubeX1.Cube.Dims(CUBEFLD_TVEN).Pos Then Cancel.Value = True
聽 聽 聽 聽 聽End If
聽 聽 聽 End If
聽 End Select
End Sub
Private Sub Form_Load()
聽 聽On Error GoTo handler
聽 聽' Instancio la conexi贸n y me conecto con la base de datos
聽 聽' ----------------------------------------------------------
聽 聽Set cCnx = New ADODB.Connection
聽 聽cCnx = "DSN=Chessgps;HOST=chess;PORT=2500;DB=distrib;UID=SYSPROGRESS;PWD=ch1573"
聽 聽With cCnx
聽 聽 聽' Cursor en Cliente para poder usar un DataGrid
聽 聽 聽.CursorLocation = adUseClient
聽 聽 聽' Abro la conexi贸n con la base de datos usando un DSN
聽 聽 聽.Open cCnx
聽 聽End With
聽 聽ContourCubeX1.BorderStyle = xcbsSingle
聽 聽ContourCubeX1.NULLValueString = ""
聽 聽ContourCubeX1.InactiveDimAreaBkColor = 2
聽 聽 聽
聽 聽
聽 聽With ContourCubeX1.Cube
聽 聽 聽'Create Dimensions and Facts in cube
聽 聽 聽' Dimensions initially appeared on verical axis
聽 聽 聽
聽 聽 聽.Dims.Add CUBEFLD_CSUP, DB_CSUP, 5, 2
聽 聽 聽.Dims.Add CUBEFLD_CVEN, DB_CVEN, 5, 2
聽 聽 聽.Dims.Add CUBEFLD_TVEN, DB_TVEN, 1, 2
聽 聽 聽.Dims.Add CUBEFLD_CRUT, DB_CRUT, 5, 2
聽 聽 聽.Dims.Add CUBEFLD_TDESRUT, DB_TDESRUT, 1, 2
聽 聽 聽.Dims.Add CUBEFLD_CCLI, DB_CCLI, 5, 2
聽 聽 聽.Dims.Add CUBEFLD_TNOMREP, DB_TNOMREP, 1, 2
聽 聽 聽':Dims:Add(CUBEFLD_FECENTRE, DB_FECENTRE, 9, 2)
聽 聽 聽.Dims.Add CUBEFLD_CTIP, DB_CTIP, 1, 2
聽 聽 聽.Dims.Add CUBEFLD_NFAC, DB_NFAC, 5, 2
聽 聽 聽
聽 聽 聽' Mostrar Fijos Verticales al presentar el Cubo.
聽 聽 聽.Dims.Add CUBEFLD_CARTAG, DB_CARTAG, 5, 0
聽 聽 聽.Dims.Add CUBEFLD_DARTAG, DB_DARTAG, 1, 0
聽 聽 聽.Dims.Add CUBEFLD_CSUBAG1, DB_CSUBAG1, 5, 0
聽 聽 聽.Dims.Add CUBEFLD_DSUBAG1, DB_DSUBAG1, 1, 0
聽 聽 聽.Dims.Add CUBEFLD_CCODART, DB_CCODART, 5, 0
聽 聽 聽.Dims.Add CUBEFLD_TDESART, DB_TDESART, 1, 0
聽 聽 聽
聽 聽 聽'Cube facts
聽 聽 聽.BaseFacts.Add DB_QCANPED, DB_QCANPED
聽 聽 聽.BaseFacts.Add DB_QUMVTA, DB_QUMVTA
聽 聽 聽.BaseFacts.Add DB_QIMPORTE, DB_QIMPORTE
聽 聽 聽 聽
聽 聽 聽'Add cube facts to the grid
聽 聽 聽.Facts.Add(CUBEFLD_QCANPED, DB_QCANPED, 1).Caption = "Bultos"
聽 聽 聽.Facts.Add(CUBEFLD_QUMVTA, DB_QUMVTA, 1).Caption = " Cantidad Venta UM "
聽 聽 聽.Facts.Add(CUBEFLD_QIMPORTE, DB_QIMPORTE, 1).Caption = "Importe Bruto"
聽 聽 聽'Populate recordset
聽 聽 聽Dim rs As New ADODB.Recordset
聽 聽 聽rs.CursorLocation = adUseClient
聽 聽 聽rs.Open SQL, cCnx, adOpenStatic
聽 聽 聽Set rs.ActiveConnection = Nothing
聽 聽 聽'Activate grid
聽 聽 聽'.Open rs
聽 聽End With
聽 聽ContourCubeX1.Facts(CUBEFLD_QCANPED).Visible = True
聽 聽ContourCubeX1.Facts(CUBEFLD_QCANPED).Appearance.Format = "###,###,##0.00"
聽 聽ContourCubeX1.Facts(CUBEFLD_QUMVTA).Visible = True
聽 聽ContourCubeX1.Facts(CUBEFLD_QUMVTA).Appearance.Format = "###,###,##0.0000"
聽 聽ContourCubeX1.Facts(CUBEFLD_QIMPORTE).Visible = True
聽 聽ContourCubeX1.Facts(CUBEFLD_QIMPORTE).Appearance.Format = "###,###,##0.00"
聽 聽'ContourCubeX1.FlatStyle = xfs_Flat
聽 聽ContourCubeX1.Cube.Open rs
聽
聽 聽
聽 聽infoBox.Text = info
聽Exit Sub
聽 聽
handler:
聽 MsgBox ("Error: " & Err.Description)
聽 End
End Sub
Private Sub Form_Resize()
聽 聽 ContourCubeX1.Move 0, Image1.Height, Me.ScaleWidth, Me.ScaleHeight - Image1.Height - infoBox.Height
聽 聽 With Image2
聽 聽 聽 聽 .Left = Image1.Width
聽 聽 聽 聽 .Width = IIf((Me.Width - Image1.Width) > 0, Me.Width - Image1.Width, 0)
聽 聽 End With
聽 聽 With infoBox
聽 聽 聽 聽 .Top = Image1.Height + ContourCubeX1.Height
聽 聽 聽 聽 .Width = ContourCubeX1.Width
聽 聽 聽 聽 .Left = 0
聽 聽 End With
End Sub
Saludos.
Atte.
Lucho Montero.
Lima - Per煤.
------------------------------------------------------------------------
FW 12.04 + xHarbour 1.2.3 + Borland 5.8.2