Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SQL Tabelle mit Access Tabelle durch Abfrage füllen

Begonnen von sellrich, Oktober 11, 2018, 09:24:37

⏪ vorheriges - nächstes ⏩

sellrich

Hallo ihr lieben,

ich habe folgendes Problem :

Durch eine nächtliche Routine in Access werden div. Tabellen gefüllt.
Jetzt möchte ich durch eine Anzahl an Abfragen diese Tabellen in meine neue SQL Datenbank "übertragen"

Dazu habe ich die jeweiligen Tabellen in Access verknüpft und Anfügeabfragen erzeugt.
Die Abfrage nimmt alle Werte aus der Access Tabelle und fügt sie der SQL Tabelle hinzu.

Dies funktioniert zwar mehr oder weniger - dauert jedoch ewig.
Und wenn die Tabelle eine gewisse Größe übersteigt - lädt sich die Abfrage zu Tode.

Meine Frage : Fügen Anfügeabfragen immer die kompletten Datensätze hinzu oder nur die neusten?
Gibt es eventuell eine Alternative/bessere Möglichkeit als eine Anfügeabfrage?

Gruß sellrich

DF6GL

Hallo,

nur zur Frage

ZitatFügen Anfügeabfragen immer die kompletten Datensätze hinzu oder nur die neusten?

Anfügeabfragen fügen immer diejenigen Datensätze an, die durch die Where-Condition definiert werden.

Sobald aber ein Konflikt mit eindeutigen Indizes auftaucht, wird der entspr. DS nicht angefügt.


Lachtaube

Eine Abfrage ohne Kriterien nimmt sich die gesamte zur Verfügung stehende Datenmenge vor.

Bei verknüpften Tabellen müssen alle Daten durch das Nadelöhr DAO-Library gezwängt werden. Mein PostgreSQL-Server (andere SQL-Server können das vermutlich auch) importieren CSV-Daten in Windeseile.
Grüße von der (⌒▽⌒)

PhilS

Zitat von: Lachtaube am Oktober 11, 2018, 10:27:06Bei verknüpften Tabellen müssen alle Daten durch das Nadelöhr DAO-Library gezwängt werden. Mein PostgreSQL-Server (andere SQL-Server können das vermutlich auch) importieren CSV-Daten in Windeseile.
Ja, aber...
Mann sollte dabei bedenken, dass für einen direkten Import von Daten in ein DBMS oft auch der Prozess, in dem das Server-DBMS läuft, Zugriffsrechte auf die zu importierende Datei benötigt. I.d.R. muss diese dafür auf einem lokalen Laufwerk auf dem Server-Rechner liegen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

sellrich

ZitatBei verknüpften Tabellen müssen alle Daten durch das Nadelöhr DAO-Library gezwängt werden.

Also wäre ein erneuter Import der Daten und anschließendes Ausführen der Anfügeabfrage schneller? Das werde ich mal probieren. Allerdings kann ich die Ziel-Tabellen nicht importieren, da diese ja SQL-Tabellen sind. Oder?

Lachtaube

Um genau zu sein, benötigt man einen lokales Programm, das sich mit dem Server verbinden kann. Bei Access werden die Daten durch DAO an die ODBC-Schnittstelle und danach an den ODBC-Treiber weitergeleitet, der, im Fall von PostgreSQL erst dann über die libpq.dll mit dem Server kommuniziert.

Ein lokal installiertes psql oder auch Tools wie HeidiSQL sind im Stande, CSV-Daten schnell (im Sinne von: was das Netzwerk erlaubt) in PostgreSQL-Tabellen zu übertragen. Beide Programme kommunizieren dann direkt mit der libpq.dll.

Nun, da wir aber nicht wissen, um welchen Datenbank-Server es sich hier handelt, noch die Datenmenge und die Netzwerkkonstellation, sowie verwendete Treiber nebst Konfiguration kennen und auch nicht wissen, was der Threadersteller unter ewig versteht, wird man wohl kaum die Stellschraube zur Beschleunigung des Vorgangs finden.
Grüße von der (⌒▽⌒)

PhilS

Zitat von: Lachtaube am Oktober 11, 2018, 12:11:57Um genau zu sein, benötigt man einen lokales Programm, das sich mit dem Server verbinden kann. Bei Access werden die Daten durch DAO an die ODBC-Schnittstelle und danach an den ODBC-Treiber weitergeleitet, der, im Fall von PostgreSQL erst dann über die libpq.dll mit dem Server kommuniziert.
Die von mir genannten Einschränkung gelten dann, wenn man ein serverseitiges Feature (z.B. BULK INSERT (MS-SQL-Server) oder LOAD DATA INFILE (MySQL)) verwendet. Diese sind nochmal wesentlich effektiver, aber eben nicht in allen Situationen anwendbar. - In den meisten Situationen  sollten auch die clientseitigen Alternativen brauchbare Lösungen darstellen.

Zitat von: sellrich am Oktober 11, 2018, 11:52:54Also wäre ein erneuter Import der Daten und anschließendes Ausführen der Anfügeabfrage schneller? Das werde ich mal probieren. Allerdings kann ich die Ziel-Tabellen nicht importieren, da diese ja SQL-Tabellen sind. Oder?
Die Zieltabellen selbst importiertst du üblicherweise nicht, sondern nur die Daten darin. Dies kann auf verschiedenen Wegen erfolgen. Die Anfügeabfragen aus Access sind vermutlich der bequemste, aber auch der am wenigsten performante.

Ggfls. solltest du mehr Informationen zu deiner konkreten Problemstellung liefern.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor