CRIAR CONSULTA DINÂMICA - VB6

WFANNY 18/09/2014 00:48:01
#441311
é 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
LENDAURBANA 18/09/2014 10:21:11
#441315
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

MARCELO.TREZE 18/09/2014 17:49:07
#441343
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?
FFCOUTO 18/09/2014 18:48:46
#441346
Veja esta função. Não testei, mas é só ajustar os detalhes.

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