collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 54
  • Punkt Versteckte: 2
  • Punkt Mitglieder: 8
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13804
  • stats Beiträge insgesamt: 63513
  • stats Themen insgesamt: 8607
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Datenimport in einem Formular  (Gelesen 93 mal)

Offline Micharius

  • Access-User
  • *
  • Beiträge: 51
Datenimport in einem Formular
« am: Dezember 06, 2017, 15:21:02 »
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
 

Offline steffen0815

  • Access-User
  • *
  • Beiträge: 90
Re: Datenimport in einem Formular
« Antwort #1 am: Dezember 06, 2017, 15:38:09 »
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
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1600
Re: Datenimport in einem Formular
« Antwort #2 am: Dezember 06, 2017, 15:57:32 »
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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Micharius

  • Access-User
  • *
  • Beiträge: 51
Re: Datenimport in einem Formular
« Antwort #3 am: Dezember 06, 2017, 16:10:02 »
Hi Steffen

Zitat
Warum ä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
 

Offline Micharius

  • Access-User
  • *
  • Beiträge: 51
Re: Datenimport in einem Formular
« Antwort #4 am: Dezember 06, 2017, 16:24:37 »
@Beaker s.a.

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

Herzlichen Dank!

Micharius
« Letzte Änderung: Dezember 06, 2017, 17:35:36 von Micharius »