L'Accès DB “enregistrement a été modifié par un autre utilisateur”
Je suis le maintien d'un Accès multi-utilisateur à 2000 DB lié à une MSSQL2000 base de données, pas écrit par moi.
La conception de base de données est très faible, de sorte que vous aurez à porter avec moi.
Sur le "Client" formulaire il y a un Customer_ID' domaine qui par défaut a besoin pour obtenir le prochain numéro de client, mais l'utilisateur a la possibilité d'annuler ce choix avec un client existant ID.
Maintenant, le champ Customer_ID n'est pas le PK de la table Client. Il n'est également pas unique.
Si un client appelle deux fois pour soumettre un travail d'impression, le tableau va recevoir deux dossiers, chacun avec la même information à la clientèle, et le même ID de client.
Si un utilisateur crée un nouveau billet, l'Accès se fait une recherche rapide dans le prochain numéro de client et le remplit. Mais il n'est pas à l'enregistrer. De toute évidence un problème - deux utilisateurs d'édition à garder une trace du travail des autres afin de ne pas la dupe d'un ID de client.
Je tiens donc à modifier le "nouveau record" bouton de sorte qu'il économise le billet juste après la création d'un nouveau.
Problème c'est que quand je test le changement, j'obtiens "Ce record a été modifié par un autre utilisateur depuis que vous avez commencé à modifier".
Certainement pas d'autres utilisateurs sur la DB. L '"autre utilisateur" était sans doute mon forcé enregistrer.
Des idées?
OriginalL'auteur ChristianLinnell | 2009-06-09
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à votre table liée dans SQL Server 2000. A-t-elle un champ contenant le type de données bit? Access va vous donner ce message d'erreur dans une table liée scénario si vous avez un champ de bits qui n'ont pas de valeur par défaut.
Il pourrait ne pas être ce qui est mal dans votre cas, mais j'ai vécu la même dans une base de données Access 2007 et de suivi de la problème de un champ de bits avec pas de valeur par défaut.
Cela a totalement fonctionné pour moi, j'ai mis à jour null dans les colonnes de bit à zéro et l'erreur a disparu.
Merci un million. Quel étrange comportement.
n'oubliez pas de assurez-vous que le champ de bits ne peut pas être null ou vous devez aller avec birger réponse.
C'est ce que StackOverflow est pour. Pré-Internet, je pouvais avoir passé des semaines à essayer de résoudre ce problème, et je n'aurais jamais pensé à cette réponse. Juste pour ajouter un couple de choses supplémentaires: si vous avez une table liée, n'oubliez pas d'exécuter du code dans l'Accès à actualiser le lien; et assurez-vous que le champ de bits de SQL Server a une valeur pour toutes les lignes existantes, ainsi qu'une valeur par défaut pour les nouveaux. Merci beaucoup!
OriginalL'auteur Istari
J'ai vu ce comportement avant et ce qu'il est corrigé pour moi:
Essayez d'ajouter un champ d'Horodatage à la table (il suffit d'ajouter ce domaine et de mettre à jour vos tables liées. Vous n'avez pas besoin de remplir ce champ avec tout type de données).
Que faire si la table de lien également le lien dans un autre fichier access qui servent de données partagées? J'ai essayé d'ajouter une colonne timestamp. Entendez-vous le nom sera timestamp?
Donc, pour être clair, le champ doit être nommé exactement "timestamp"?
Le nom n'a pas d'importance, le type de données doit par Horodateur.
OriginalL'auteur Birger
L'erreur que vous obtenez est généralement le cas lorsque:
ET
À Jet, c'est deux "utilisateurs", parce que c'est deux différentes opérations d'édition. La table sous-jacente a été mis à jour par le SQL de mise à jour, alors que les données dans le formulaire de tampon est maintenant obsolète.
La solution habituelle est de forcer une sauvegarde avant de lancer la mise à jour SQL:
Mais si vous utilisez des formulaires de modifier l'enregistrement, vous devez faire toutes les mises à jour dans la forme, plutôt que de recourir à SQL pour faire la mise à jour.
La situation que vous décrivez avec la génération de votre propre séquence doit être fait de cette façon:
utilisateur appuie de NOUVEAU le bouton d'ENREGISTREMENT.
calc prochaine valeur de la séquence et de la stocker dans une variable.
insérer un nouvel enregistrement avec la séquence en valeur par l'intermédiaire d'un INSERT.
4a. si votre formulaire est lié à tous les enregistrements de la table, actualiser les données du formulaire d'édition (en supposant que le NOUVEAU bouton d'ENREGISTREMENT sur le formulaire où l'utilisateur de modifier les données), et l'utilisation de signets de navigation pour passer à la nouvelle année record avec la valeur de la séquence que vous avez stocké dans la variable dans l'étape 2.
4b. Si votre formulaire est pas lié à tous les documents (comme il ne devrait pas être si c'est une base de données bien conçue), vous serait-il suffit de changer la propriété recordsource du formulaire, afin de ne charger que le nouvel enregistrement.
Une autre alternative est d'éviter le SQL d'INSERTION et de requery (ou la réinitialisation de la source) et il suffit d'ajouter un nouvel enregistrement dans un formulaire, définissez le champ séquence sur la nouvelle valeur et immédiatement à l'enregistrer.
Le point clé est que pour que cela fonctionne dans un environnement multi-utilisateur, le dossier doit être enregistré dès que la séquence de valeur est affectée à cela, vous ne pouvez pas laisser le dossier en suspens ne sont pas sauvés, parce que cela signifie que la séquence identique de la valeur est à la disposition des autres utilisateurs, ce qui est juste poser une catastrophe.
Ensuite, il y a quelque chose d'autre se passe. Le point clé est que vous souhaitez modifier vos données dans le formulaire, ou par le biais de SQL. Vous ne voulez pas faire les deux, sauf si vous savez exactement ce que vous faites.
OriginalL'auteur David-W-Fenton
C'est une vieille question, qui j'en suis venu à travers de Google, donc je vais soumettre ma réponse.
Dans le pilote ODBC, assurez-vous de tourner sur des versions de ligne. Si la table est déjà en cours d'Accès, vous devrez les supprimer et re-lier à la source de la table.
Vous devriez être en mesure de dire si vous avez des versions de ligne activée parce que l'Accès devrait ajouter une colonne à votre table appelée
xmin
.Ahh j'étais en train de regarder les étiquettes et il n'a pas montré de sql server - sa question n' (c'est de ma faute). La version de ligne est une option ODBC pour PostgreSQL. Il ressemble à SQL_CONCURRENCY la réponse est dans SQL Server (il mentionne l'ajout d'un horodatage à la table). D'autre part, je pense que Postgres utilise un id interne
oid
.OriginalL'auteur vol7ron
Je voudrais garder une trace de savoir si l'utilisateur a annulé la nouvelle customer_id avec une valeur qui leur est propre. Si elles n'ont pas, alors votre application doit être en mesure de vérifier pour un double droit avant de l'enregistrer et juste de l'auto-incrément de nouveau, et l'utilisateur n'a pas l'esprit en tenant la valeur par défaut. Peut-être même indicateur pour l'utilisateur que vous avez eu à choisir automatiquement une valeur différente.
OriginalL'auteur great_llama
J'ai également eu le même problème. J'ai essayé de mettre à jour dans une table à l'aide de Spring MVC, hibernate et. Dans mon cas la version de la colonne dans la table contient une valeur supérieure à 1( 3) toutefois, la mise à jour des informations dans ma requête de mise à jour avait valeur de la version 1.
OriginalL'auteur Tejbir Singh
Nos problèmes est que l'accès frontal a été d'essayer de sauver un int (oui/non) dans un mssql bits (0/1). La modification de la base de données mssql int champs a travaillé comme un charme.
OriginalL'auteur Dilbert
Je viens de tombé sur une autre situation qui génère cette erreur. Dans une table mysql, j'ai eu deux colonnes de date qui avait initialement valeur par défaut '0000-00-00'. Plus tard, il a été changé à NULL par défaut, mais de nombreuses lignes gardé la valeur '0000-00-00'. J'ai dû réinitialiser manuellement les valeurs NULL pour arrêter l'erreur.
Il a fallu beaucoup de temps pour comprendre ce qui est trigering l'erreur, HTH quelqu'un d'autre.
OriginalL'auteur koriander
Cette erreur peut également être levée si le Serveur SQL de la table contient une colonne datetime2 (dans mon cas, avec la valeur par défaut de sysdatetime()). Changer le type de données de retour d'datetime default current_timestamp cesse de l'erreur.
OriginalL'auteur Dead Red