CRIAR CONSULTA DINÂMICA - VB6
é possÃvel construir uma função para construir uma select de forma dinâmica
Exemplo:
--select base com todas as colunas
SELECT CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5 FROM TABELA
Gostaria de passar via parametro as colunas a serem consultadas
Exemplo: Campo2, Campo5
Função deve retorno
SELECT CAMPO2, CAMPO5 FROM TABELA
Passar via parametro Campo1, Campo2
SELECT CAMPO1, CAMPO2 FROM TABELA
Obrigado
Exemplo:
--select base com todas as colunas
SELECT CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5 FROM TABELA
Gostaria de passar via parametro as colunas a serem consultadas
Exemplo: Campo2, Campo5
Função deve retorno
SELECT CAMPO2, CAMPO5 FROM TABELA
Passar via parametro Campo1, Campo2
SELECT CAMPO1, CAMPO2 FROM TABELA
Obrigado
Não tenho certeza absoluta porque nunca tentei pode tentar criar uma classe que recebe os dados e monta a query mais ou menos como abaixo
SELECT @CAMPO1, @CAMPO2, @CAMPO3, @CAMPO4, @CAMPO5 FROM @TABELA
Você pode fazer tudo como parametros ..
Segue um exemplo de uso de parametros em query no vb .
http://www.vbforums.com/showthread.php?726339-VB6-SQL-Parameters-Example
SELECT @CAMPO1, @CAMPO2, @CAMPO3, @CAMPO4, @CAMPO5 FROM @TABELA
Você pode fazer tudo como parametros ..
Segue um exemplo de uso de parametros em query no vb .
http://www.vbforums.com/showthread.php?726339-VB6-SQL-Parameters-Example
colega você que criar uma função em vb6 ou no proprio banco, se for no banco qual é o banco de dados que está utilizando?
Veja esta função. Não testei, mas é só ajustar os detalhes.
Para chamar a função.
Note que o array criterioPesquisa e valoresPesquisa precisam ter o mesmo tamanho, caso contrário irar gerar um erro.
Public Function MontaSql(ByVal nomeTabela As String, ByRef colunas() As String, ByRef criteriosPesquisa() As String, ByRef valoresPesquisa() As Variant, ByVal ordenarCampo As String) As String
On Local Error GoTo errHandle
Dim sql As String
Dim lb As Integer, ub As Integer
Dim i As Integer
Dim filtros() As String
sql = [Ô]SELECT [Ô]
sql = sql & Join(colunas, [Ô], [Ô])
sql = sql & [Ô] FROM [Ô]
sql = sql & nomeTabela
[ô]Determina o indice menor e maior da matriz de critérios
lb = Lbound(criteriosPesquisa)
ub = UBound(criteriosPesquisa)
ReDim filtros(lb to ub)
If Ubound(criteriosPesquisa) > -1 Then
For i = lb To ub
filtros(i) = [Ô](@[Ô] & criteriosPesquisa(i) & [Ô] = [Ô] & valoresPesquisa(i) & [Ô])[Ô]
Next
sql = sql & [Ô] WHERE [Ô]
sql = sql & Join(filtros, [Ô] AND [Ô])
End If
If Trim(ordernarCampo) <> [Ô][Ô] Then
sql = sql & [Ô]ORDER BY [Ô]
sql = sql & ordernarCampo
End If
sql = sql & [Ô];[Ô]
MontaSql = sql
Exit Function
errHandle:
MontaSql = [Ô][Ô]
End Function
Para chamar a função.
Private Sub Command1_Click()
Dim col(1 to 5) As String
Dim flt(1 to 2) As String
Dim vlr(1 to 2) As Variant
Dim sql As String
col(1) = [Ô]id[Ô]
col(2) = [Ô]nome[Ô]
col(3) = [Ô]data[Ô]
col(4) = [Ô]ativo[Ô]
col(5) = [Ô]credito[Ô]
flt(1) = [Ô]nome[Ô]
flt(2) = [Ô]ativo[Ô]
vlr(1) = [Ô]joao da silva[Ô]
vlr(2) = 1
sql = MontaSql([Ô]minha_tabela[Ô], col, flt, vlr, [Ô]nome[Ô])
MsgBox sql
End Sub
Note que o array criterioPesquisa e valoresPesquisa precisam ter o mesmo tamanho, caso contrário irar gerar um erro.
Faça seu login para responder