Visual Basic para Aplicaciones - Problema en la carga de datos de SQL en Excel

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Problema en la carga de datos de SQL en Excel

Publicado por Carlos (3 intervenciones) el 26/05/2016 09:44:22
Hola, buenos días.

Ante todo gracias por entrar en el hilo y echar un vistazo a mi problema.

La cuestión es que intento cargar las bases de datos de SQL(vinculados en NAV) en Excel mediante el complemento de éste y no me carga la totalidad de los datos (tan solo 2134 de más de 4000 filas). Tengo Excel 2010, SQL Server 2014 y Visual Basic 7.0, os adjunto el código a ver si veis algo raro.

No me deja insertar el código en el cuadro de texto así que os lo dejo en un txt alojado en mi drive:

1
https://drive.google.com/open?id=0B7pF_cKVxPa4SWd0MzhoS3pOckU


Muchas gracias.
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
sin imagen de perfil

Problema en la carga de datos de SQL en Excel

Publicado por Carlos (3 intervenciones) el 26/05/2016 11:27:55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Sub cargardatosCARGASSECUNDARIAS()
    '***************
    Dim Filas As Single, MiRango As Object
    Set MiRango = Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(Filas, 0))
    '***************
    ConnectDBBona
 
    Dim fila As Integer
    Dim columna As String
    Dim rs As ADODB.Recordset
    'Dim RsPreu As ADODB.Recordset
 
    fila = 10
    columna = "A"
 
    Set rs = New ADODB.Recordset
    'Set RsPreu = New ADODB.Recordset
 
    rs.Open "SELECT     [Bando Ibérica, S_A_$Item].[Unit Cost], [Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code], [Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code], " & _
                     " [Bando Ibérica, S_A_$Item Ledger Entry].[Item No_], [Bando Ibérica, S_A_$Item].Description, [Bando Ibérica, S_A_$Item].[Tipo medida base],[Bando Ibérica, S_A_$Item].[Medida base], SUM([Bando Ibérica, S_A_$Item Ledger Entry].Quantity) AS STOCKCALCULADO " & _
                     " FROM [Bando Ibérica, S_A_$Item Ledger Entry] INNER JOIN " & _
                     " [Bando Ibérica, S_A_$Item] ON [Bando Ibérica, S_A_$Item Ledger Entry].[Item No_] = [Bando Ibérica, S_A_$Item].No_ " & _
                     " WHERE    ([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '700') OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '701') OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '800') OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '600') OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '840') OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '830') OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '780') OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '300') OR " & _
                      "(([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '880') AND ([Bando Ibérica, S_A_$Item].[Medida base] = '100')) OR " & _
                      "(([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '602') AND ([Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code] = 'BFGEN') ) OR " & _
                      "(([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '500') AND ([Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code] = 'PVGEN') ) OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '503') " & _
                      "GROUP BY  [Bando Ibérica, S_A_$Item].[Tipo medida base], [Bando Ibérica, S_A_$Item].[Medida base], [Bando Ibérica, S_A_$Item].[Unit Cost],[Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code], [Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code], " & _
                      "[Bando Ibérica, S_A_$Item Ledger Entry].[Item No_] , [Bando Ibérica, S_A_$Item].Description " & _
                      "ORDER BY [Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code], [Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code], " & _
                      "[Bando Ibérica, S_A_$Item Ledger Entry].[Item No_] ", oConexion, adOpenStatic, adLockReadOnly
 
    Do While Not rs.EOF
        'If rs("Global Dimension 2 Code") = "600" Then
        '    If Left(rs("Item No_"), 5) = "B2CBR" Or Left(rs("Item No_"), 5) = "ROUND" Then
        '       Range("I" & fila) = rs("Unit Cost")
 
                'RsPreu.Open "select campprecio from tablalaquesea where codproducto='" & rs("Item No_") & "' order by lafechaquesea ", oConexion, adOpenStatic, adLockReadOnly
                'RsPreu.MoveLast
                'Range("A" & fila) = RsPreu("camprecio")
 
        '        Range("J" & fila) = rs("Global Dimension 2 Code")
        '        Range("K" & fila) = rs("Item Category Code")
        '        Range("L" & fila) = rs("Item No_")
        '        Range("M" & fila) = rs("description")
        '        Range("N" & fila) = rs("STOCKCALCULADO")
        '        fila = fila + 1
        '    Else
        '    End If
        If rs("Global Dimension 2 Code") = "503" Then
            If Val(Right(rs("Item No_"), 2)) >= 10 Then
                If Range("L" & fila) = rs("Item No_") Then
                    ' si el producte és el mateix, no el carrega.
                     Range("N" & fila) = rs("STOCKCALCULADO")
                    fila = fila + 1
                Else
                    Range("a" & fila + 1, "z" & fila + 1).EntireRow.Insert (xlShiftDown)
                    Range("C" & fila) = "1" 'original, primera carga
                    Range("D" & fila) = "0" 'no grabada
                    Range("G" & fila) = rs("Tipo medida base")
                    Range("H" & fila) = rs("Medida base")
                    Range("I" & fila) = rs("Unit Cost")
                    'RsPreu.Open "select campprecio from tablalaquesea where codproducto='" & rs("Item No_") & "' order by lafechaquesea ", oConexion, adOpenStatic, adLockReadOnly
                    'RsPreu.MoveLast
                    'Range("A" & fila) = RsPreu("camprecio")
                    Range("J" & fila) = rs("Global Dimension 2 Code")
                    Range("K" & fila) = rs("Item Category Code")
                    Range("L" & fila) = rs("Item No_")
                    Range("M" & fila) = rs("description")
                    Range("N" & fila) = rs("STOCKCALCULADO")
                    'Range("O" & fila) = ""
                    fila = fila + 1
                    '  Filas = ActiveCell.Value2
                    '  MiRango.EntireRow.Insert (xlShiftDown)
                    '  ActiveCell.Offset(0, -1).Copy Destination:=MiRango.Offset(-Filas, -1)
                End If
            Else
            End If
        Else
            If Range("L" & fila) = rs("Item No_") Then 'poden faltar camps a comparar
                    ' si el producte és el mateix, no el carrega.
                    Range("N" & fila) = rs("STOCKCALCULADO")
                   fila = fila + 1
                Else
                    Range("a" & fila, "z" & fila).EntireRow.Insert (xlShiftDown)
                    Range("C" & fila) = "1" 'original, primera carga
                    Range("D" & fila) = "0" 'no grabada
                    Range("G" & fila) = rs("Tipo medida base")
                    Range("H" & fila) = rs("Medida base")
                    Range("I" & fila) = rs("Unit Cost")
                    Range("J" & fila) = rs("Global Dimension 2 Code")
                    Range("K" & fila) = rs("Item Category Code")
                    Range("L" & fila) = rs("Item No_")
                    Range("M" & fila) = rs("description")
                    Range("N" & fila) = rs("STOCKCALCULADO")
                    'Range("O" & fila) = ""
                    fila = fila + 1
            End If
 
        End If
 
 
 
         rs.MoveNext
    Loop
 
    rs.Close
    Set rs = Nothing
End Sub

Creo que el error viene antes del GROUP BY y presiento que es la 503, ¿me echais una mano?

Gracias!
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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 2 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Problema en la carga de datos de SQL en Excel

Publicado por GMG (12 intervenciones) el 26/05/2016 13:56:12
Hola Carlos,

No tengo mucha idea, pero creo que te faltaría añadir en el group by:

, [Bando Ibérica, S_A_$Item].[Tipo medida base], [Bando Ibérica, S_A_$Item].[Medida base]

Saludos
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

Problema en la carga de datos de SQL en Excel

Publicado por CARLOS (3 intervenciones) el 27/05/2016 16:29:35
Lo pude resolver, era problema de un AND que estaba mal puesto.

1
2
3
4
5
6
"(([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '602') AND ([Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code] = 'BFGEN') ) OR " & _
                      "([Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code] = '503') AND ([Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code] >= 10) ) OR " & _
                      "GROUP BY  [Bando Ibérica, S_A_$Item].[Tipo medida base],[Bando Ibérica, S_A_$Item].[Medida base], [Bando Ibérica, S_A_$Item].[Unit Cost],[Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code], " & _
                      "[Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code],[Bando Ibérica, S_A_$Item Ledger Entry].[Item No_] , [Bando Ibérica, S_A_$Item].Description " & _
                      "ORDER BY [Bando Ibérica, S_A_$Item Ledger Entry].[Global Dimension 2 Code], [Bando Ibérica, S_A_$Item Ledger Entry].[Item Category Code], " & _
                      "[Bando Ibérica, S_A_$Item Ledger Entry].[Item No_] ", oConexion, adOpenStatic, adLockReadOnly

Ahora deseo que el 503 sea mayor o igual a 10, y que en el 880 se muestren los que son iguales a 10. Tal y como está ahora no deja de darme error de Sintaxis cerca de ')' o error de Sintaxis cerca de 'GROUP' y ya no sé que hacer...


¿Podéis ayudarme? Gracias!
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