Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal.
Estou criando uma aplicação que usa banco de dados access.
Em certo momento, tenho um algoritmo que faz o seguinte:
insert no banco
select do banco
Não necessariamente uma instrução logo após a outra.. enfim..
O problema é que as instruções estão sendo executadas ao mesmo tempo.
Explicando melhor, ao fazer o insert e logo após um select, o select não trás os dados do insert, pois o banco não foi atualizado ainda.. Mas se eu esperar mais um pouquinho no tempo de execução.. Lá estão os dados do insert!
Pensei na gambiarra de fazer o sistema "dormir" entre uma query e outra.. o que não adiantaria mto, pois cara query tem um tempo de resposta diferente..
Amigos, preciso de uma solução pra isso. Algo que faça o access processar uma consulta de cada vez, e me traga no select as informações do insert anterior.
Obrigado pela atenção.
>
Poste seu código se o insert ja foi executado não banco não tem erro, ele tratá os dados.
Abraços...
Não tem erro algum... o código é algo como...
select -> retorna todas as linhas da tabela (10)
insert -> insere uma nova linha
select -> retorna todas as linhas da tabela (10 de novo! deveria ser 11)
então, passado alguns segundos...
...
select -> retorna 11 linhas
entenderam?
a instrução insert tá demorando pra executar.. o select tá sobrepondo.. não sei bem oq acontece.. mas tem esse comportamento..
nada de peculiar no código.. penso que talvez possa ser algum atributo da conexão com o banco.. mas como não tem nada setado aqui além do básico...
obrigado pela resposta!
Nâo tem essa de demorar, quando passar para a proxima linha, já vai ter executado.
Posta o código.
há dois botões para mover entre os registros da tabela.
quando clico em voltar_registro, ele faz o seguinte:
idClienteAtual = 10; 'por exemplo
Dim comando As OleDbCommand
comando = New OleDbCommand("UPDATE TabCli SET " &_
"Nome='" & txtNome.Text & "'," & _
'"... = ..."
"WHERE Controle=" & idClienteAtual, ConectaBancoAccess)
idClienteAtual = idClienteAtual - 1
carregaCliente(idClienteAtual)
O carregaCliente faz o seguinte:
Dim consulta As OleDbDataReader = querySelect("Select * from TabCli where Controle = " & idClienteAtual & "")
Try
While (consulta.Read)
txtNome.Text = consulta.Item("Nome").ToString
'...
End While
Finally
consulta.Close()
End Try
Então clico em voltar, e o programa dá update no cliente 10 e em seguida, carrega o cliente 9.
se eu rapidamente voltar o registro para o 10, os valores recarregam mas não aparecem atualizados.
já, se eu demorar um pouquinho mais pra voltar pro registro 10, os valores aparecem corretamente.
galera, já quebrei a cabeça com tudo aqui.. rs.. please, help!
valeu!
o que tem no querySelect ?
Utiliza
em vez de
>
>
o que tem no querySelect ?
opa, desculpe.. passou.. rs
Public Function querySelect(ByVal query) As OleDbDataReader
Dim dataReader As OleDbDataReader
Dim cmd As New OleDbCommand
cmd.Connection = ConectaBancoAccess()
cmd.CommandText = query
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Return dataReader
End Function
obrigado pela ajuda!
Se vocÊ tirar essa linha, idClienteAtual = idClienteAtual - 1, ele vai carregar com os novos dados ??
>
Se vocÊ tirar essa linha, idClienteAtual = idClienteAtual - 1, ele vai carregar com os novos dados ??
Carrega, mas se comportando ainda com aquele Delay..
Engraçado que, se eu debugo, a instrução é executada corretamente.. (como vou lentamente de um passo pro outro, dá tempo do query ser processado).
Já, se eu rodo direto, tem esse Delay.. O update não acontece na hora.. Ele é processado, mas o banco de dados permite que algum select seja executado antes do update ser concluido..
Ainda se o BD fosse online... Mas é local! o.O
Valeu cara! =]
Gostaria de ver o método que faz a inserção no banco de dados. Não encontrei nenhum que tenha um ExecuteNonQuery.
Poste aqui sua conexão também.
Abraços...
Poste seu código se o insert ja foi executado não banco não tem erro, ele tratá os dados.
Abraços...