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

Life is soft - evento anual de software empresarial
   
Vista:

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
información
Otras secciones de LWP con contenido de Visual Basic para Aplicaciones
- Código fuente de Visual Basic para Aplicaciones
- Cursos de Visual Basic para Aplicaciones
- Temas de Visual Basic para Aplicaciones
información
Códigos de Visual Basic para Aplicaciones
- Monto Escrito
- Calculador de TSP
- Cronograma de actividades

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

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