2010-11-28 13 views
1

ein Re-Cord Dieser Code MDF- auf verknüpften Tabellen arbeitet Bearbeitung basiert in DAO/MDB-DatenbankDAO zu .mdb, zu ADO Vergleich

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

Der Code umgewandelt wurde auf einer SQL Server-Datenbank ado und es ist fehlgeschlagen mit einer Fehlermeldung:

Laufzeitfehler ‚-2147467259‘ (80004005)‘: Kann einfügen oder aktualisieren Spalten aus mehreren Tabellen nicht.

Jedoch scheint es, zu arbeiten, wenn es wie so verändert wird:

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

Ist dies eine normale Art und Weise die Dinge mit SQL Server zu tun, oder gibt es eine Gotcha zu. Ich frage, weil, als ich versuchte, eine Lösung zu finden (bevor ich die extra update-Anweisung einfügte) änderte ich den Recordset-Typ zu batchoptimistic und ich habe keine Fehler message, aber nur eine Tabelle Datensatz wurde bearbeitet.

+0

Was genau sagt die Fehlermeldung? – Heinzi

+0

@Heinzi, Sorry, ich hätte das tun sollen, ich habe die Frage bearbeitet, um die genaue Fehlermeldung einzufügen. – jjb

Antwort

2

Anscheinend ist die Datenquelle Ihres Re-Cord-Sets ein SQL, das Daten aus mehreren Tabellen zurückgibt. Ja, es ist normal, dass Sie nur jeweils eine Tabelle aktualisieren können. Wenn Sie Werte aus mehreren Tabellen in einem einzelnen, atomaren Schritt aktualisieren möchten (damit keine andere Clientanwendung den "Zwischenwert" lesen kann, wobei eine Tabelle geändert wird, die andere jedoch nicht), müssen Sie use a transaction.

+0

Danke, ja, die Transaktionen sehen jetzt notwendiger aus , da es jetzt nicht nur 1 Update ist, wie es im DAO-Szenario war. Aber ansonsten bin ich froh zu wissen, dass es ein guter Weg ist, es zu tun – jjb