Notifications
Clear all

Erro em pesquisa SQL no Excel para Access

3 Posts
2 Usuários
0 Reactions
1,585 Visualizações
edilsonfl
(@edilsonfl)
Posts: 227
Estimable Member
Topic starter
 

Olá,

Estou tentando integrar o excel com o Access,
já consegui extrair algumas informações das tabelas do meu BD do Access através do excel (usando VBA e ADO), montei pesquisas no Access e copiei o código SQL para a macro do Excel, para consultas simples funcionaram perfeitamente, mas para o caso abaixo apresnta o seguinte erro:

Erro em tempo de execução '-2147217900 (80040e14)':

Erro de sintaxe (operador faltando) na expressão de consulta

'subação.CÓDIGOFROM orgao INNER JOIN (subação INNER JOIN
(Poder INNER JOIN Tabela1 ON Poder.CÓDIGO =
Tabela1.Poder_CÓDIGO) ON subação.CÓDIGO =
Tabela1.subação_CÓDIGO) ON orgao.CÓDIGO =
Tabela1.orgao_CÓDIGOWHERE (((Poder.CÓDIGO)=2) AND
((subação.CÓDIGO)=164'.

Alguma dica?

A macro é a seguinte:

Private Sub cmdConexaoBD_Click_3()
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer


'define a conexão com o banco de dados Northwind.mdb
Set cn = New ADODB.Connection
 cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:Usersedilson.lopes.SADDesktopteste_access_exceldados PMRD-Teste3.accdb"
cn.Open
'define um novo objeto recordset
Set rs = New ADODB.Recordset
'define a instrução sql
'sql = "SELECT Orders.CustomerID, Sum([Order Details].UnitPrice) AS ValorTotal, Sum([Order Details].Quantity) AS QuantidadeTotal"
'sql = sql & " FROM (Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) "
'sql = sql & " GROUP BY Orders.CustomerID"
'sql = sql & " ORDER BY Orders.CustomerID"

sql = "SELECT Poder.CÓDIGO, Poder.PODER, Tabela1.[2014_Sum_Of_LIQUIDADO], subação.CÓDIGO"
sql = sql & "FROM orgao INNER JOIN (subação INNER JOIN (Poder INNER JOIN Tabela1 ON Poder.CÓDIGO = Tabela1.Poder_CÓDIGO) ON subação.CÓDIGO = Tabela1.subação_CÓDIGO) ON orgao.CÓDIGO = Tabela1.orgao_CÓDIGO"
sql = sql & "WHERE (((Poder.CÓDIGO)=2) AND ((subação.CÓDIGO)=1641)) OR (((subação.CÓDIGO)=1642));"

'gera o recordset para o sql sobre a conexao definida
 
 
 rs.Open sql, cn
'define o cabeçalho das células no excel

Range("A1").Value = "Poder_cod"
Range("B1").Value = "Poder"
Range("C1").Value = "Soma Liquidado 2014"
Range("D1").Value = "SUBAÇÃO_COD"


i = 2
If Not rs.EOF Then
     Do While Not rs.EOF
        Range("A" & i).Value = rs(0)
        Range("B" & i).Value = rs(1)
        Range("C" & i).Value = rs(2)
        Range("B" & i).Value = rs(3)
        
        rs.MoveNext
        i = i + 1
    Loop
End If

cn.Close

End Sub

Quando ajuda for útil dê um clique na mãozinha, isso atribui ponto ao colaborador.

 
Postado : 21/01/2015 4:28 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sem ter a estrutura do banco de dados, fica um tanto quanto difícil, mas na rotina que está montando nota-se que falta um espaçamento para a linha do comando From e também na linha do comando Where, provavelmente e isso
Na montagem do sql acrescente um espaço antes de From :
sql = sql & " FROM orgao INNER JOIN (subação INNER JOIN (Poder INNER JOIN Tabela1 ON Poder.CÓDIGO = Tabela1.Poder_CÓDIGO) ON subação.CÓDIGO = Tabela1.subação_CÓDIGO) ON orgao.CÓDIGO = Tabela1.orgao_CÓDIGO"
e um espaço antes do Where:
sql = sql & " WHERE (((Poder.CÓDIGO)=2) AND ((subação.CÓDIGO)=1641)) OR (((subação.CÓDIGO)=1642));"

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/01/2015 5:45 am
edilsonfl
(@edilsonfl)
Posts: 227
Estimable Member
Topic starter
 

Valeu Reinaldo,
deu certo, realmente estava faltando os espaços.

Quando ajuda for útil dê um clique na mãozinha, isso atribui ponto ao colaborador.

 
Postado : 22/01/2015 7:02 am