Stack Overflow em Português Asked by Thiago on November 30, 2021
Olá, Primeiramente peço desculpas ao ADM se houver qualquer erro na formatação da pergunta, sou novato aqui rsrs.
Estou com uma duvida na pesquisa QUERY usando MAX e CAST
Objetivo: Retornar o maior valor na coluna ORDEM forçando-o ser um numero inteiro, onde na coluna LINPRD seja "A"
Resultado Esperado: 5
Erro ocorrendo na linha de código = RS.Open sql, DB
Segue minha rotina
Sub Pesquisa_SQL_CAST ()
Dim DB As New ADODB.Connection 'Variável de Conexão ou Caminho para o banco de dados
Dim RS As New ADODB.Recordset 'Variável para abrir conexão
Dim sql As String
Dim Final_loop As Integer
With DB
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Data Source") = ThisWorkbook.FullName
.Properties("Extended Properties") = "Excel 12.0 Xml; HDR=YES; IMEX=1"
.Mode = adModeRead
.CursorLocation = adUseClient
.Open
End With
sql = "SELECT MAX(ORDEM) FROM [Planilha3$A1:B6] WHERE [LINPRD] = 'A' AND CAST(ORDEM AS INTEGER) = '%'"
RS.Open sql, DB
Final_loop = RS(0)
End Sub
A tabela na Planilha3$A1:B6 é simplificadamente assim;
Tentei também usar o Cast assim;
sql = "SELECT MAX(CAST(ORDEM AS INTEGER)) FROM [Planilha3$A1:B6] WHERE [LINPRD] = 'A' AND CAST(ORDEM AS INTEGER) = '%'"
porém também resulta em erro.
Apenas tenho exito na pesquisa, não utilizando o Cast, desta maneira;
sql = "SELECT MAX(ORDEM) FROM [Planilha3$A1:B6] WHERE [LINPRD] = 'A'"
Porém gostaria de usar o Cast, para forçar a pesquisa como número INTEIRO, visto que, há a possibilidade de alguma celula na coluna ORDEM estar digitada como TEXTO.
Aproveitando para mais 2 perguntas rsrs.;
1º – Como referenciar uma tabela formatada nomeada ou apenas uma região nomeada no FROM
2º – O CAST e o DISTINCT podem mesmo ser usados na pesquisa SQL pelo VBA, ou devo usar algum correspondente respectivamente.
Obs.: Está habilitado "MICROSOFT ACTIVEX DATA OBJECTS 6.1 LIBRARY" nas "Referências – VBAProject"
Desde já muito obrigado, a todos que puderem ajudar.
————//————————//————————//————————//————————//————
Pessoal para aqueles que tiverem o mesmo problema consegui ter uma solução satisfatória;
Lógica = Faço uma ordenação decrescente convertendo a coluna ORDEM em inteiro atrevés do comando CINT(ORDEM), e trago também em Inteiro
Segue;
sql = "SELECT CInt(ORDEM) FROM [Planilha3$A1:B6] WHERE [LINPRD] = 'A' ORDER BY CInt(ORDEM) DESC"
A rotina ficou desta maneira;
Sub Pesquisa_SQL_CAST ()
Dim DB As New ADODB.Connection 'Variável de Conexão ou Caminho para o banco de dados
Dim RS As New ADODB.Recordset 'Variável para abrir conexão
Dim sql As String
Dim Final_loop As Integer
With DB
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Data Source") = ThisWorkbook.FullName
.Properties("Extended Properties") = "Excel 12.0 Xml; HDR=YES; IMEX=1"
.Mode = adModeRead
.CursorLocation = adUseClient
.Open
End With
sql = "SELECT CInt(ORDEM) FROM [Planilha3$A1:B6] WHERE [LINPRD] = 'A' ORDER BY CInt(ORDEM) DESC"
RS.Open sql, DB
Final_loop = RS(0)
End Sub
Não consegui utilizar o CAST tive que adaptar usando o CINT, (que pode ser CDBL ou qualquer outro)
Se alguém tiver uma solução melhor ou mais prática, favor compartilhar.
Ainda não consegui referenciar uma tabela formatada nomeada ou apenas uma região nomeada no FROM, quem puder ajudar seria excelente.
Desde já muito obrigado.
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP