Problemas utilizando o MS Access como front-end para um banco de dados MySQL back-end?

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

  •  08-06-2019
  •  | 
  •  

Pergunta

Dois utilizadores queria compartilhar o mesmo banco de dados, originalmente escrito em MS Access, sem entrar em conflito com um do outro através de um único arquivo MDB.

Eu mudei as tabelas a partir de um simples banco de dados MS Access para MySQL usando o seu Kit De Ferramentas De Migração (que funciona muito bem, por sinal) e configurar o Acesso ao link para as tabelas via ODBC.

Até agora, eu tenho que correr para o seguinte:

  • Você não pode inserir/atualizar/excluir linhas em uma tabela sem chave primária (não há surpresa).
  • Campos de numeração automática no microsoft Access deve ser a chave primária, ou eles vão acabar como colunas de número inteiro no MySQL (natch, por que não seria o PK?)
  • As tabelas foram migrados para o MySQL é o tipo de tabela InnoDB, mas o Acesso relacionamentos não se tornam MySQL restrições de chave estrangeira.

Uma vez que o banco de dados está em uso, posso esperar que todas as outras questões?Particularmente quando ambos os utilizadores estão a trabalhar na mesma tabela?

Foi útil?

Solução

Eu tinha um aplicativo que funcionava da mesma forma:um MS Access frontend para um backend MySQL.Foi uma dor enorme que eu acabei de escrever um Win32 frontend em vez disso.Do alto da minha cabeça, eu encontrados os seguintes problemas:

  • O desenvolvimento de a ligação ODBC parece ter cessado há muito tempo.Existem várias versões diferentes flutuando --- muito confuso.A ligação de ODBC não suporta Unicode/UTF-8, e eu me lembro que havia outros problemas com ele assim (embora algumas possam ser superados pelo cuidado de configuração).
  • Você provavelmente deseja ajustar manualmente o seu esquema de banco de dados para torná-lo compatível com o MS Access.Vejo que você já descobriu sobre a necessidade de substituição de teclas (por exemplo, int chaves primárias) :-)
  • Você deve manter em mente que você pode precisar usar consultas passagem para fazer mais sofisticados SQL manipulações do banco de dados MySQL.
  • Tenha cuidado com o uso de muita VBA, uma vez que tende a corromper o arquivo frontend.Regularmente compactar o banco de dados (usando o menu principal, Ferramentas | utilitários de Banco de dados | Comprimir e restaurar, ou algo do tipo --- eu estou usando a versão em holandês) e fazendo lotes de cópias de segurança é necessário.
  • Acesso tende a causar muito tráfego de rede.Como, realmente grandes lotes.Eu não tenho sido capaz de encontrar uma solução para isso.Usando um monitor de rede é recomendado se você deseja manter um olho sobre o que!
  • Acesso insiste em guardar os valores booleanos como 0/-1.IMHO, 0/+1 faz mais sentido, e eu acredito que é a forma padrão de fazer as coisas no MySQL assim.Não é um grande problema, mas se o seu caixas de seleção não funcionam, você deve definitivamente verificar isso.

Uma possível alternativa seria colocar o back-end (com dados) em uma unidade compartilhada.Lembro que esse é bem documentado, também em o ajudar.Você pode querer ter um olhar para alguns conselhos gerais sobre dividindo-se em um frontend e back-end e código que reconecta automaticamente para o back-end na inicialização;Que eu possa também enviar-lhe mais algum exemplo de código, ou postá-lo aqui.

Caso contrário, você pode também querer considerar o MS SQL.Eu não tenho experiência com isso, mas eu presumo que ele funciona em conjunto com o MS Access muito mais muito bem!

Outras dicas

Eu sei que este tópico não é muito doce, mas apenas algumas explicações adicionais:

Se você quiser usar o MS Access de forma eficaz, especialmente com os maiores, bancos de dados multiusuário, por favor, faça o seguinte:

  • dividir o MDB na aplicação frontend e backend (somente dados) arquivos - você vai ter separada em dois arquivos MDB de então.

  • migrar todas as tabelas com dados e estrutura de banco de dados externo.Ele pode ser:MySQL (funciona muito bem, nenhum banco de dados limitações de tamanho, requer algumas habilidades mais como não MS tecnologia, mas é uma boa escolha, em muitos casos - além disso, você pode dimensionar o seu back-end com mais RAM e mais CPUs, assim, tudo depende de suas necessidades e capacidades do hardware);Oracle (se você tiver bastante dinheiro ou algum tipo de licença corporativa) ou Oracle 10g XE (se isso não é um problema, que o tamanho do banco de dados é limitado a até 4 GB e ele vai sempre usar 1 GB de RAM e 1 CPU), MS SQL Server 2008 (é um ótimo par para ter o MS Access frontend e MS SQL Server back-end em todos os casos, mas você tem que pagar pela licença!- vantagens são:integração, ambas as tecnologias são forma o mesmo fornecedor;O MS SQL Server é muito fácil manter um eficaz ao mesmo tempo) ou Express edition (mesma história, como com o Oracle XE - quase as mesmas limitações).

  • ligar novamente o MS Access frontend com back-end de banco de dados.Se você selecionou o MS SQL Server para o servidor, em seguida, ele vai ser tão fácil como usar o assistente a partir do MS Access.Para o MySQL, você tem que usar drivers ODBC (é simples e funciona muito bem).Para Oracle - por favor, não use os drivers ODBC da Microsoft.Estes a partir da Oracle vão fazer o seu trabalho muito melhor (você pode comparar o tempo necessário para executar a consulta SQL a partir do MS Acesso ao Oracle através de ODBC do Oracle e MS drivers de ODBC do Oracle).Neste ponto, você vai ter um sólido banco de dados de back-end e totalmente funcional do MS Access frontend - arquivo MDB.

  • compilar o MDB frontend para o MDE - ele vai te dar um monte de velocidade.Além disso, é a única razoável forma de distribuição do MS Access, aplicativo para seus usuários finais.

  • para o trabalho diário de usar arquivo MDE com o MS Access frontend.Para mais MS Access frontend de desenvolvimento de usar o arquivo MDB.

  • não usar mal escritos componentes ActiveX para melhorar o MS Access frontend capacidades.Melhor escrever-se ou comprar próprias.

  • não acredito em mitos que há um monte de problemas com o MS Access, este é um ótimo produto que pode ajudar em maio de ocasiões.O problema é que um monte de pessoas assume um brinquedo ou que o MS Access é geralmente simples.Normalmente, eles geram uma série de erros e problemas por si próprios e da sua falta de conhecimento e experiência.Para ser bem sucedido com o MS Access é importante compreender que esta ferramenta - esta é a mesma regra, como com qualquer outra tecnologia, outhere.

Eu posso dizer que eu estou usando bastante avançado MS Access fachada a um banco de dados de back-end e estou muito satisfeito (como um desenvolvedor que é manter este aplicativo).Meus amigos, os usuários também estão satisfeitos como eles se sentem muito confortáveis com o GUI (frontend), a velocidade (MySQL), eles não têm quaisquer problemas com os registros de fecho ou desempenho do banco de dados.

Além disso, é importante ler bastante sobre boas práticas e outras pessoas experiências.Eu diria que, em muitos casos, o MS Access é uma boa solução.Eu conheço um monte de dedicado, feito-sistemas que começou como um experimento em forma de privada de dados do MS Access (MDB) e, em seguida, evoluiu para:dividido MS Access (MDE - frontend, MDB - back) e, finalmente, para:MS Access frontend (MDE) e "grave" backend de banco de dados (principalmente o MS SQL Server e MySQL).Também é importante que você sempre pode usar o MS Access como a solução de um protótipo funcional - você tem pronto para usar o back-end em seu banco de dados (MySQL - vamos supor) e você pode reescrever interface para a tecnologia de sua escolha (solução de web?talvez ambiente de trabalho aplicação C# - o que você precisar!).

Espero ter ajudado alguns de vocês, tendo em consideração o trabalho com o MS Access.

Cumprimentos, Wawrzyn http://dcserwis.pl

Gareth Simpson opinou:

Se apenas dois usuários, o Acesso deve fazer muito bem se você colocar o .mdb em uma unidade compartilhada.

Er, não.Não há Acesso multi-utilizador aplicativo para que cada usuário não deve ter um dedicado cópia do front-end.Isto significa que cada usuário deve ter um MDB em sua estação de trabalho.Por quê?Porque os objetos no front-ends não compartilhamos bem (não tão bem como Jet tabelas de dados, embora não haja qualquer das pessoas neste cenário usando o MySQL como o back-end).

Gareth Simpson continuou:

Eu acredito que o recomendado max. usuários simultâneos para Acesso é 5, mas na ocasião eu já empurrei-passado presente e nunca desagregar-se.

Não, isso é completamente incorreto.O limite teórico para os usuários de um MDB é 255.Que não é realista, é claro, de uma vez que você atingir cerca de 20 usuários que você tem para programar seu aplicativo de Acesso com cuidado para funcionar bem (embora as coisas que você precisa fazer em um Jato de aplicação são os mesmos tipos de coisas que você gostaria de fazer para qualquer servidor de aplicativo de banco de dados eficiente, por exemplo, obter o menor utilizável conjuntos de dados).

Neste caso, uma vez que cada usuário deve ter uma cópia individual do front-end do MDB, o multi-limites de utilizador do Access/Jet simplesmente não é relevante.

Eu sei que este não responder sua pergunta diretamente, mas pode ser que vale a pena conferir a O SQL Server 2005 ferramenta de migração para o Acesso.Eu nunca usei a ferramenta, mas pode valer a pena usar com o SQL Server 2005 Express Edition para ver se não são as mesmas questões que você tinha com o MySQL

Não se esqueça de colocar algum tipo de carimbo de data/hora em cada registro.às vezes, ms access irá pensar "outro usuário alterou ou excluiu o registro" e não permitirá que você para fazer uma mudança!Descobri da maneira mais difícil.

Em geral, depende :)

Eu não tive uma série de problemas ao lado do aplicativo acaba de atualizar os dados através de formulários.Você pode obter erros/avisos quando a mesma linha foi atualizada por mais de um usuário;mas o Acesso parece ser a atualização constante de seus viver registro define o tempo todo.

Problemas podem acontecer se a Alice já está trabalhando com registro 365, e o Bob atualizações e, em seguida, Alice tenta atualizá-lo com as suas alterações.Se bem me lembro, Alice vai ter uma enigmática mensagem de erro.Seria mais fácil para os usuários se interceptar esses erros e pelo menos dar-lhes um amigável de mensagem de erro.

Eu tive mais problemas quando eu estava edição de registros no código VB através de conjuntos de registros, especialmente quando combinado com a editar os mesmos dados em formulários.Que não é, necessariamente, um multi-usuário problema;no entanto, você tem quase a mesma situação, porque você tem um usuário com várias ligações para os mesmos dados.

Se apenas dois usuários, o Acesso deve fazer muito bem se você colocar a .mdb em uma unidade compartilhada.

Você já tentou primeiro, em vez de simplesmente assumir que vai ser um problema.

Eu acredito que a máxima recomendada usuários simultâneos para Acesso é 5, mas na ocasião eu tenho empurrado passado, e nunca desagregar-se.

Por outro lado, eu fiz uma vez de utilizar o Access como front-end do MySQL em um ambiente de usuário único (me).Era uma singular experiência desagradável, eu não posso imaginar que iria se tornar mais agradável com dois usuários.

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