Hallo zusammen,
in einem Programm erstelle ich über ADOX.Catalog.Create eine leere MDB und in diese importiere ich über eine SELECT-Anweisung Daten von einer IBM-DB2 Datenbank (immer den Inhalt einer ganzen Tabelle).
Den Import von DB2 nach Access führe ich mit folgender Funktion durch (Kann auch für andere ODBC-Verbindungen verwendet weden):
Public Function ODBCTableToMDB_ASYNCH(sNewMDB As String, sMDBTable As String, _
JetVersion As Jet_EngineVersion, sDSN As String, sDSNUID As String, sDSNPWD _
As String, sODBCTableSpace As String, sODBCTable As String, sReportID As _
String, sTimecode As String, Optional bKillOldMDB As Boolean = False) As _
Boolean
On Error GoTo EndFunc
Dim Con As ADODB.Connection
Dim stmpErrDesc As String
Set Con = New ADODB.Connection
If bKillOldMDB = True And Dir$(sNewMDB) <> vbNullString Then Kill (sNewMDB)
'MDB erstellen
CreateJetDatabase sNewMDB, JetVersion
'** ODBC Tabelle in Acess importieren **
'Verbindung zu Access-Datenbank erstellen
Con.Mode = adModeReadWrite
Con.Open mConnString & sNewMDB
If sODBCTableSpace <> vbNullString Then sODBCTable = sODBCTableSpace & "." & _
sODBCTable
'[ODBC;DSN=" ... der folgenden Zeile ist kein Kommentar, wurde von vbarchiv" & _
"aber so interpretiert:
Con.Execute "SELECT * INTO [" & sMDBTable & "] FROM [" & sODBCTable & "] IN ''" & _
"[ODBC;DSN=" & sDSN & ";UID=" & sDSNUID & ";PWD=" & sDSNPWD & ";];", , _
adAsyncExecute + adExecuteNoRecords
'........
'..........
'An dieser Stelle gebe ich einen UDT zurück um Später den Satus des
' Asynchronen-Imports abzufragen (über Connection.State).
End Function Die Funktion zum Erstellen einer leeren MDB sieht wie folgt aus:
Public Function CreateJetDatabase(DBName As String, Optional JetVersion As _
Jet_EngineVersion = [JET3X = 4 (Access 95 + 97)], Optional LockingMode As _
Jet_LockingMode = PAGELOCKING) As Boolean
On Error GoTo Fehler
Dim strCnn As String
Dim cat As ADOX.Catalog
Set cat = New ADOX.Catalog
strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBName & ";"
'DB erzeugen
cat.Create strCnn
Set cat = Nothing
CreateJetDatabase = True
Exit Function
Fehler:
CreateJetDatabase = False
Err.Raise 1, "Function ""CreateJetDatabase""", "Cant't create MDB '" & DBName & _
"' Error: " & Err.Number & " " & Err.Description
End Function Nun mein Problem: Wenn gerade ein Import (ODBCTableToMDB_ASYNCH) läuft und während dessen ich versuche parallel einen zu starten, bleibt die Ausführung am Punkt. "cat.Create strCnn"
in der Funktion "CreateJetDatabase" stehen und legt erst die MDB an, wenn der zuvor gestartete Import einer anderen Tabelle abgeschlossen ist.
Ist der ADOX.Catalog während des Importes gesperrt? Wie kann ich erreichen das auch wenn ein Import läuft, sofort eine neue Datenbank erstellt wird.
(Bei jedem Import wird eine neue MDB erstelllt, in der nur eine Tabelle der IBM-DB2 importiert wird - Ich greife also nicht auf die Tabelle zu, bei der der Import läuft.) |