TransWikia.com

EXCEL - VBA - SQL - Duvida na query usando CAST

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;

inserir a descrição da imagem aqui

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.

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP