PDA

Vollständige Version anzeigen : Günstigste Vorgehensweise


Koerperklaus
07.07.2006, 06:50
Guten Morgen,

ich habe in einem Praktikum die Aufgabe bekommen eine Datenbank zu erstellen und möchte nun fragen, wie ich am Besten vorgehe.

In dem Betrieb kommen wöchentlich 2 Excel-Tabellen mit mehreren tausend Einträgen, wie automatisiert in die Datenbank eingelesen bzw die älteren durch die neuen aktualisiert werden sollen.

Manuell habe ich die Tabellen erstmal eingelesen, dabei musste ich die EXCEL-Tabellen aber umändern um Leereinträge zu verändern.

Ich habe jetzt die 2 Tabellen und eine zusätzliche zur manuellen Eingabe verknüpft.
Wie gehe ich jetzt am besten vor. Gibt es eine Möglichkeit die Tabellen automatisiert einzulesen und wenn ja, wie?

Und wie löscht man dann unnötige Zeilen und Spalten aus den Tabellen?

Danke erstmal im voraus,

Koerperklaus

J_Eilers
07.07.2006, 07:33
Hi,

Mittels DoCmd.TransferSpreadsheet würde ich die Tabellen einfach in eine Importtabelle holen und dann die Daten mittels SQL aufarbeiten. Ist deine Accesstabelle genauso aufgebaut wie die Exceltabellen?

PS: Kann es sein, dass du Martin heißt?

Koerperklaus
07.07.2006, 07:54
Ich habe die Eceltabellen erstmal bearbeitet, also unnötige Zeilen und Spalten gelöscht.
Danach konnte ich einfach die Tabellen nach Excel exportieren und die Spaltenüberschriften anpassen.
Jetzt habe ich 2 Tabellen in Access, die -abgesehen von den Überschriften und dem anderen Kram der Ursprungstabellen, genau wie diese aussehen.

Die dritte Tabelle ist selbst erstellt, da sie nur manuelle Einträge zulassen soll.

Anhand einer Anforderungsnummer, die Primärschlüssel einer Tabelle ist habe ich sie verknüpft.
Das von die angesprochene Programm ist Freeware oder was ist das?
Die Datenbank soll später möglichst auf mehreren Rechnern gleichzeitig laufen können, wobei nicht wirklich ein Server existiert !?!
Ich heiße übrigens nicht Martin ;)

J_Eilers
07.07.2006, 08:11
TransferSpreadsheet ist eine Methode unter VBA, mit der man Exceltabellen einlesen kann.

Was möchtest du denn jetzt machen? Willst du deinen Datenbestand in den Exceltabellen behalten und diese verknüpfen oder möchtest du in Access den gleichen Datenbestand abbilden und bei Gelegenheit aktualisieren?

Koerperklaus
07.07.2006, 08:14
Die Daten aus den Tabellen sollen in Access übernommen werden, habe ich ja schon gemacht.
Dann sollen diese Daten aber jede Woche wieder aktualisiert werden.
Innerhalb einer Woche wird von 2 unterschiedlichen Abteilungen einmal an der Datenbank und einmal an den Tabellen geeignet.
Diese sollen dann nach einer Woche in der Datenbank aktualisiert werden.

J_Eilers
07.07.2006, 08:38
Also ein Einlesen der Tabellen mit anschließender Aktualisierung der Tabelle?

Vom Prinzip wäre das dein immer noch ein TransferSpreadsheet. Danach kommt erst eine Anfügeabfrage für neue Daten und eine Aktualisierungsabfrage. Danach würde ich die Importtabelle löschen.

Als Ansatz, da weitere Informationen fehlen:

Dim strSQL As String

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "ImportTab", "C:\DeineXLS.xls", False

strSQL = "INSERT INTO AndereTab (Feld1, Feld2, Feld3) "
strSQL = strSQL & "SELECT Feld1, Feld2, Feld "
strSQL = strSQL & "FROM ImportTab LEFT JOIN AndereTab ON "
strSQL = strSQL & "ImportTab.Feld = AndereTab.Feld "
strSQL = strSQL & "WHERE Not ImportTab.Feld Is Null"
DBEngine(0)(0).Execute strSQL, dbFailOnError

strSQL = "UPDATE AndereTab As A INNER JOIN ImportTab As B ON AndereTab.Feld = ImportTab.Feld "
strSQL = strSQL & "SET A.Feld1 = B.Feld1, A.Feld2 = B.Feld2, A.Feld3 = B.Feld3"
DBEngine(0)(0).Execute strSQL, dbFailOnError

DoCmd.DeleteObject acTable, "ImportTab"

Koerperklaus
07.07.2006, 10:48
Nach Rücksprache mit meinem Praktikumsleiter soll es folgendermaßen aussehen.
Einmal die Woche werden 2 Tabellen geschickt.
Diese sollen dann mit den 2 vorherigen Tabellen der Datenbank verglichen werden, Unterschiede zur Vorwoche aufgezeigt bzw. gespeichert werden und danach kann die alte Tabelle erst durch die neue ersetzt werden.
Jetzt bin ich ziemlich durcheinander, weiß nicht wie ich da rangehen soll.
Habe bis letzte Woche noch nie mit Access gearbeitet und soll jetzt sowas machen.

J_Eilers
07.07.2006, 11:36
Dann brauchst du eigentlich nur eine 3 Abfrage, die Änderungen speichert. Sollen die geänderten Daten an eine bestehende Tabelle angehängt werden?

Koerperklaus
07.07.2006, 11:46
Ne, nicht angehängt, nur ausgewertet um Veränderungen zu sehen.
Die alte Tabelle wird danach durch die neue ersetzt

J_Eilers
07.07.2006, 12:14
Das ja noch einfacher. Sollen alle Felder verglichen werden?

Koerperklaus
11.07.2006, 06:25
Ja, eigentlich schon, da vorher nicht klar ist welche Felder aktualisiert wurden und welche nicht.

J_Eilers
11.07.2006, 06:55
Dafür sollte so eine Abfrage reichen:

SELECT
Tab1.*
FROM
Tab1 INNER JOIN Tab2
ON Tab1.ID = Tab2.ID
WHERE
Tab1.Feld1 <> Tab2.Feld1 Or
Tab1.Feld2 <> Tab2.Feld2 Or
Tab1.Feld3 <> Tab2.Feld3

Koerperklaus
11.07.2006, 07:46
Danke, ich werde es mal versuchen.
Wird das denn relativ schnell gehen bei ca. 12000 Zeilen und mehr als 50 Spalten ?

J_Eilers
11.07.2006, 07:52
Vielleicht, vielleicht auch nicht. Ich denke, man wird ein wenig Zeit dafür brauchen, da nicht alle Felder indiziert sind und eben über alle Felder verglichen werden soll.