Jump to content
Leodellari

Quando armazeno uma tabela em um DataTable, a última linha da tabela fica faltando (BD Access)

Recommended Posts

Leodellari

Boas

Criei uma tabela via código em uma base de dados access. Esta tabela contém 35 linhas preenchidas (sua última linha é a linha 34). Mas quando faço o "SELECT * FROM ..." o DataTable não armazena a última linha. Isso nunca me aconteceu. É a primeira vez que isso me acontece. A tabela original apresenta todos os valores, mas o DT não.

Os outros DataTables que estou usando armazenam toda a tabela, mas esse não. Por enquanto não preciso da última linha da tabela, e não sei se vou precisar no futuro... Mas e se acontecer o mesmo erro com outro DT?

Segue uma pasta no drive contendo as imagens da tabela e dos valores armazenados no DataTable.

https://drive.google.com/drive/folders/1ao-deFC2mcF5xLwY7YA_TxnbTCHL4aWU?usp=sharing

 

Esse erro passa a acontecer depois que eu dou um "delete" na tabela... Não sei se é por conta disso.

Edited by Leodellari

Share this post


Link to post
Share on other sites
miglaranjeira

Boa tarde

O que me parece que está a acontecer é que no datatable estão todos os registos, mas não com a mesma ordem

Experimenta SELECT * FROM ..ORDER BY Linha, Coluna

  • Vote 1

Share this post


Link to post
Share on other sites
Leodellari

Boa tarde miglaranjeira,

Os valores estão em ordem. O que faço nessa parte do código é resgatar todos os valores de uma tabela (que é uma matriz esparsa) de modo a receber em ordem crescente. Depois deleto todos os registros dessa tabela com um "DELETE FROM ..." (o "TRUNCATE" não funciona... talvez seja por conta do Access) e armazeno os valores na tabela novamente. Depois do "delete from" paro de receber a última linha da tabela. Aconteceu com outra tabela que faço a mesma coisa: resgato os valores em ordem crescente com um "ORDER BY", deleto todos os registros da tabela, e armazeno na mesma tabela em ordem crescente.

Edited by Leodellari

Share this post


Link to post
Share on other sites
Leodellari

Pois não sei o que se passa.

Vou descrever o teste que fiz aqui, quem sabe ajuda a entender melhor o meu problema. 

Resgatei os valores de uma tabela ("DeslocamentosNodais") usando o "ORDER BY". Criei outra tabela e armazenei os valores em ordem crescente em uma tabela com o nome de "DeslocamentosNodais2". Criei mais um DataTable (agora tem um dt para cada tabela). Em outra Sub eu resgato os valores das tabelas. O DataTable (dtdnv) que armazena os valores da tabela "DeslocamentosNodais" (valores desorganizados) recebe todos os valores, mas o DataTable (dtdnv2) que recebe os valores da nova tabela que criei ("DeslocamentosNodais2") não armazena a última linha. No access a linha existe, mas no DT a última linha não existe. A string que estou usando é a mesma para as duas tabelas ("SELECT * FROM nome_tabela").

Share this post


Link to post
Share on other sites
Leodellari

Acabei de descobrir o erro. Eu não estava fechando a conexão no final da Sub, e acho que isso estava causando o erro.

Estou dividindo tudo em Subs para ficar mais organizado. Dentro das Subs eu deixo a conexão aberta, pois realizo várias operações de inserção e atualização de valores.

No final de duas Subs eu não estava fechando a conexão. Quando o programa iniciava outra Sub, ele abria a conexão (mesmo ela já estando aberta) para resgatar os valores, e assim acontecia esse erro.

Fechei a conexão no final de duas Subs (me esqueci de fechar a conexão), e o problema parou de acontecer.

Obrigado mesmo assim.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.