¿Cómo puedo traer estos valores de arrays y mostrarlos en una gráfica?

Hola Experto, haber si me puedo explicar y no confundirte, he realizado una prueba para realizar gráficos Dinámicos con controles SHAPE, para que los Gráficos Muestren el avance le agregue unos Arrays con determinados Valores(Valores Fijos). Hasta aquí todo muy bien, Pero en mi Proyecto, necesito traerme los valores desde una consulta que le hago a una tabla de mi BD,. O sea que en ves de Agregar Valores Fijos. Lo que no se es como traerme esos valores para mostrarlos en la gráfica, te anexo el código donde tengo los Arrays con valores Fijos y También te Muestro la Consulta donde quiero Realmente sacar esos Valores.
Private Sub CmdGraficos_Click()
Dim i As Integer
Dim TLeft As Long
Dim TWidth As Long
arr(0) = 9.216666
arr(1) = 1.833333
arr(2) = 16.666666
arr(3) = 7.6
arr(4) = 2.166666
arr(5) = 1.75
arr(6) = 1.833333
col(0) = vbBlue
col(1) = vbGreen
col(2) = vbRed
col(3) = vbYellow
col(4) = vbCyan
col(5) = vbMagenta
col(6) = vbWhite
Set Grafico = Controls.Add("VB.Shape", "Grafico" & CStr(i))
Grafico.Height = 1000
Grafico.Shape = 0
Grafico.Visible = True
Grafico.Top = 1400
Grafico.BorderColor = col(i)
If i = 0 Then
Grafico.Left = 1200
Else
TLeft = CLng(Me.Controls("Grafico" & CStr(i - 1)).Left)
TWidth = CLng(Me.Controls("Grafico" & CStr(i - 1)).Width)
Grafico.Left = (CLng(TLeft) + CLng(TWidth)) - 10
End If
Grafico.BackStyle = 1
Grafico.BackColor = col(i)
Grafico.Width = arr(i) * 180
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
arr(0) = 2.4
arr(1) = 9.4
arr(2) = 1.4
arr(3) = 2.1
col(0) = vbBlue
col(1) = vbGreen
col(2) = vbRed
col(3) = vbYellow
For i = 0 To 3
Set GraficoA = Controls.Add("VB.Shape", "GraficoA" & CStr(i))
GraficoA.Height = 1000
GraficoA.Shape = 0
GraficoA.Visible = True
GraficoA.Top = 3900
GraficoA.BorderColor = col(i)
If i = 0 Then
GraficoA.Left = 1200
Else
TLeft = CLng(Me.Controls("GraficoA" & CStr(i - 1)).Left)
TWidth = CLng(Me.Controls("GraficoA" & CStr(i - 1)).Width)
GraficoA.Left = (CLng(TLeft) + CLng(TWidth)) - 10
End If
GraficoA.BackStyle = 1
GraficoA.BackColor = col(i)
GraficoA.Width = arr(i) * 180
Next
End Sub
Y ESTA ES MI CONSULTA DONDE EL RESULTADO....
SELECT D.IDLINEAS, L.LINEAS, D.IDMAQUINAS, M.MAQUINAS, SUM(CAST(SUBSTRING(D.TIEMPOPERDIDO, 1, 2) AS DECIMAL) +
CAST(SUBSTRING(D.TIEMPOPERDIDO, 4, 2) AS DECIMAL) / 60) AS HORASPERDIDAS FROM DEFECTOS_CALIDAD D
INNER JOIN MAQUINAS M ON M.IDMAQUINAS = D.IDMAQUINAS
INNER JOIN LINEAS L ON L.IDLINEAS = D.IDLINEAS
GROUP BY D.IDLINEAS, L.LINEAS, D.IDMAQUINAS, M.MAQUINAS
Y ME ARROJA ESTO, que es Donde realmente Quiero sacar los valores de las GRaficas:
IDLineas Lineas IDMaquina Maquina HORASPERDIDAS
1 LINEA 1 1 CM602 9.216666
1 LINEA 1 2 CM401 1.833333
2 LINEA 2 9 S27-2 16.666666
2 LINEA 2 10 F5-HM 7.600000
4 LINEA 4 21 MV 2.166666
4 LINEA 4 22 MPA 1.750000
5 LINEA 6 28 CM402-2 1.833333
Espero y me Haya explicado, TE agradecería Mucho si Me ayudaras, Uso visual 6.0 y SQL Server.
Respuesta
1
Según lo que puedo entender, quieres que los valores que se asignan a tu array salgan de una consulta de base de datos, con mis pocos conocimientos de VB te puedo sugerir lo siguiente, debes que declarar una variable ado donde le cargues el contenido de tu consulta con el qry en cuestión, de preferencia ese qry debes convertirlo en un Store Procedure por temas de performance, una vez que cargues tu dataset debes recorrerlo hasta EOF y asignarlo a cada posición de tu variable.
Lo hice de esta forma y me resulto:
strSQL = ("SELECT D.IDLINEAS, L.LINEAS, D.IDMAQUINAS, M.MAQUINAS, SUM(CAST(SUBSTRING(D.TIEMPOPERDIDO, 1, 2) AS DECIMAL) + " & _
"cast(substring(d.tiempoperdido, 4, 2) as decimal) / 60) as horasperdidas from defectos_calidad d " & _
"INNER JOIN MAQUINAS M ON M.IDMAQUINAS = D.IDMAQUINAS " & _
"INNER JOIN LINEAS L ON L.IDLINEAS = D.IDLINEAS " & _
"WHERE L.IDLINEAS = 1 " & _
"GROUP BY D.IDLINEAS, L.LINEAS, D.IDMAQUINAS, M.MAQUINAS ")
Set rs = conn.Execute(strSQL)
Dim A As Integer
Do While rs.EOF = False
ReDim Preserve arr(A)
arr(A) = rs!HorasPerdidas
A = A + 1
rs.MoveNext
Loop

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas