2017-09-04 2 views
2

Je cours MS Access 2016 se connectant via ODBC à SQLServer 2016. J'ai un formulaire simple basé sur une table liée. Lorsque je l'affiche en mode Formulaire, change certaines données et clique sur l'enregistrement suivant, il met à jour l'enregistrement en cours et passe au suivant, mais lorsque j'utilise une liste déroulante pour sélectionner l'enregistrement à déplacer, il affiche l'enregistrement. J'ai sélectionné et si je change certaines données à ce sujet - il retourne l'erreur 'ODBC -update sur la table liée a échoué; pilote ODBC Microsoft SQL Server délai de requête a expiré (# 0) »Erreur MS Access ODBC Timeout sur l'enregistrement de sauvegarde

J'ai essayé 2 différentes méthodes ci-dessous par le code pour les 2 différentes zones de liste déroulante

Private Sub cboFindRecord_AfterUpdate() 
Dim rst As DAO.Recordset 
    Set rst = Me.RecordsetClone 
    rst.FindFirst "Id=" & Nz(Me.cboFindRecord, 0) 
    If Not rst.EOF Then 
     Me.Bookmark = rst.Bookmark 
    End If 
    rst.Close 
    Set rst = Nothing 
End Sub 


Private Sub FindRecord2_AfterUpdate() 
    Me.txtId.Enabled = True 
    Me.txtId.Locked = False 
    Me.txtId.SetFocus 
    If IsNull(Me.FindRecord2) Then 
     Exit Sub 
    End If 
    DoCmd.FindRecord Me.FindRecord2, acEntire, , acSearchAll, , acCurrent 
End Sub 

(je le code sur d'autres formes cette base de données, et ils fonctionnent, mais pour cette forme, pour cette table il ne le fait pas)

Il ya 500 enregistrements sur la table, il semble que ce soit un problème de blocage plutôt qu'un problème de délai d'attente. Si je lance un Sp_who2 sur SQL Server, cela montre qu'il y a un bloc de processus - mais pourquoi quelqu'un peut-il m'aider?

+0

Avez-vous plusieurs index complexes sur la table en cours de mise à jour? – Minty

+0

J'ai 5 index sur cette table, y compris la clé primaire - juste enlevé tous les index en dehors de la clé primaire et ne fonctionne toujours pas :-( –

+0

Je viens de réaliser que si j'utilise les sélecteurs d'enregistrement pour passer à l'enregistrement suivant/précédent Mais si j'utilise mes zones de liste déroulantes codées pour le sélectionner, il semble créer un autre SPID sur SQL Server et la mise à jour est bloquée par le select –

Répondre

0

Comme vous avez noté que la relation formulaire/table fonctionne bien lorsque vous utilisez le sélecteur d'enregistrement - - alors tout se résume à la liste déroulante. La première chose que je ferais est simplement de créer un nouveau à partir de zéro. Lorsque vous faites cela - assurez-vous que le champ clé est la première colonne et devient la valeur liée de la liste déroulante. C'est la façon dont il voudra s'installer de manière inhérente - mais soyez juste sûr que c'est le cas.

+0

Vous avez répondu à mon problème - J'ai réalisé par le processus d'élimination que il est descendu dans la zone de liste déroulante - j'ai commencé à recréer la forme à partir de zéro en pensant qu'elle était corrompue d'une manière ou d'une autre ... Lorsque j'ai créé la zone de liste déroulante en utilisant l'assistant MS Access, j'ai réalisé le champ de description. down n'a pas été affiché dans la liste des champs.J'avais défini cela sur SQLServer comme un champ ntext (mémo), quand je l'ai changé en un nvarchar droite (255) tous travaillé aok! Merci pour l'aide :-) –