01.Blogs :
AFurtado  
Engenharia de software, tendências, entrevistas e competições no mundo de TI.

Pegadinha no Visual Studio: banco Access nao atualiza com Update

Durante uma aula de Windows Forms na Qualiti, pretendia fazer uma demonstração simples: carregar visualmente um DataGridView com uma tabela do BD, alterar o grid e depois persistir as alterações no banco invocando o método Update do TableAdapter gerado.

Como não havia SQL Server disponível no momento, utilizei um banco Access (.mdb). Para minha surpresa, a demo não funcionou! Após clicar no botão, fechar e rodar a aplicação novamente, o grid se mostrava igual ao original, não atualizado, e o que é pior: nenhuma mensagem de erro havia sido exibida em nenhum momento.

Em casa, fui tirar o problema a limpo: criei a aplicação abaixo, em que o primeiro grid é alimentado por um .mdb e o segundo pelo SQL Server.

Os dois botões de cima possuem o comportamento idêntico de atualizar as suas respectivas bases. Ao rodar a demonstração: o mesmo erro aconteceu: a atualização aparentava ocorrer normalmente na primeira execução da aplicação, mas na segunda execução o grid Access estava desatualizado. Para piorar, o grid do SQL Server era atualizado sem problemas.

Bug no gerador de código do Visual Studio .NET para bancos Access? Depois de quebrar um pouco a cabeça, descobri que na verdade não se trata de um bug, mas de uma "pegadinha" do VS.NET.

Explicando melhor: quando você adiciona uma conexão a um banco Access, é dada a opção de incluir o arquivo .mdb na solução, o que sempre aceitei ingenuamente. Entretanto, quando a aplicação é executada, o .mdb que está no diretório do projeto é copiado para a pasta de output da solução (bin\Debug). O botão que atualiza o banco Access estava sim fazendo sua tarefa com sucesso, mas ao rodar a aplicação novamente via VS.NET, todo o conteúdo da pasta de output é sobrescrito (como esperado), o que ocasiona a troca do .mdb atualizado pelo antigo, que estava no diretório da solução (como não esperado).

Para resolver o problema, basta clicar no arquivo .mdb da solução, dentro do Solution Explorer, e na propriedade "Copy to Output Directory" setar "Copy if newer". Assim você não cai na pegadinha, mas também não fica feliz por pensar que encontrou um bug no VS.NET.

[]s
-- AFurtado

posted on Monday, January 22, 2007 12:18 PM by AFurtado

# re: Pegadinha no Visual Studio: banco Access nao atualiza com Update @ Tuesday, January 23, 2007 4:31 AM

Grande,André

essa sua descoberta só reforça aquele velho proverbo inventado para a informática, antes da informática ser inventada: "O Diabo está nos detalhes". Chato é ter que perder um tempão para se dar conta desses contratempos.

Abraços,
Cláudio Ralha

claudioralha

# re: Pegadinha no Visual Studio: banco Access nao atualiza com Update @ Tuesday, January 23, 2007 9:17 AM

Hehe, sem dúvida meu amigo, mas vendo dicas como essas pela comunidade terminamos *ganhando* tempo :)

[]s
-- AFurtado

AFurtado

# devASPNet Magazine No 29 : Muitas Realizações @ Monday, July 16, 2007 2:30 PM


.main {
SCROLLBAR-FACE-COLOR: #ffffff; FONT-SIZE: 11px; BACKGROUND-IMAGE: url(http://www.devaspnet.com.br/revista/imagensv2/images/fundo_main.gif);...

Dennes


 
03.UPDATE CALENDAR :
<January 2007>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

05.MY LINKS :

07.Subscriptions :

Subscriptions


© Copyright 2005 Microsoft Corporation. All Rights Reserved.
Terms of Use | Privacy Statement | Code of Conduct | Hosted by MaximumASP for Microsoft
WHO-BAR