réprimer de conflit d'écriture de message dans Access VBA
Mon problème.
J'ai écrit une procédure stockée pour calculer un certain nombre de champs qui sont en train d'être présentée par l'intermédiaire d'un formulaire sur une Ms Access frontale (pour un MSSQL2000 db).
dès que je l'appelle Moi.Forme.Actualiser pour obtenir la modification des valeurs. Je peux l'irritant message que j'ai causé un conflit d'écriture.
Cet enregistrement a été modifié par un autre utilisateur depuis que vous avez commencé à le modifier. Si vous enregistrez l'enregistrement, vous écraserez les modifications apportées par l'autre utilisateur.
La copie de la modification de la dans le presse-papiers vous permettra de regarder les valeurs de l'autre utilisateur a entré
et puis collez vos modifications si vous décidez de faire des changements.
Je sais que ses moi qui a changé les données donc je veux supprimer le message ou d'empêcher le message de se produire.
oui je le fais. J'ai 2 applications que "faire" la même chose et je veux réutiliser la procédure stockée à partir de l'autre. Lorsque la procédure stockée feux de la mise à jour des données sur ce formulaire.
Si la procédure stockée mises à jour de données et non pas une entrée de données dans le formulaire lui-même?
pas à ce stade. Les données sont saisies, puis la procédure stockée n'quelque chose avec elle, la mise à jour de certains des champs sur le formulaire.
L'enregistrer dans le formulaire avant d'exécuter la procédure stockée.
OriginalL'auteur Johnno Nolan | 2009-02-23
Vous devez vous connecter pour publier un commentaire.
(Je suppose que je devrais mettre mes commentaires dans un post, car je suis effectivement de répondre à la question)
La raison pour laquelle vous obtenez le message de conflit en écriture est parce que vous avez créé un conflit d'écriture par l'édition de l'enregistrement via le formulaire et par la procédure stockée. Pour éviter l'erreur, il suffit de l'enregistrer dans le formulaire avant l'exécution de la procédure stockée. À partir de votre extrait de code affiché ci-dessus, il convient de:
C'est une erreur d'Accès, et elle est causée par une tentative de modification des données par le biais d'un formulaire lié et les mises à jour SQL. Vous devez enregistrer le tampon d'édition du formulaire avant de mettre à jour le même enregistrement via SQL.
En d'autres termes, vous devriez être reconnaissants que le message d'erreur qui se passe, parce que sinon, vous perdez l'une ou l'autre de ces changements.
Je doute de la conception, de la bien que. Si vous avez les ouvrir l'enregistrement dans un formulaire lié, puis effectuez les modifications souhaitées à des données chargées dans la forme, plutôt que de l'exécution de SQL de mise à jour. Je ne suis pas sûr pourquoi vous avez besoin d'une procédure stockée pour apporter des modifications à un document que vous avez déjà mises en forme -- cela ressemble à une erreur de conception pour moi (même si la solution est assez simple).
Merci pour les commentaires btw.
OriginalL'auteur David-W-Fenton
J'ai eu un problème similaire.
Exemple:
Disons que l'enregistrement a un champ
aForm!text = "Hello"
.Si l'utilisateur clique sur un bouton, le code VBA est exécutée lorsque
Quand je ferme le dossier, j'ai le message "Ce disque a été changé ..."
Solution:
Si vous actualisez la forme par
aForm.Refresh
etaForm.Requery
vous pouvez éviter le conflit d'écriture.OriginalL'auteur user1141785
J'ai un formulaire d'accès lié à une base de données SQL. Un trigger sur une table liée à un sous-formulaire mises à jour un champ dans le formulaire. Si j'ai éditer le même document en la forme, après j'ai changé les valeurs dans le sous-formulaire, je reçois le message d'erreur "Conflit d'Écriture Cet enregistrement a été modifié....".
Le champ qui a été mis à jour par le déclencheur ne peut pas être changé sur le formulaire directement si il est toujours ok pour sélectionner "Enregistrer l'Enregistrement de" mais je ne pouvais pas comprendre comment sélectionner "Enregistrer l'Enregistrement de" automatiquement.
Comme d'autres l'ont dit, le moyen d'éviter l'erreur est d'actualiser le formulaire avant de modifier le record, mais qui rend l'expérience utilisateur moins lisse.
J'ai enfin trouvé une solution de contournement:
Dans le module de classe du formulaire entrée:
Privé Sous Form_Error(DataErr Entier, Réponse Sous Forme D'Entier)
End Sub
J'ai passé un long moment à la recherche d'une solution - j'espère que cela aide quelqu'un d'autre
OriginalL'auteur William Smith
La façon que j'ai trouvé pour contourner cela est de rétablir la source d'enregistrement
mais cela semble hacky.
OriginalL'auteur Johnno Nolan
Ce qui se passe lorsque vous exécutez la procédure stockée quelque chose comme ceci:
OriginalL'auteur BIBD
Vérifier pour voir si vous avez un trigger sur la table que vous êtes en train de mettre à jour. Si oui, assurez-vous qu'il ne retourne rien dans la fenêtre de texte lorsque vous exécutez.
J'ai eu ce même problème et n'a pas pu résoudre JUSQU'à ce que j'ai ajouté un "SET NOCOUNT on" au début de la gâchette.
Rien n'a été mis à jour à l'externe par le déclencheur que c'était une "APRÈS l'INSÉRER,SUPPRIMER" déclencheur, mais mon problème a été résolu.
OriginalL'auteur Lauren Glenn
Si aucune de ces réponses a travaillé, puis essayez ceci. Dans les formulaires que vous rencontrez l'erreur, branchez le présent code.
Fondamentalement, l'erreur est de deux formes de l'édition de la même information. Donc, vous avez à dire l'Accès à enregistrer après avoir quitté l'une des formes.
Source: https://support.microsoft.com/en-ca/kb/304181
OriginalL'auteur Pokeastuff
J'ai eu le même problème. J'ai changé les champs par le code de forme de l'esclave (slave table) dans le formulaire principal (master de la table) et j'ai toujours eu l'avertissement avant la fermeture de la forme:"l'enregistrement a été modifié par un autre utilisateur..."
Mauvais état:
La mauvaise syntaxe dans les esclaves de la forme (action après la mise à jour du champ) a été:
Le Formulaire Parent puis après détecté, qu'un autre "utilisateur" a changé son champ.
Solution:
Maître de la Force formulaire pour modifier les valeurs de lui-même.
Utilisez le formulaire de référence de la classe:
1) Définir des variables privées de valeurs, de ce qui doit être changé à partir de la forme de l'esclave
2) Définir des Publics permettent d'obtenir les propriétés dans le modèle de formulaire - je.e "Public Property Let letResult(ByVal myVal au double) ..."
3) Définir une procédure publique Write_Values dans le formulaire principal qui définit des valeurs dans les champs dans le formulaire principal de l'valeurs privées (valeur obtenu à partir de la propriété Publique ...)
4) Définir la syntaxe de l'esclave formulaire qui envoie les valeurs de laisser la propriété dans le formulaire principal.
5) En fin de compte, l'appel de la procédure publique Write_Values dans le modèle de formulaire à partir de la forme de l'esclave
exemple de code maître de la forme:
exemple esclave de code du formulaire:
OriginalL'auteur Vladimir