Ich habe eine Access-Datenbank, die per ODBC mit einem Postgres-Server verbunden ist.
Ich benutze teilweise ADO, um Datensätze zu aktualisieren.
Dabei erhalte ich die Fehlermeldung “Fehler bei einem aus mehreren Schritten bestehenden Vorgang. Prüfen Sie die einzelnen Statuswerte”.
Die Meldung tritt in der Zeile .fields(“quellsprache”) = “German” auf.
Hier der Code, bei dem der Fehler auftritt:
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
With rst
sql = "SELECT u.uebersetzungs_id, a.auftrags_id, a.quellsprache FROM uebersetzungen AS u INNER JOIN auftraege AS a ON u.teilauftrag_zu=a.auftrags_id"
.Open sql, useCN1, adOpenDynamic, adLockOptimistic
Debug.Print .fields("quellsprache")
.fields("quellsprache") = "German"
.close
End With
Hier der Code, der einwandfrei funktioniert:
Einziger Unterschied: Currentproject.Connection statt useCN1
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
With rst
sql = "SELECT u.uebersetzungs_id, a.auftrags_id, a.quellsprache FROM uebersetzungen AS u INNER JOIN auftraege AS a ON u.teilauftrag_zu=a.auftrags_id"
.Open sql, Currentproject.Connection, adOpenDynamic, adLockOptimistic
Debug.Print .fields("quellsprache")
.fields("quellsprache") = "German"
.close
End With
Hier noch, wie useCN1 definiert ist:
Function useCN1() As ADODB.Connection
'Öffnet eine Verbindung sofern sie noch nicht besteht mit Namen "cn1"
If cn1 Is Nothing Then
Set cn1 = New ADODB.Connection
cn1.CursorLocation = adUseClient
cn1.ConnectionTimeout = 60
cn1.Mode = adModeReadWrite
cn1.ConnectionString = pg.getConnString(True, False)
cn1.Open
Set useCN1 = cn1
Else
If Not cn1.state = adStateOpen Then cn1.Open
Set useCN1 = cn1
End If
End Function
Das seltsame ist, wenn ich useCN1 als Verbindung nutze, kommt die Fehlermeldung.
Wenn ich hingegen currentproject.connection verwende, geht alles. Aber ich bin darauf angewiesen, useCN1 zu verwenden.
Ich habe bereits CursorLocation = adUseClient etc. durchprobiert.
Auch das hier hilft nicht: http://support.microsoft.com/kb/269495
Ich habe allerdings eines herausgefunden: Wenn man kein JOIN im Statement hat, funktioniert alles bestens in beiden Varianten. Es scheint vielleicht irgendwie damit zusammenzuhängen, dass ein Update über mehrere Tabellen nicht funktioniert.
Hier mal die Property-Auflistung von useCN1:
Current Catalog elinga 8
Reset Datasource 3
Active Sessions 0 3
Asynchable Commit Falsch 11
Catalog Location 1 3
Catalog Term catalog 8
Catalog Usage 1 3
Column Definition 1 3
NULL Concatenation Behavior 1 3
Data Source Name 8
Read-Only Data Source Falsch 11
DBMS Name PostgreSQL 8
DBMS Version 9.1.11 8
GROUP BY Support 1 3
Heterogeneous Table Support 0 3
Identifier Case Sensitivity 2 3
Maximum Index Size 0 3
Maximum Row Size 0 3
Maximum Row Size Includes BLOB Wahr 11
Maximum Tables in SELECT 0 3
Multiple Storage Objects Falsch 11
Multi-Table Update Falsch 11
NULL Collation Order 2 3
OLE Object Support 1 3
ORDER BY Columns in Select List Falsch 11
Prepare Abort Behavior 2 3
Prepare Commit Behavior 2 3
Procedure Term procedure 8
Provider Name MSDASQL.DLL 8
OLE DB Version 02.00 8
Provider Version 06.01.7601 8
Quoted Identifier Sensitivity 4 3
Schema Term schema 8
Schema Usage 29 3
SQL Support 259 3
Structured Storage 1 3
Subquery Support 15 3
Isolation Levels 1052672 3
Isolation Retention 0 3
Table Term table 8
User Name sebert 8
Pass By Ref Accessors Wahr 11
Transaction DDL 8 3
Asynchable Abort Falsch 11
Data Source Object Threading Model 1 3
Output Parameter Availability 4 3
Persistent ID Type 4 3
Multiple Parameter Sets Wahr 11
Rowset Conversions on Command Wahr 11
Multiple Results 1 3
Provider Friendly Name Microsoft OLE DB Provider for ODBC Drivers 8
Connection Status 1 3
Server Name 10.8.0.1 8
Open Rowset Support 0 3
Accessible Procedures Falsch 11
Accessible Tables Falsch 11
Integrity Enhancement Facility Falsch 11
Outer Join Capabilities 127 3
Stored Procedures Wahr 11
Driver Name PSQLODBC35W.DLL 8
Driver Version 09.03.0100 8
Driver ODBC Version 03.51 8
Like Escape Clause N 8
Special Characters _ 8
Max Columns in Group By 0 3
Max Columns in Index 0 3
Max Columns in Order By 0 3
Max Columns in Select 0 3
Max Columns in Table 0 3
Numeric Functions 0 3
SQL Grammar Support 1 3
Outer Joins Y 8
String Functions 7289 3
System Functions 0 3
Time/Date Functions 1 3
File Usage 0 3
Active Statements 0 3
Password 8
Persist Security Info 11
User ID 8
Data Source 8
Window Handle 3
Location 8
Mode 3 3
Prompt 4 2
Connect Timeout 60 3
Extended Properties DRIVER={PostgreSQL Unicode};DATABASE=ZZZ;SERVER=10.8.0.1;PORT=5432;UID=XXX;PWD=XXX;CA=d;A6=;A7=100;A8=4096;B0=255;B1=8190;BI=0;C2=dd_;CX=1c20402ba;A1=7.4-1 8
Locale Identifier 1031 3
Initial Catalog 8
OLE DB Services -7 3
General Timeout 3
Autocommit Isolation Levels 4096 3
Hier die Properties von Currentproject.connection
Current Catalog
Active Sessions 128
Asynchable Commit Falsch
Catalog Location 1
Catalog Term Database
Column Definition 1
NULL Concatenation Behavior 2
Data Source Name C:\Users\sebert\Desktop\Postgres-Migration\elinga.mdb
Read-Only Data Source Falsch
DBMS Name MS Jet
DBMS Version 04.00.0000
GROUP BY Support 4
Heterogeneous Table Support 2
Identifier Case Sensitivity 8
Maximum Index Size 255
Maximum Row Size 4049
Maximum Row Size Includes BLOB Falsch
Maximum Tables in SELECT 0
Multiple Storage Objects Falsch
Multi-Table Update Wahr
NULL Collation Order 4
OLE Object Support 1
ORDER BY Columns in Select List Falsch
Prepare Abort Behavior 1
Prepare Commit Behavior 2
Procedure Term STORED QUERY
Provider Name MSJETOLEDB40.DLL
OLE DB Version 02.10
Provider Version 04.00.8015
Schema Term Schema
Schema Usage 0
SQL Support 512
Structured Storage 9
Subquery Support 63
Isolation Levels 4096
Isolation Retention 9
Table Term Table
User Name Admin
Pass By Ref Accessors Falsch
Transaction DDL 16
Asynchable Abort Falsch
Data Source Object Threading Model 1
Output Parameter Availability 1
Persistent ID Type 4
Multiple Parameter Sets Wahr
Rowset Conversions on Command Wahr
Multiple Results 0
Provider Friendly Name Microsoft OLE DB Provider for Jet
Alter Column Support 36
Open Rowset Support 2
Cache Authentication Wahr
Encrypt Password Falsch
Mask Password Falsch
Password
User ID Admin
Data Source C:\Users\sebert\Desktop\Postgres-Migration\elinga.mdb
Window Handle 0
Mode 16
Prompt 4
Extended Properties
Locale Identifier 1033
OLE DB Services -2
Persist Security Info
Jet OLEDB:System database C:\Users\sebert\AppData\Roaming\Microsoft\Access\System.mdw
Jet OLEDB:Registry Path Software\Microsoft\Office\15.0\Access\Access Connectivity Engine
Jet OLEDB:Database Password
Jet OLEDB:Engine Type 5
Jet OLEDB:Database Locking Mode 1
Jet OLEDB:Global Partial Bulk Ops 2
Jet OLEDB:Global Bulk Transactions 1
Jet OLEDB:New Database Password
Jet OLEDB:Create System Database Falsch
Jet OLEDB:Encrypt Database Falsch
Jet OLEDB:Don't Copy Locale on Compact Falsch
Jet OLEDB:Compact Without Replica Repair Falsch
Jet OLEDB:SFP Falsch
Jet OLEDB:Compact Reclaimed Space Amount 77824
Jet OLEDB:Support Complex Data Wahr
Jet OLEDB:Bypass UserInfo Validation Falsch
Jet OLEDB:Limited DB Caching Falsch
Jet OLEDB:Bypass ChoiceField Validation Falsch
Autocommit Isolation Levels 4096
Jet OLEDB:ODBC Command Time Out 0
Jet OLEDB:Max Locks Per File 0
Jet OLEDB:Implicit Commit Sync Falsch
Jet OLEDB:Flush Transaction Timeout 0
Jet OLEDB:Lock Delay 0
Jet OLEDB:Max Buffer Size 0
Jet OLEDB:User Commit Sync Wahr
Jet OLEDB:Lock Retry 0
Jet OLEDB:Exclusive Async Delay 0
Jet OLEDB:Shared Async Delay 0
Jet OLEDB:Page Timeout 0
Jet OLEDB:Recycle Long-Valued Pages Falsch
Jet OLEDB:Reset ISAM Stats Wahr
Jet OLEDB:Connection Control 2
Jet OLEDB:ODBC Parsing Falsch
Jet OLEDB:Page Locks to Table Lock 0
Jet OLEDB:Sandbox Mode Falsch
Jet OLEDB:Transaction Commit Mode 0
Jet OLEDB:Password Encryption Provider
Jet OLEDB:Password Encryption Algorithm
Jet OLEDB:Password Encryption Key Length 0
Könnte Multi-Table Update etwas damit zu tun haben? Oder woran könnte es liegen?