Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ucx

Access sobrepondo instruções SQL

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nâo tem essa de demorar, quando passar para a proxima linha, já vai ter executado.

 

 

Posta o código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que tem no querySelect ?

 

 

Utiliza

 em vez de 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se vocÊ tirar essa linha, idClienteAtual = idClienteAtual - 1, ele vai carregar com os novos dados ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

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! =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.