Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Salvation am Dezember 03, 2010, 09:01:50

Titel: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 03, 2010, 09:01:50
Hi,

ich möchte mit einer VBA-Programmierung einen Automatischen Import dreier Excel Datein nach Access machen. Dazu habe ich folgenden Code:

Function Excel_to_Access()
On Error GoTo Excel_to_Access_Err

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel2, _
   "DatenTelefonAutonom", "K:\Übungen\Versuche\Automatisierung\DatenTelefonAutonom.xls", True
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel2, _
   "DatenTelefonAutonom", "K:\Übungen\Versuche\Automatisierung\NameVornameTitle.xls", True
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel2, _
   "DatenTelefonAutonom", "K:\Übungen\Versuche\Automatisierung\NameVornameTitleAnrede.xls", True

Excel_to_Access_Exit:
   Exit Function

Excel_to_Access_Err:
   MsgBox Error$
   Resume Excel_to_Access_Exit

End Function


Soabld ich alle drei drin habe, bekomme ich eine Fehlermeldung das Titel nicht in DatenTelefonAutonom.xls vorhanden ist. Kommentiere ich aber NameVornameTitel.xls und NameVornameTitelAnrede.xls aus und lasse es dann nochmal durllaufen, gibt es keine Fehlermeldung.

In Beiden Fällen importiert er mir jedoch nur die erste Tabell (DatenTelefonAutonom.xls).

Nun habe ich dan Code mal gespilttet und aus einem Modul drei gemacht. So das jede Datei ihre eigendes Modul hat, aber auch da wird mir nur die erste Tabelle (DatenTelefonAutonom.xls) importiert.

Wie kann ich es nun hinbekommen, dass ich alle drei gleichzeitig importieren kann?
Und was mir auch noch aufgefallen ist, die Daten werden nicht überschrieben, dies sollte jedoch beim Starten der Datenbank - ich wollte das Modul am Ende in die Autoexec mit einbinden - überschreibt.


Grundgedanke ist:
Aus einer Haupttabelle werden die Daten - also aus einer Abfrage herraus - Zeitgeseuert exportiert und in einer Datei zur verfügung gestellt. Darauf soll nun eine zeite Datenbank zugreifen und die Daten ann importieren, wo dann via Abfrage und Formulare alles gesteuert wird.

Manuell klappt dies soweit. Sprich
- Manuell importieren über Rechtsklick - Import
- Makro zum Importieren
(hier ist jedoch das Problem, wenn ich die Datanbank schließe und wieder öffne, importiert er die Daten, hängt sie aber an die ursprünglichen Daten an, so dass sie sich vermehren.)

Kann mir da vielleicht jemand einen Rat geben?

Vielen Dank schonmal
Salvation


PS: ich habe ACC2003
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Jonny am Dezember 03, 2010, 09:35:56
Hallo,

als Tabellenname hast du immer "DatenTelefonAutonom" also immer in die gleiche Tabelle importieren

deine Exceldateien sind aber unterschiedlich und du gibst an das die Erste Zeile Feldnamen hat.

Wenn jetzt die Feldnamen nicht 100pro identisch sind gibt es Probleme,

Versuche mal für jeden Import eine extra Tabelle zu nehmen.

Dann sehen wir weiter.

Gruß

Johann
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 03, 2010, 09:56:41
Hi,

hups, peinlicher Fehler.
Habs nun angepasst und er holt sie sich nun auch rein. Das muss jetzt nur noch automatisch beim Start passieren.
Hab eben bei den Makros geschaut, aber seh da nur ein ÖffnenModul, wass mir dann aber ja nur den VBA-Editor öffnet. Unter Ausführen gibt es kein AusführenModul. Gibt es da vielleicht auch einen Möglichkeit?

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Wodka43 am Dezember 03, 2010, 10:01:38
Moin,

eine Möglichkeit wäre es, dass du dir ein Startformular erstellst, das beim Öffnen der mdb gestartet wird.
Dann must du nur noch deinen Code in das Beim Öffnen Ereignis des Startformulars einfügen.
Damit umschiffst du auch die Makrokrücke

mfg
Leo
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 03, 2010, 10:23:41
Hi,

klappt wunderbar.
Zwar muss ich nun ein neues Startformular nehmen, da es wohl mit dem Alten nicht so harmoniert. Zudem hat diese schon eine Funktion 'Beim Öffnen'.
Vielleicht hab ich auch nur was falsch eingebunden, werds nochmal versuchen.
Ansonsten gibt es eben ein neues Startformular, wo es eben hat eine Auswahl gibt, was man machen möchte.

Ich bedanke mich recht Herzlich.

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 03, 2010, 10:32:29
Hi,

ein kleines Problem gibt es nun dennoch *grade gesehen hat*
Bei jedem neu öffnen, werden die importieren daten den alten Daten angehängt, was dazu fürht was sie sich vermehren. Also die Einträge sind doppelt... dreifach... je nach dem wie oft man die DB startet, vorhanden.

Kann man dies umgehen?
Oder muss ich nun eine Funktion 'Beim Schließen' sollen die Tabellen wieder leer gemacht werden, einbauen?
Denn die importieren Daten sind immer komplett bzw. die aktuellen Daten die man braucht. Änderungen werden dementsprechend mit reingenommen. Also werden die alten Daten eigentlich nicht mehr benötigt.

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Wodka43 am Dezember 03, 2010, 10:36:33
Hi,

naja wenn die alten Daten nicht mehr gebaucht werden kannst du Sie löschen  ;D

brauchst noch nichmal beim schließen machen.
Höng einfach docmd.DeleteObject acTable ,"TabName" vor deinen Code und die Tabellen werden vorm importieren erstmal gelöscht.

btw: warum liest du die Daten eig. ein wenn du sie danch eh nicht mehr brauchst?

mfg
Leo
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 03, 2010, 10:41:04
Hi,

ist ein wenig wirr, ich weiss.
Das was ich hier habe ist ein Telefonbuch. Welches auf eine weiter Datenbank zugreift udn sich die Daten da wegholt. So bekommen die User des Telefonbuchs die anderen Daten nicht mit. Sondern nur die, die sie haben dürfen.
Was mir aber eben selbst auffiel. Wenn im Telefonbuch änderungen gemacht werden, müssen diese auch rüber in die Haupt DB, dmait die eben bestehen bleiben.

Sprich änderungen sollen in die Haupt DB übertragen werden und die zweiter DB soll ledigklich eine Maske sein, in der man eingeben kann, die sich dann aber die Neuerungen - auch die von ihr aus gemacht wurden - dann wieder importiert.
Hier ist nur die Frage, ob dies überhaupt geht.

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Wodka43 am Dezember 03, 2010, 11:15:44
Hi,

der einfachste Weg wär da sicherlich, dass du die geänderten Daten aus DB2 ebenfalls wieder in excel dateien exportierst und in deiner DB1 importierst.

Wie und wann werden die Daten aus der DB1 exportiert?
Können mehrere User gleichzeitig auf die DB2 zugreifen oder gibt es mehrere Db2s?
Sind die Tabellen denn lokal in den DBs gespeichert oder hast du nen SQL-Server?

mfg
leo
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Jonny am Dezember 03, 2010, 11:23:12
Hallo,

wegen der zweiten DB.
Du bist doch schon in Acc. Da kannst du wahrscheinlich besser eine Verknüpfung zur ersten DB machen und die Daten
über dieses Weg transportieren (z. B. Anfügeabfrage)

Auf jeden Fall erspartst du dir dieses hin un her mit Excel

Gruß

Johann
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 03, 2010, 12:33:58


Huhu,

ZitatWie und wann werden die Daten aus der DB1 exportiert?
Dies sollte Zeitgesteuert irgendwann zischen 2200 und 0400 laufen. Voll Automatisch.


ZitatKönnen mehrere User gleichzeitig auf die DB2 zugreifen oder gibt es mehrere Db2s?
Es müssen mehere drauf zugreifen.


ZitatSind die Tabellen denn lokal in den DBs gespeichert oder hast du nen SQL-Server?
Es gibt ein 'Laufwerk' im Netzwerk wo alles zur Verfügung gestellt wird.


Irgendwie bekomm ichs Gefühl, dass dies nicht umsetzbar ist.
Daher werd ich es mal mit Abfragen versuchen und schauen, wie weit ich damit komme.

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 06, 2010, 08:35:17
Guten Morgen,

ich hab nun ein wenig am Wochenende 'rumprobiert' und komme mit Abfragen nun schonmal auf die HauptDB. Jedoch hab ich nun nur noch das Problem, dass ich, sollten Änderungen in der TelefonbuchDB gemacht werden, dass diese auch an die HauptDB übertragen werden.

Ich habe ein Formular, in der ich eine Nummer eingeben kann. Hier können ledigklich änderungen an den Nummern vorgenommen werden, Personen selbst können nicht angelegt oder verändert werden.

Folgender Code ist der ursprungscode, welcher mit Tabellenverweise funktioniert:


'Schreibt die History und überprüft ob Daten geändert wurden
Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim db As DAO.Database
    Dim rec_adr As DAO.Recordset
   
    If Me.Dirty Then 'prüft, ob der Datensatz geändert wurde
        If MsgBox("Sollen die gemachten Änderungen gespeichert werden ?", vbYesNo, "Speichern?") = vbNo Then
          Me.Undo   ' rückgängig
          ' Cancel = True   ' Ereignisse verhindern
    Else
    Me!Telefonbuch = True
    Set db = Application.CurrentDb
    Set rec_adr = db.OpenRecordset("tbTelefonÄnderung")
    rec_adr.AddNew
    rec_adr.Fields("SatzNr") = Forms.fmTelefonAutonom.Satz
    rec_adr.Fields("PersNr") = Forms.fmTelefonAutonom.PersNr
    rec_adr.Fields("ÄnderungDT") = Now()
    rec_adr.Fields("ÄnderungUS") = CurrentUser()
    rec_adr.Fields("ÄnderungPc") = fOSMachineName()
    rec_adr.Fields("ÄnderungNr") = TelefonNr
    rec_adr.Fields("ÄnderungBemerkung") = Bemerkung
    rec_adr.Fields("ÄnderungJaNein") = Telefonbuch
    rec_adr.Update
    rec_adr.Close
    Set rec_adr = Nothing
    db.Close
    Set db = Nothing
   
    End If
  End If
End Sub



Nun wo ich aber alles über Abfragen steuer, makiert er mit den Bereich :

    rec_adr.AddNew

Kommentier ich diesen aus um zu sehen, wie weit er dann kommt, geht er eine Zeile nach der anderen runter. Die Daten die er anspricht habe ich in einer Abfrage auch in der TelefonbuchDB. Muss ich nun darauf anders zugreifen? Weil als Fehlermeldung gibt er mir folgendes aus:

Laufzeitfehler '3027':
Aktualisieren nicht möglich; Datenbank oder Objekt ist schreibgeschützt.


Was komisch ist, denn als Admin hab ich eigentlich vollen Zugriff und keinen Schreibschutz. Was anderes ist es beim Testuser, der das Recht nicht hat, die Tabellen zu verändern.

Wäre nett, wenn man mir da nochmal einen kleinen Tipp geben könne.

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: database am Dezember 06, 2010, 09:17:52
Hallo,

ZitatNun wo ich aber alles über Abfragen steuer
Set rec_adr = db.OpenRecordset("tbTelefonÄnderung")
ist tbTelefonÄnderung ein Tabelle oder eine Abfrage?
Wenn es sich um eine Abfrage handelt, an der mehr als eine Tabelle beteiligt ist kannst nicht so ohne Weiteres reinschreiben.
Wenn nicht, versuch mal:
Set rec_adr = db.OpenRecordset("tbTelefonÄnderung", dbOpenTable)

Der Zugriff auf die Steuerelementsauflistung eines Formulars stimmt nicht
rec_adr.Fields("SatzNr") = Forms.fmTelefonAutonom.Satz
sondern
rec_adr.Fields("SatzNr") = Forms!fmTelefonAutonom!Satz

rec_adr.Fields("ÄnderungNr") = TelefonNr
Wenn das Formularfelder des aktuellen Formulars sind, dann Me!TelefonNr verwenden

ZitatDatenbank oder Objekt ist schreibgeschützt
Hast du oder besser dein Windows-Benutzerkonto volles Schreib- und Leserecht auf dem Verzeichnis, in dem sich die DB befindet?

Grüße
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 06, 2010, 10:54:00
Wieder zurück zur Ursprungsidee.

Ich soll es wirklich mit dem Export und Import versuchen. Wir haben nun jedoch eine kleine Grundidee. Es geht lediglich darum die HauptDB so zu konfigurieren, dass nur die Daten sichtbar sind, die die TelefonbuchDB benötigt. Dies kann man schön über eine Abfrage steuern, welche in der TelefonbuchDB vorhanden ist. Ich hab dann auch schön Zugriff auf alle Daten. Ich kann auch Änderungen vornehmen. Nur da gibt es schon wieder ein Problem.

Ich selbst tu mich mit dem Export-Import auch ein wenig schwer, da ich wohl generell Daten überschreiben würde. Oder gibt es eine Möglichkeit, da beim Schließen der DB die Daten drin bleiben und wenn ich sie öffne, er die zu importierenden Daten nochmal reinholt und sie in der DB anhängt. Die Identischen Daten können überschrieben werden, jedoch sollen die Änderungen bis zum Export aus fer TelefonbuchDB bestehen bleiben. Hinzu kommt da dann, dass der Export aus der HauptDB um 1600 starten soll und die TelefonbuchDB soll sich die Daten gleich holen und von dieser gibt es dann um 2300 einen Export, welchen sich die HauptDB dann gleich holen soll. Sprich es soll eine Art kreislauf entstehen. Dabei werden immer wieder sechs Dateien Exportiert und Importiert. Nur wie gesagt, vermehren sich die Daten beim Neustarten der Tabelle, was also heißt, dass ich sie nicht mehr Schließen leeren kann, da ja Änderungen drin sind. ggf Müssten die Änderungen in die Excel, was aber wieder kompliziert wird. Also sollten die Daten überschrieben werden, die Identisch sind und die anderen bleiben dazwischen bestehen.

Das wäre der Grundgedanke im Moment.

Nur es geht nur darum, dass die Haupt nicht komplett einsehbar ist und das verhinder ich mit der Abfrage, durch die ich eben nur das reinhole, was gebraucht wird. Nun die anderen sechs Tabellen greifen mit dem Tabellenverknüffungsmanager direkt auf die HauptDB zu. In meiner TelefonbuchDB werden alle änderungen eingetragen. Nun wäre es ja eigentlich einfacher, dies zu nutzen und es zu schaffen, dass durch den Tabellenverknüpfungsmanager - falls möglich - die Daten an die HauptDB übertragen werden. So umgeh ich den Export und Import und es ist egentlich immer gleich aktuell.

Geht sowas überhaupt? Oder denk ich grade wieder zu kompliziert?
Nett wäre auch, wenn man mir - falls es wirklich beim Export und Import bleiben muss - ich werd die andere Idee mit einbringen, sofern die umsetzbar ist - dass ich diese dann weiter verfolgen kann. Sprich, ob es eine Möglichkeit gibt, identische Daten zu überschrieben und Änderungen beizubehalten.

Vielen Dank schonmal.

PS: @database: Als Admin ist alles offen. Lediglich die User sind dann unterteilt, wo dann die Rechte wohl angepasst werden müssten. Nur die Idee - alles durch Abfragen zu steuern - wurde eben verworfen.
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: database am Dezember 06, 2010, 12:22:28
Hallo,

also was ich nicht ganz auf die Reihe kriege ist das gewürge mit den Tabellenverknüpfungen zwischen den beiden DBs.
Wenn du die Tabellen von A nach B verknüpfst und umgekehrt andere Tabellen von B nach A kannst du doch ALLE Tabellen auch in einer einzigen DB halten.

Da sich nach deinen Angeben die DB in einem Netzlaufwerk befindet sollte die Berechtigung zu Schreiben auf Verzeichnisebene zwar relativ einfach zu regeln sein (NTFS machts möglich)
aber da gibt es mit Access auch ganz gute und brauchbare Möglichkeiten einen oder mehrere bestimmte Benutzer vom Lesen oder Schreiben aus- oder einzuschließen.
Sprich auf Formularebene wird geregelt, wer was darf und wer was nicht - Franzi sieht die Nummern, die mit 1 beginnen und Hugo jene, die mit 3 beginnen.

Sorry, aber mir kommt das alles ziemlich VERkompliziert vor

Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 06, 2010, 12:29:49
Hi,

da bist du nicht alleine. Ich finds auch komplizierter als es ist, aber Chef möchte es gerne so haben.
Ich hab es nun zwar so weit, dass ich nun exportieren und importieren mit einer Geplanten Task anschupse, aber da Access leider Passworteingebe fordert, hängt es sich daran schon wieder auf.

Zudem denke ich, dass wenn ich von der Telefonbuch exportiere und in die Haupt importiere, die Verknüpfungen wegfallen.

Wie gesagt, einfach finde ich es schon, dass die Datenbanken so verknüpft sind, dass der Datenaustausch in beide Richtungen geht und das Zeitnah. Was die Verknüpfungen da angeht, sind es nur die sechs Tabellen, die dann verknüpft sind. Die andere fällt durch die Abfrage raus.

Entschuldige bitte, dass es so ein wirr warr ist.

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: database am Dezember 06, 2010, 12:49:04
Hallo,

ZitatIch finds auch komplizierter als es ist, aber Chef möchte es gerne so haben
Diese Misere kenn ich - ist genau nix wert.

Sicher kann man von links nach rechts Daten importieren, exportieren, replizieren und was weiß der Teufel noch alles anstellen.
Fakt ist aber, dass eine sauber ausprogrammierte Mehrbenutzerlösung mit FE und BE nicht nur leistungsstärker ist sondern auch sicherer ist als jedes Herumgedönse.

Wenn du nun auf der DB zum Öffnen ein Passwort vergeben hast, ist's mit Zugriff von aussen (Task) eh schon vorbei.
Wenn du aber auf Formularebene bestimmst dass ein bestimmter User nur bestimmte Daten zur Ansicht bekommt, dann sieht dieser nichts anderes ob er will oder nicht - die zugrundeliegende Abfrage
wird keine Daten liefern, die er nicht sehen soll. Also OHNE Import und Export - wobei diese Vorgehensweise ja auch noch zu mehrfacher Datenhaltung führt was es m.E. zu verhindern gilt.

Die Tabellen vor einem Benutzer zu verbergen stellt kein Problem dar, das Datenbankfenster ganz zu verbergen auch nicht,
das gesamte FE vor Änderung zu schützen ist ein klax - drum verstehe ich den Aufwand eigentlich nicht - auch wenn's der Chef nicht verstehen sollte.
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 06, 2010, 12:57:40
Hi,

danke. Ich werd nochmal versuchen es so zu erörtern. Weil je mehr ich 'probiere' - ich bin ja leider auch nur eine Anfängerin - um so mehr wird mir schon klar, das die Redundanz nicht mehr gewahrt wird. Was anderes - nur leider haben wir es bieher nur angesprochen und mal probiert, sind aber gescheitert - wäre es, wenn alles über eine Master-Slave-Geschite in MySQL laufen würde. Ich könnte mir vorstellen, dass es da sicherlich umsetzbar ist. aber nicht in Access, wo ich es irgendwie immer wieder hinbekomme, dass ich eine Datenvermehrung habe.

Kann man nichts dran machen. Ich bedanke mich für die nette Hilfe.

LG Salvation
Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: database am Dezember 06, 2010, 13:08:50
Hallo,

ich wollte dich aber mit meiner Meinung nicht ganz entmutigen - sicher nicht!

ZitatMaster-Slave-Geschite
...kenn ich auch allerdings in einem anderen Zusammenhang  ;)
Gehe davon aus, dass du Frontend und Backend meinst.

Zur Sache mit MySQL - es wird deswegen nicht einfacher - und wenn schon würde ich PERSÖNLICH zu MS-SQLServer raten.
Redundante Daten zu haben liegt nicht daran, dass Access verwendet wird, das sigt am Konzept und an der manglhft gestalteten Datenhaltung - tut mir leid, wenn ich das so hart formulieren muss.
Da Änder auch ein DB-Server nix daran!

Zitatwo ich es irgendwie immer wieder hinbekomme, dass ich eine Datenvermehrung habe
Wenn du damit andeuten möchtest dass du Duplikate der Datensätze hast - tja da hat dann der Datenimport sein Übriges getan.
Um das zu vermeiden musst du die Daten von einem Import oder Export ausschließen, die am Ziel bereits vorhanden sind.
Und das erledigt man am Besten mit eine Anfügeabfrage, in der man das Primärschlüsselfeld der Quelle mit ---  NOT IN (SELECT Primärschlüssel FROM Zieltabelle) einschränkt.

Titel: Re: Automatischer Import von mehreren Excel-Tabellen nach Access
Beitrag von: Salvation am Dezember 06, 2010, 13:20:22
Hi,

Keine Sorge, entmutigt bin ich deswegen nicht, wenn vielleicht ein wenig... hm, enttäuscht, dass man da net weiter kommt. Irgendwie möchte man ja doch ein Ergebniss haben.

Zum Thema SQL, da kenn ich bisher nur MySQL, daher ist es dass, was ich dann auch wohl erwähne und wie gesagt, Angesprochen und 'Anprobiert' aber noch nicht weiter gekommen. Was das hart Formulieren angeht. Tja, da hab selbst ich als anfänger schon die Hände über den Kopf geschlagen. Ich bekomme ja auch nur Datenbanken vorgelegt, die ich dann verbessern soll oder ggf. was neues daraus zaubern soll. Ich hab da auch schon so manches Mal am liebsten die Frage stellen wollen, wer das verzapft hat. Aber als Praktikant ist man dann doch lieber ruhig.

Mal sehen wie es weiter geht.

LG Salvation