Criando um banco de dados no Microsoft Access que pode ser pesquisado apenas por determinados campos

StackOverflow https://stackoverflow.com/questions/72528

  •  09-06-2019
  •  | 
  •  

Pergunta

Como você criaria um banco de dados no Microsoft Access que fosse pesquisável apenas por determinados campos e controlado apenas por algumas caixas de texto e caixas de seleção (necessárias) em um formulário, para que fosse fácil de usar - sem consultas difíceis?

Exemplo:Você tem várias caixas de texto e várias caixas de seleção correspondentes em um formulário, e quando a caixa de seleção ao lado da caixa de texto está marcada, a caixa de texto é habilitada e você pode pesquisar pelo que foi inserido nessa caixa de texto

(Na verdade eu já sei disso, apenas jogando o risco de stackoverflow, onde faço uma pergunta e sei a resposta apenas para aumentar o conhecimento de codificação do mundo!resposta chegando em cerca de 5 minutos)

Foi útil?

Solução

Na verdade, este é um tópico bastante amplo e repleto de todos os tipos de problemas potenciais.A maioria dos livros intermediários a avançados sobre Access terá algum tipo de seção discutindo "Consulta por Formulário", onde você tem um formulário não vinculado que permite ao usuário escolher determinados critérios e que, quando executado, escreve SQL dinamicamente para retornar o dados correspondentes.

Em qualquer coisa que não seja uma estrutura de dados plana e de tabela única, esta não é uma tarefa trivial porque a cláusula FROM do SQL depende das tabelas consultadas na cláusula WHERE.

Alguns exemplos de alguns formulários QBF de aplicativos que criei para clientes:

  1. Consultando 4 tabelas subjacentes
  2. Consultando uma única tabela plana
  3. Consultando 3 tabelas subjacentes
  4. Consultando 6 tabelas subjacentes
  5. Consultando 2 tabelas subjacentes

O primeiro é conduzido por um módulo de classe que possui propriedades que refletem os critérios selecionados neste formulário, e que possui métodos que escrevem as cláusulas FROM e WHERE.Isto torna extremamente fácil adicionar outros campos (desde que esses campos não venham de tabelas diferentes das já incluídas).

A parte mais complexa do processo é escrever a cláusula FROM, pois você precisa ter tipos de junção apropriados e incluir apenas as tabelas que estão na cláusula SELECT ou na cláusula WHERE.Se você incluir qualquer outra coisa, sua consulta ficará muito lenta (especialmente se houver junções externas).

Mas este é um assunto extenso e não existe uma solução mágica – em vez disso, algo assim deve ser criado para cada aplicação específica.Também é importante que você o teste minuciosamente com os usuários, já que o que é completamente claro e compreensível para você, o desenvolvedor, costuma ser bastante confuso para os usuários finais.

Mas esse é um princípio que não se aplica apenas ao QBF!

Outras dicas

Minha própria solução é adicionar um controle de "filtro" na parte do cabeçalho do formulário para cada uma das colunas que desejo filtrar (geralmente todas ...).Cada vez que tal controle "filtro" for atualizado, será executado um procedimento para atualizar o filtro ativo do formulário, utilizando a função "BuildCriteria" disponível no Access VBA.

Assim, quando eu digito "*cable*" no "filtro" no topo da coluna Descrição do Pedido de Compra, o "WHERE PODescription IS LIKE "*cable*"é adicionado automaticamente à propriedade MyForm.filter....

Alguns objetariam que filtrar fontes de registro compostas por múltiplas tabelas subjacentes pode se tornar muito complicado.Isso mesmo.Portanto, a melhor solução é, na minha opinião, sempre (estou falando sério!) Usar uma tabela plana ou uma visualização (consulta "SELECT" no Access) como fonte de registro para um formulário.Isso facilitará muito a sua vida!

Quando estiver convencido disso, você pode até pensar em um pequeno módulo que automatizará a adição de controles de “filtro” e procedimentos relacionados aos seus formulários.Você estará no caminho certo para obter uma interface de cliente realmente amigável.

Na inicialização, você precisa mostrar um formulário e desabilitar outros menus, etc.Dessa forma, seu usuário só vê sua funcionalidade limitada e não pode abrir diretamente as tabelas, etc.

Este trecho do livro, Proteção e segurança de banco de dados Microsoft Access do mundo real, deve ser esclarecedor.

Para uma pergunta tão vaga, tudo o que posso responder é abrir o MS Access e clicar algumas vezes com o mouse.

Pensando melhor:
Use o argumento "WhereCondition" do método "OpenForm"

Se a funcionalidade for muito limitada e/ou especializada, um banco de dados SQL provavelmente será um exagero, por exemplo.armazene em cache todas as combinações de dados localmente, até mesmo na memória, e mostre uma de acordo com as caixas de seleção do formulário.Anteriormente, você poderia ter revogado permissões da tabela e concedido-as apenas em VIEWs/PROCs que consultavam os dados da maneira prescrita, no entanto, a segurança foi removida do MS Access 2007, então agora você pode realmente impedir que os usuários ignorem seu aplicativo simples usando, digamos , Excel e consultar os dados da maneira que quiserem ... mas esse não é o objetivo de um banco de dados corporativo?;-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top