ipu Geschrieben 20. Juni 2005 Teilen Geschrieben 20. Juni 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ipu Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 23. Mai 2006 Teilen Geschrieben 23. Mai 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ipu Geschrieben 23. Mai 2006 Autor Teilen Geschrieben 23. Mai 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.