Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Datenimport in einem Formular

Begonnen von Micharius, Dezember 06, 2017, 15:21:02

⏪ vorheriges - nächstes ⏩

Micharius

Hallo zusammen

Von einem externen Link kann ich eine XML Datei abrufen, deren Inhalt ich wunderbar mit meiner Datenbank verknüpfen kann. Der Zugriff ist read only, d.h. der Benutzer müsste sich stets zuerst die aktuellen Daten über eine Schnittstelle beim Anbieter eines Projektmangement-Tools abholen. Diesen Prozess, das heisst der Import der Datei und überschreibe der bestehenden Datei habe ich selber mit VBA hingekriegt.

Dargestellt soll das Ganze natürlich nun in einem Formular. Wenn ich ein Formular basierend auf dieser Tabelle öffne, und z.B. mittels Button die Daten frisch abhole möchte kann ich die Tabelle jedoch nicht aktualisieren, da das Formular diese blockiert. Gibt es einen Weg, die Tabelle zu "entblocken", die Tabelle frisch zu schreiben und danach wieder zu laden? Oder sollte ich den Benutzer einfach die Daten aktualisieren lassen, und anschliessend das auf der Tabelle beruhende Formular öffnen?

Ergänzend hier noch der Code dazu - ist noch im Entwurfsstadium. Verbesserungsvorschläge nehme ich natürlich dankend entgegen.

Private Sub Befehl181_Click()
'Variablen setzen
Dim cdb As DAO.Database
Set cdb = CurrentDb

'Hier ändere ich einen Feldwert auf Text, weil die Daten im xml auch als Text kommen
cdb.Execute "ALTER TABLE tblSourceProjekte ALTER COLUMN No Text(25)"
Set cdb = Nothing

'Tabellennamen ändern, da in der XML Datei automatisch der Tabellennamen mit Project importiert wird
DoCmd.Rename "Project", acTable, "tblTimelogProjekte"
DoCmd.SetWarnings False

'Ganzen Inhalt der Tabelle löschen
DoCmd.RunSQL "DELETE * FROM Project"
DoCmd.SetWarnings True

'XML von Source importieren
Application.ImportXML _
DataSource:="https://xxx.xxx.com/xxx/service.asmx/GetProjectsRaw?siteCode=870744a76f9e4de9a9e135f77&apiID=XXX&apiPassword=XXX&projectID=0&status=-2&customerID=0&projectManagerID=0", _
ImportOptions:=acAppendData

'Wieder umbennen
DoCmd.Rename "tblSourceProjekte", acTable, "Project"

'Feld in Zahl umwandeln, sonst kann ich nachher nicht das Feld mit meiner DB joinen
Set cdb = CurrentDb
cdb.Execute "ALTER TABLE tblTimelogProjekte ALTER COLUMN No LONG"
Set cdb = Nothing

End Sub


Beste Grüsse

Micharius

steffen0815

Hallo,
das allgemein kann es nur bei Tabellen(Struktur)Änderungen zu Sperrungen kommen.

Warum änderst du Tabellennamen und Spalten zur Laufzeit? So was macht man (normalerweise) überhaupt nicht!
Gruß Steffen

Beaker s.a.

Hallo Micharius,
Ich würde das Form mit leerer RecordSource öffnen, im Ereignis
"Form_Load" den Import durchführen und anschliessend erst die
RecordSource setzen.
Natürlich kannst du auch beim Button zuerst die RecordSource
löschen und nach dem Import wieder setzen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Micharius

Hi Steffen

ZitatWarum änderst du Tabellennamen und Spalten zur Laufzeit? So was macht man (normalerweise) überhaupt nicht!
Wenn ich das XML importiere, heisst die importierte Tabelle immer "Projects". Habe sowohl beim manuellen importieren wie auch via VBA keine Möglichkeit gefunden, dies anzupassen. Der Name ist in der XML Struktur so vorgegeben, und die Quelldaten kann ich nicht auf meine Schreibweise anpassen.

Dann gibt es noch das Problem, das ein Feld / Spalte "No" ganz wenige Datensätze mit Text enthält. Irgendwelche uralte Daten, die ich eigentlich gar nicht brauche. Wenn ich diese Datensätze jedoch in eine bestehende Tabellenstruktur mit einem Feld "Zahl" importiere, kriegt der Benutzer eine Fehlermeldung + plus eine zusätzliche Tabelle mit Importfehlern. Belasse ich das Feld auf Text kann ich es später aber nicht mit meiner DB verjoinen. Deshalb die Umstellung des Felds auf Text für den Import, dann wird alles schön importiert ohne Fehlermeldung. Dann die Umwandlung auf Zahl, welche natürlich die Datensätze mit Text zerschiesst, was mir aber egal sein kann, weil sie uralt sind und nicht mehr benötigt werden.

Dem erfahrenen Access-Entwickler wird sich vermutlich das nackte Grauen einstellen ab so einem Vorgehen, aber mit meinem gegenwärtigen Wissen habe ich keine andere Lösung gesehen...

Gibts aber keine andere Lösung für die blockierte Tabelle werde ich mir etwas einfallen lassen. Tabelle zuerst aktualisieren, und dann die Form mit Datensatzquelle öffnen.

Grüsse

Micharius

Micharius

#4
@Beaker s.a.

Noch während ich schrieb...genau was ich gesucht habe, es funktioniert!

Herzlichen Dank!

Micharius