Zum Inhalt springen

neu: Zugriff auf Oracle-DB über ODBC mit DAO in ACCESS-Frontend


ipu

Empfohlene Beiträge

Hallo zusammen,

sorry, einmal Enter und schon is passiert. Hier nun die komplette Anfrage!

Also:

bis vor kurzem hatte ich noch eine ACCESS-DB mit einem ACCESS-Frontend. Jetzt wollen wir die Daten in Oracle verwalten. Das ACCESS-Frontend würde ich aber gerne weiternutzen, da da u.a. ein Datenimport programmiert ist. Datenimport heißt, dass ich mittels VBA die Daten aus einer weiteren ACCESS-Datebank in diese mein ACCESS-Datenbank schaufel. Der DB-Zugriff etc. ist mit DAO programmiert.

Mein erster Gedanke war, die ODBC-Schnittstelle zu benutzen und die Tabellen darüber zu verknüpfen. Daten anzeigen, aktualisieren und löschen funtkioniert auch sehr gut mit einer guten Perfomance. Nun würde ich auch gerne den Datenimport nutzen. Problem dabei ist, dass ein Hinzufügen eines Datensatzes mit "rs.AddNew" mindestens 10 sec. dauert, sprich "zu lang!!".

Mit dem ACCESS-Backend brauchte der Import ca. 3 min., mit dem Oracle-Backend habe ich den Import nach 1/2 Stunde abgebrochen.

1. Frage: woran kann das liegen, dass das Hinzufügen von Datensätzen so lange dauert? Gibt es da eine Lösung?

Nachdem ich da erstmal nicht weitergekommen bin, habe ich versucht, beim Import eine Verbindung direkt aufzubauen. Folgender Quellcode zeigt, was ich programmiert habe:

Dim connKTR As Connection

Dim wsODBC As Workspace

Dim rs As Recordset

Set wsODBC = CreateWorkspace("[Name ODBCVerbindung]", "[Name Oracle-DB", "[passwort]", dbUseODBC)

' Set connKTR = wsODBC.OpenConnection("tumreg", dbDriverNoPrompt, False, "ODBC;DNS=tumreg")

Set connKTR = wsODBC.OpenConnection(Name:="tumreg_odbc", _

options:=dbDriverNoPrompt, _

ReadOnly:=False, _

Connect:="ODBC;DSN=tumreg")

'Set rs = connKTR.OpenRecordset("select min(id_orga) as MinIDOrga from sys_orga_test")

Set rs = connKTR.OpenRecordset("sys_orga_test", dbOpenDynamic)

rs.AddNew

rs!ID_ORGA = 222

rs.Update

Ausgabe der Test-Daten klappte prompt, beim Test-Hinzufügen eines Datensatzes bekam ich folgende Fehlermeldung:

"Laufzeitfehler 3027: ... Datenbank oder Objekt ist schreibgeschützt."

Das verstehe ich nicht.

2. Frage: hat zu diesem Problem jemand eine Idee?

Vielen Dank im Voraus,

Viele Grüße von ipu

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 11 Monate später...

Problem gelöst, s. auch http://support.microsoft.com/?scid=kb;de;209943&spid=1265&sid=276:

Dim connKTR As Connection

Dim wsODBC As Workspace

Dim rs As Recordset


Set wsODBC = CreateWorkspace("[Name Connection]", _

"[Name ODBC-Connection]", "[Passwort]", dbUseODBC)


Set connKTR = wsODBC.OpenConnection(Name:="[Name ODBC-Connection]", _

options:=dbDriverCompleteRequired, _

ReadOnly:=False, _

Connect:="ODBC;DSN=[Name ODBC-Connection]")

Programmiert mit DAO

Der Datenimport (s. http://forum.fachinformatiker.de/datenbanken/79678-neu-zugriff-oracle-db-ueber-odbc-dao-access-frontend.html?highlight=odbc) beschleunigt sich dadurch auch um ein vielfaches. Am längsten dauert ein Einfügen in eine Tabelle mit vielen Datensätzen. Da habe ich noch nicht herausgefunden, woran das liegt.

Grüße von ipu

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo,

verstehe ich das richtig, du fügst zu sys_orga_test datensätze hinzu? is das eine tabelle im data dictionary die ich nicht kenne, weil die mit sys_beginnt?

versuche mal, die aktuelle session mittels trace zu verfolgen.

EXECUTE dbms_support.start_trace_in_session (deine_sid,deine_seriaL);

du kannst dann sehen, was wirklich im hintergrund geschieht, und warum inserts in grosse tabellen so dauern - hast du da zufällig indexes drauf?

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

hallo,

verstehe ich das richtig, du fügst zu sys_orga_test datensätze hinzu? is das eine tabelle im data dictionary die ich nicht kenne, weil die mit sys_beginnt?

Nein, das ist eine von mir erstellte Tabelle mit Daten über die DB.

versuche mal, die aktuelle session mittels trace zu verfolgen.

EXECUTE dbms_support.start_trace_in_session (deine_sid,deine_seriaL);

du kannst dann sehen, was wirklich im hintergrund geschieht, und warum inserts in grosse tabellen so dauern

Das kann ich aber nur in Oracle direkt, oder? Der Zugriff erfolgt über ACCESS als Frontend mit VBA und der ODBC-Schnittstelle und verknüpften Tabellen.

Einen DS über ein Formular einfügen dauert "normal schnell", einfügen direkt in den Tabellen geht ebenfalls "normal schnell". Was lange dauert ist das Einfügen mit VBA. Bisher habe ich den Connect zur DB mit "Set db=CurrentDb" durchgeführt. Da dauerte das Einfügen eines DS in eine Tabelle mit ca 430.000 DS ca 1,5 Minuten. Mit einem ODBC-Workspace etc. ging das schon wesentlich schneller: Dauer 18 Sekunden. In eine leere Tabelle einfügen dauerte 0 Sekunden. Die 18 Sekunden sind zum vorherigen ein großer Fortschritt. Toll wäre natürlich 0 Sekunden. Aber da habe ich bisher, wie gesagt, noch keine Idee.

- hast du da zufällig indexes drauf?

Ja, aber nur für den PK.

Grüße von ipu

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...