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 FunctionPara 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 SubNote que o array criterioPesquisa e valoresPesquisa precisam ter o mesmo tamanho, caso contrário irar gerar um erro.
                            Faça seu login para responder
                        
                    

