Olá Rodrigo,
Vc quer criar um formulário de pesquisa "genérico", certo?
Sim, é possivel!
Desenvolvi um sistema em Access com back-end em MySQL, que ficava hospedado no provedor do cliente (Hostgator), utilizando conexão ADO.
Eu criei da seguinte forma:
1 - Criei uma tabela no banco de dados onde constam os dados de tabelas e campos para pesquisa, conforme abaixo:
Esses dados são utilizados para montar o combobos "Campo" da pesquisa e também as colunas da listbox, inclusive, exsite uma columa chamada "largura", que define justamente a largura da coluna da listbox
No cadastro de Produtos, ao clicar na "Lupa" para pesquisar, o sistema abria a tela de pesquisa, onde o combobox e a listbox eram montados baseados na tela em questão:
No Cadastro de Clientes, é o mesmo procedimento:
E no Form_Load() do formulário de pesquisa, chamava a seguinte rotina:
- Código:
Public Sub MONTA_LISTA()
On Error GoTo trata_erro
Call Conect
x = 0
strQUERY = "SELECT "
strSQL = ""
strSQL = "SELECT nome, tabela, campo, tipo, largura, alinhamento, exibir"
strSQL = strSQL & " FROM tb_sys_pesq"
strSQL = strSQL & " WHERE tabela = '" & vgPESQ & "'"
strSQL = strSQL & " AND exibir = 'S'"
rspesq.Open strSQL, cnn, adOpenKeyset, adLockReadOnly
If Not rspesq.EOF Then
Do While Not rspesq.EOF
If rspesq.AbsolutePosition = 1 Then
cols = rspesq("nome").Value
larg = rspesq("largura").Value
Else
cols = cols & ";" & rspesq("nome").Value
larg = larg & ";" & rspesq("largura").Value
End If
cboCampo.AddItem "" & rspesq(0) & ";" & rspesq(1) & ";" & rspesq(2) & ";" & rspesq(3) & ""
strQUERY = strQUERY & rspesq(2)
If x < rspesq.RecordCount - 1 Then
strQUERY = strQUERY & ","
End If
x = x + 1
rspesq.MoveNext
Loop
End If
FechaRST rspesq
With lstpesq
.FontName = "MS Sans Serif"
.FontSize = 8
.ForeColor = vbBlack
.ColumnCount = x
.ColumnHeads = True
.ColumnWidths = "" & larg & ""
.RowSource = "" & cols & ""
.RowSourceType = "Value List"
.Requery
End With
Exit Sub
trata_erro:
FechaRST rspesq
MsgErro (Err.Number)
Exit Sub
End Sub
OBS.: O código e as imagens acima é apenas para te ajudar a elaborar uma rotina para tua necessidade.
Existem algumas funções e variáveis pertinentes ao projeto que criei, tais como:
- FechaRST = Função genérica para fechar e limpar recordset da memória
- vgPESQ = variável global que recebia o valor do formulário aberto, e que servia como parametro para pesquisa no banco de dados.
Ex.: No botão pesquisar da tela de Cadastro de Clientes, eu atribuia essa variável com valor 'tb_clientes'.
No cadastro de Produtos, eu atribuia como 'tb_produtos'
- Conect = função que fazia a conexão com o banco de dados
O listbox da pesquisa é desacoplado à tabela e montado em tempo de execução.
Espero não tenha ficado muito complicado.
Espero ter ajudado.
boa sorte