Ayuda con el uso de Dynami Cube (DCUBE3.OCX)

790 views
Skip to first unread message

herberth....@sismantec.com.sv

unread,
Dec 14, 2016, 9:08:04 AM12/14/16
to Comunidad de Visual Foxpro en Español
Ayuda!! Estoy utilizando Dynamic Cube 3.0 Dcube3.ocx y me genera bien el cubo de datos, pero necesito pasar el resultado del cubo a un cursor para convertirlo a gráfico estadístico. O si alguien conoce otra manera de convertir el cubo a gráficos.
Se los agradecería

Leonardo N.

unread,
Dec 14, 2016, 5:01:42 PM12/14/16
to Comunidad de Visual Foxpro en Español
Hola;

Te copio mi rutina que uso para efectuar lo que solicitas. Espero te ayude. Un poco de paciencia, este objeto es bueno, lo malo es que es como una piedra. Si quieres convertilo en algo precioso debes pulirlo ya que nada trae de manera nativa.

Saluidos


***************************************************
**Genera un cursor a partir de los datos del cubo**
***************************************************
Local lcNameCursor,i,c,d,lnNroFilas,lnNroColRow,lnNroColHeader ,lnNroColData,lcCreateCursor,lcNameColumn

**************************************
**Genera un cursor del cubo TEMPORAL**
**************************************

lcNameCursor = "Cur_Export"

**Cierra por si esta abierto, para volver a generar
If Used(lcNameCursor) Then
   Select (lcNameCursor)
   Use
Endif

**Clona el cubo en otro objeto para que luego sea procesado
ThisForm.AddObject("TmpCubo","Cubo",.t.)
loTmpCubo = Thisform.TmpCubo
loTmpCubo.lTmpCubo = .t.

**Pasa el contenido del cubo al temporal
lcFileCubo = This.Cb_GenfileTMP() &&Archivo de cubo temporal
This.Save(lcFileCubo,3)           &&Guarda el cubo en el archivo
loTmpCubo.Load(lcFileCubo)          &&Carga el archivo en el cubo temporal
Erase (lcFileCubo)                  &&Elimina el archivo

loTmpCubo.Top = loTmpCubo.Height * -1 - 50
loTmpCubo.Visible = .t.

**Normaliza el cubo en solo 2 dimensiones row - data
lnNroColHeaderData = loTmpCubo.ColFields.Count
For i = 0 To lnNroColHeaderData - 1
    loTmpCubo.ColFields(0).Orientation = 2  &&Siempre con el indice en CERO
Next
Pause(0.001)  &&Una pausa para refrescar el cubo antes de cargar los datos

**Despliega todas las columnas y retira los totales
For i = 0 To loTmpCubo.RowFields.Count - 1
    ***Quita los totales
    loTmpCubo.RowFields(i).GroupFooterType = 0
    loTmpCubo.RowFields(i).ShowDetail(1)   &&Despliega todas las filas
Next

**Visualiza todas las columnas DATAFIELS
For i = 0 To loTmpCubo.DataFields.Count - 1
    ***Quita los totales
    loTmpCubo.DataFields(i).Visible = .t.
Next

Pause(0.2)  &&Una pausa para refrescar el cubo antes de cargar los datos

**Genera cadena con la sintaxis para generar el cursor
lcCreateCursor = "CREATE CURSOR " + lcNameCursor + " ("
lnNroColRow    = loTmpCubo.RowFields.Count  - 1
lnNroColHeader = loTmpCubo.ColFields.Count  - 1

**Dimensiones Row
For i = 0 To lnNroColRow
    **Nombre de la columna
    lcNameColumn = loTmpCubo.Cb_Getfieldname(i,2)
   
    **Genera la cadena con la sintaxis para cerar el cubo
    lcCreateCursor = lcCreateCursor + lcNameColumn + " C (150), "
Next i

**Medidas
**Numero de columnas numericas
lnNroColData = loTmpCubo.DataFields.Count  - 1

For i = 0 To lnNroColData
    lcNameColumn = loTmpCubo.Cb_GetFieldName(i,1)
      
       **Si es un campo calculado, el nombre para el campo del cursor, es de su propiedad VARNAME, sin espacios
    If loTmpCubo.DataFields(lcNameColumn).Calculated Then
       ***lcNameColumn = Left(EvalCaracter(loTmpCubo.DataFields(lcNameColumn).VarName),10)
    Else
       lcCreateCursor = lcCreateCursor + lcNameColumn + " N (12,2), "
    Endif   
Next

**Ejecuta el comando para crear el cursor
lcCreateCursor = Alltrim(lcCreateCursor)
lcCreateCursor = Left(lcCreateCursor,Len(lcCreateCursor)-1) + ")"
**Messagebox(lcCreateCursor)
&lcCreateCursor

If nResult = -1 Then
   ThisForm.RemoveObject("TmpCubo")
   Return ""
Endif

lnSeconds  = Seconds()

**Carga el cursor los datos del cubo
lnNroFilas = loTmpCubo.RowCount  - 1   &&- UNO, porqque comienza en CERO
For i = 0 To lnNroFilas
   
    If Type("loTmpCubo.RowHeading(i,lnNroColRow+1).Name") <> "C" Then
       Loop   &&Fila no es validad, tiene menos columnas que la cantidad de columnas activa
    Endif
   
    Append Blank
   
    **Recorre y carga la fila de DIMENSIONES
    For c = 1 To lnNroColRow + 1
       
        If Type("loTmpCubo.RowHeading(i,c).Name") = "U" Then
          
           Messagebox("No se pudo leer la fila nº "+Str(i) + " columna: "+ Str(c)+Chr(13)+;
                        "Estado del objeto: "+ Type("loTmpCubo.RowHeading(i,c)"),+48,"Exportar a excel")
           ThisForm.RemoveObject("TmpCubo")
           Return ""

        Else
           lcValue = loTmpCubo.RowHeading(i,c).Name
        Endif   
       
        **Recupera nombre del campo del cursor
        lcFieldCursor = Field(c)
       
        Replace &lcFieldCursor With lcValue
          
    Next c
   
    **Recorre y carga la fila de MEDIDAS
    For d = 1 To lnNroColData + 1    && MAS 1 puesto que la variable tiene almacenado el total  MENOS 1
       
        lcNameDataField = loTmpCubo.Cb_GetFieldName(d-1,1)
       
        If loTmpCubo.DataFields(lcNameDataField).Calculated Then
           **Cmapos calculados no entran....
        Else
           lcValue       = loTmpCubo.DataValue(i,d-1)
       
           lcFieldCursor = Field((lnNroColRow+1) + (d) )
       
           Replace &lcFieldCursor With lcValue
        Endif   
          
    Next d
   
Next i

**Retira cubo temporal
ThisForm.RemoveObject("TmpCubo")

**Nombre del cursor a devolver
lcNameCursor = Iif(Used(lcNameCursor),lcNameCursor,"")

Select (lcNameCursor)
**Browse

*Messagebox("Segundos: " + Str(Seconds()-lnSeconds,7,3))
*cancel

Return lcNameCursor

herberth....@sismantec.com.sv

unread,
Dec 15, 2016, 3:09:06 AM12/15/16
to Comunidad de Visual Foxpro en Español
Leonardo, te comento que me sirvió de gran manera tu rutina para poder hacer mi generar mi cursor, te agradezco infinitamente tu apoyo.
Saludos.

Leonardo N.

unread,
Dec 15, 2016, 11:30:26 AM12/15/16
to Comunidad de Visual Foxpro en Español
De nada mi estimado, estamos para apoyarnos.

Saludos

Patricio Tobar

unread,
Jan 7, 2017, 5:52:42 PM1/7/17
to Comunidad de Visual Foxpro en Español
Favor si alguien me ayuda con el registro de dcube3.ocx en windows server 2012

al registrarlo con regsvr32 dcube3.ocx me la el error:


no se pudo cargar el módulo dcube3
asegúrese de que el archivo binario este almacenado en la ruta correcta....


incluso abriendo la ventana de dos como administrador antes de ejecutar el comando, me da el mismo error

Gracias

herberth....@sismantec.com.sv

unread,
Jan 8, 2017, 11:57:34 AM1/8/17
to Comunidad de Visual Foxpro en Español
Hola Patricio, tu únicamente copias el OCX y lo registras con  regsvr32?, porque lo instalo con el Demo (el me registra todos los OCX necesarios) y después lo reemplazo con el OCX completo. Me avisas y si te interesa te subo el instalador que uso

Emestica

unread,
Mar 6, 2019, 4:34:44 PM3/6/19
to Comunidad de Visual Foxpro en Español
Hola a todos tengo problema para instalar el dcube, seria tan amable de subir el instalador o enviarmelo por correo a infocxt@gmail,com, gracias

Bibián Iván

unread,
Apr 13, 2021, 8:25:51 AM4/13/21
to Comunidad de Visual Foxpro en Español
Lograste registrar el ocx?
Reply all
Reply to author
Forward
0 new messages