2010-11-28 74 views
1

Ce code édition d'un jeu d'enregistrements basé sur les tables jointes travaille dans DAO/base de données .mdbDAO à .mdb, ADO à .MDF comparaison

 RS.Edit 
      RS.fields("fieldA").value = 0 'in table A 
      RS.fields("fieldB").value = 0 ' in table B     
    RS.Update 

Le code a été converti en forme de procès dans une base de serveur SQL et il a échoué avec un message d'erreur:

erreur d'exécution « 2147467259 » (80004005) »: Impossible d'insérer ou de colonnes de mise à jour de plusieurs tables.

Cependant, il semble fonctionner que si elle est modifiée comme ceci:

  RS.fields("fieldA").value = 0 'in table A 
    RS.Update 
      RS.fields("fieldB").value = 0 ' in table B     
    RS.Update 

Est-ce une façon normale de faire les choses avec le serveur SQL ou est-il un Gotcha à elle. Je demande parce qu'en essayant de trouver une solution (avant que je mette dans l'instruction supplémentaire de mise à jour) j'ai changé le type d'ensemble d'enregistrements en batchoptimistic et je n'ai aucun message d'erreur mais seulement l'enregistrement d'une table a été édité.

+0

Que dit exactement le message d'erreur? – Heinzi

+0

@Heinzi, Désolé, j'aurais dû faire cela, j'ai édité la question pour mettre dans le message d'erreur exact. – jjb

Répondre

2

Apparemment, la source de données de votre jeu d'enregistrements est un SQL renvoyant des données de plusieurs tables. Oui, il est normal que vous ne puissiez mettre à jour qu'une table à la fois. Si vous souhaitez mettre à jour les valeurs de plusieurs tables en une seule étape atomique (afin qu'aucune autre utilisation client ne puisse lire la "valeur intermédiaire", où une table est modifiée mais pas l'autre), vous devez use a transaction.

+0

Merci, oui transactions maintenant semblent plus nécessaires car il ne s'agit pas maintenant 1 seule mise à jour comme il était dans le scénario DAO. Mais sinon, je suis heureux de savoir que c'est une bonne façon de le faire – jjb