ODBC: ADO verursacht Fehlermeldung

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?

kommt schon mal nicht von PG.

Es scheint vielleicht irgendwie damit zusammenzuhängen, dass ein Update über mehrere Tabellen nicht funktioniert.

Ich sehe nirgends ein Update.

Könnte > Multi-Table Update > etwas damit zu tun haben?

Ich sehe kein Multi-Table-Update.

Oder woran könnte es liegen?

Steht vielleicht im Log von PG. Ansonsten ist das jetzt nicht wirklich ein PG-Problem, zumindest nicht von der gezeigten Fehlermeldung her.


Andreas

Das .update habe ich mir gespart. Gemeint ist, dass schon die Zuweisung zum Feld nicht funktioniert.

Multi-Table Update: Siehe Property-Auflistungen für useCN1 und currentproject.connection. Da kommen die jeweils drin vor. Einmal mit “true”, einmal mit “false”.

Liegt sicherlich irgendwie am ODBC-Treiber für Postgres. Der Server selbst scheint nicht das Problem zu sein.

Eine Idee?

Welche Logfiles wären sehenswert?

Schrieb ich doch, die von PG. Aber vermutlich steht da - nix.