[Access] Verknüpfte Tabelle während Zugriff aktualisieren

Alex777

Mitglied
Hallo zusammen! Ich hoffe es sind alle gesund ;-)

Ich habe in meiner Datenbank eine .csv Datei als Datenquelle. Diese würde ich gerne als verknüpfte Datenquelle anlegen und die .csv Datei mindestens einmal am Tag ersetzen, damit die aktuellsten Daten in der DB zur Verfügung stehen.

Das Problem ist aber, dass die Datei nicht ersetzbar ist, wenn Access darauf zugreift.
Auch ein manueller Import über DoCmd.RunImportExport funktioniert nicht, da fast immer ein User in der DB ist und die Daten der Tabelle verwendet.

Meine Frage: Gibt es hier eine Möglichkeit, die Datei von Access quasi nur lesend öffnen zu lassen?

Meine Quelldatei heißt Klient_Medikation.csv und meine verknüpfte Tabelle heißt tblMedikation.

Vielen Dank im Voraus!
 
Ich rate dir, die Tabelle zu importieren. ist auch schneller, als wenn dauernd Leute darauf zugreifen müssen.
 
Hey Yaslaw,

das mache ich aktuell auch so. Aber auch da habe ich das Problem, dass ich erst alle User aus der DB schmeißen muss um den Import dann ausführen zu können.
Mir wäre sehr geholfen, wenn ich den Import ausführen könnte, während die Daten benutzt werden. Die User müssen die Daten nur lesen können. Ich verwende die Daten als Datensatzquelle für ein Kombi-Feld.
 
Kannst du mir das erklären? Ich führe im Moment die DoCmd.RunSavedImportExport-Methode aus. Diese überschreibt dann die aktuelle Tabelle "tblMedikation".
Ist das so nicht richtig?
 
Nope.
Sauberer Vorgang:
Du hast eine Stage-Tabelle mit der Struktur der Quelle (ev. sogar alle Felder als Text).
Zudem eine Abfrage, die die Daten ins Endformat wandelt (cast vom Text zum gewünschten Type, zusätzliche Daten aus anderen Tabellen, etc) und in die Zieltabelle schreibt
  • Leeren der Stagetabelle (nicht löschen!) DELETE * FROM stg_my_data
  • Importieren mit DoCmd.TransferSpreadsheet(acImport, ...)
  • Ausführen der Anfügeabfrage
Kaum löschst du Tabellen und erstellst sie neu, hast du Probleme wärend dem Betrieb

Nachtrag:
Hab mich grad erinnert, ich hatte mal ein Tutorial dazu geschrieben.
https://wiki.yaslaw.info/doku.php/vba/tutorials/importwithstage
 
Hey Yaslaw,

an der Stelle mal ein dickes Danke! Ich quäle mich mit dem Vorgang nun schon seit über einem Jahr und nun läuft es endlich sauber und fehlerfrei! Das hat mir sehr geholfen.

Abschließen hier mein Code, mit dem es funktioniert.

Visual Basic:
Private Sub butMedImport_Click()
'Prüfen ob Quelldatei vorhanden
If Dir("\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv") <> "" Then
'Daten löschen
CurrentDb.Execute "delete * from tblMedikation"
'CSV einlesen
DoCmd.TransferText acImportDelim, "IN_TBLMEDIKATION", "tblMedikation", "\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv", True
'Infobox Daten aktualisieren
Me!txtLastUpdate.Caption = "Letzter erfolgreicher Import: " & CurrentDb.TableDefs("tblMedikation").LastUpdated
'Quelldatei löschen
Kill "\\server\Daten\07. Pflege\Medikation (Klienten) für Datenbank.csv"
Else
MsgBox "Keine Datei zum Import vorhanden!"
End If

End Sub
 
Zurück