Pergunta

Eu tenho um ADP do Microsoft Access 2003, que usa uma forma "principal" ligada com várias subforms de estilo contínuo vinculado. Todos eles utilizam os registros desconectados por meio de uma classe auxiliar.

Vários usuários notaram o mesmo comportamento estranho: eles adicionam/editam um registro no subformado contínuo, deixam o registro (cometendo a edição no conjunto de registros), eles travam o computador (Ctrl+Alt+Del), eles desbloqueiam o computador, Eles voltam para o formulário, depois de cerca de 5 segundos, ele pisca e volta ao estado não editado original.

Consegui reproduzir isso seguindo as etapas acima, depois de fazer uma alteração no meu formulário, vinculada a um conjunto de registros desconectado, fui ao SQL Server e mudei um valor. Após a rotina de computadores de bloqueio/desbloqueio, o formulário filmes e atualiza e o novo valor que acabei de inserir no SQL Server é exibido.

É como se depois de cerca de 5 segundos, meu conjunto de registros desconectado está se reconectando (por conta própria) e requisitando o registro.

Sei que não estou dando muitas informações aqui, mas alguém encontrou um problema com os registros desconectados reconectando e requisitando? Ou pelo menos tem idéias de onde eu poderia começar a depurar?

Eu tenho o script ADP e SQL para criar o banco de dados se alguém quiser recriar isso em seu ambiente.

Veja como estou criando o RecordSet desconectado:

Dim cnn                 As ADODB.Connection
Dim stmTest             As ADODB.Stream

Set cnn = New ADODB.Connection
cnn.Open Application.CurrentProject.AccessConnection.ConnectionString

' Create recordset and disconnect it.
Set mrsTest = New ADODB.Recordset
mrsTest.CursorLocation = adUseClient
mrsTest.Open "SELECT * FROM [tblChild] WHERE ParentID = 1" _
    , cnn _
    , adOpenStatic, adLockBatchOptimistic
Set mrsTest.ActiveConnection = Nothing

cnn.Close
Set cnn = Nothing

' Copy recordset to stream in memory.
Set stmTest = New ADODB.Stream
stmTest.Open
mrsTest.Save stmTest, adPersistADTG

' Bind form to disconnected recordset.
Set Me.Recordset = mrsTest

' Open a copy of the recordset from the stream.
Set mrsTest = New ADODB.Recordset
stmTest.Position = 0
mrsTest.Open stmTest
Foi útil?

Solução

Eu queria transações como processamento (salvar e cancelar botões) sem que as tabelas estivessem bloqueadas, no meu sistema de usuário múltiplo. Para formas contínuas no acesso ao trabalho, elas devem estar vinculadas a um conjunto de registros.

Você pode usar formulários/subforms vinculados a tabelas temporárias para alcançar exatamente esse efeito.

http://www.access-programmers.co.uk/forums/showthread.php?t=206862

Steve

Outras dicas

Provavelmente um pouco offtopic, mas esse é um código interessante. Nunca pensei em trabalhar com conjuntos de dados como este. Existe uma razão específica pela qual você usa esses 'conjuntos de dados desconectados'?

Eu também experimentei o mesmo código um tempo atrás e tive a mesma experiência.

Aqui está a maneira como vejo por que o registro se reconecta ao servidor ...

Se você verificar o registro do formulário (após vincular o conjunto de registros), verá sua instrução SQL colocada lá como o valor. Como é ADP, seu formulário está sempre vinculado ao servidor. Portanto, quando o formulário atualiza, o registro também atualiza.

Se você encontrar uma solução para isso, por favor, poste!

Obrigada.

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