September 23, 2021, 12:58:44

Neuigkeiten:

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


Mit VBA eine Tabelle im Backend erstellen über Frontend

Begonnen von TerraAOC, Juni 08, 2021, 07:47:38

⏪ vorheriges - nächstes ⏩

TerraAOC

ZitatDie aktuelle "Objekt oder With Blockvariable nicht festgelegt" Fehlermeldung kommt deshalb, weil du deine db-Variable verwendest, bevor du sie 7 Zeilen später erstmalig zuweist.
Nein. Ich weise sie vorher zu.

Ich weise direkt nach dem case vbYes die db Variable zu, vorher wird sie nicht verwendet.
Das ist 6 Zeilen vor der ersten Nutzung von db mit db.Execute

ZitatBitte beantworte eine Frage: Ändert sich das Format der CSV-Dateien von Datei zu Datei?
Nein das Format bleibt immer gleich, es kommen lediglich Datensätze hinzu oder fallen weg.

PhilS

Zitat von: TerraAOC am Juli 09, 2021, 09:09:49Ich weise direkt nach dem case vbYes die db Variable zu, vorher wird sie nicht verwendet.
Das ist 6 Zeilen vor der ersten Nutzung von db mit db.Execute
Da liegt bei dir ein Missverständnis vor. Die Zuweisung erfolgt mit: Set db = ...
Vor der Zuweisung wir jede Verwendung der db-Variable die von dir zitierte Fehlermeldung auslösen.

Zitat von: TerraAOC am Juli 09, 2021, 09:09:49Nein das Format bleibt immer gleich, es kommen lediglich Datensätze hinzu oder fallen weg.
Was ist dann der Grund, dass du unbedingt den komplizierten Weg mit dem Löschen und Neuerstellen der Tabellen im Backend gehen willst?
Warum erstellst du die Tabelle nicht einmalig manuell im Backend, verknüpfst sie einmalig in's Frontend und importierst die Daten dann immer in die bestehende Tabelle? Das wäre einfach und stabil mit wenigen Codezeilen zu realisieren. Ich sehe bisher absolut kein Argument, das gegen diesen einfachen Lösungsansatz spricht.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

TerraAOC

Juli 09, 2021, 13:31:59 #47 Letzte Bearbeitung: Juli 09, 2021, 13:42:02 von TerraAOC
Waru
Zitatm erstellst du die Tabelle nicht einmalig manuell im Backend, verknüpfst sie einmalig in's Frontend und importierst die Daten dann immer in die bestehende Tabelle?
Meine Versuche haben immer nur die Daten aus der CSV an die Tabelle angehangen, nicht überschrieben

ZitatDa liegt bei dir ein Missverständnis vor. Die Zuweisung erfolgt mit: Set db = ...
Vor der Zuweisung wir jede Verwendung der db-Variable die von dir zitierte Fehlermeldung auslösen.

ACHSO. Vielen Dank das wusste ich nicht. Also Set db = CurrentDb ?

Das muss nach dim db As Database kommen?

Edit: OK, es funktioniert soweit das die Tabelle im Backend erstellt wird, allerdings wird sie nicht verknüpft. Die Lokale Tabelle wird auch erstellt, aber nicht wieder gelöscht, weil der Code nicht soweit kommt. Desweiteren kommt während der Code ausgeführt wird, das die Tabelle schon existiert, was auch stimmt, denn im Backend besteht sie ja schon, dieser Fehler kommt aber auch, wenn ich die Tabelle vorher lösche und dann den Code ausführe
Daraufhin wird sie erstellt und dann kommt der Fehler das die Tabelle schon existiert

TerraAOC

Wenn ich beide Tabellen lösche, also sowohl die Lokal, als auch die im Backend und dann den Code ausführe, kommt der Code bei der Zeile
db.TableDefs.Append neue_Tabelle
an und sagt mir das die Lokale Tabelle nicht gefunden werden kann, wenn ich dann auf debuggen klicke, taucht die Tabelle im Objektkatalog auf wenn ich dann den Code erneut laufen lasse hält er beim SQL, wo er mir sagt das die Tabelle im Backend bereits existiert, was ja auch stimmt.

PhilS

Zitat von: TerraAOC am Juli 09, 2021, 13:31:59
Zitat von: PhilSWarum erstellst du die Tabelle nicht einmalig manuell im Backend, verknüpfst sie einmalig in's Frontend und importierst die Daten dann immer in die bestehende Tabelle?
Meine Versuche haben immer nur die Daten aus der CSV an die Tabelle angehangen, nicht überschrieben
Ja, das ist so. Das lässt sich aber trivial einfach dadurch lösen, dass man die Daten, nicht die Tabelle, vor dem erneuten Import löscht.

CurrentDb.Execute "DELETE FROM ImporttabelleLokal"
DoCmd.TransferText acImportDelim, "Import", "ImporttabelleLokal", "Q:\Export\Importtabelle.txt", True, ""


Zitat von: TerraAOC am Juli 09, 2021, 13:46:36Wenn ich beide Tabellen lösche, also sowohl die Lokal, als auch die im Backend und dann den Code ausführe, kommt der Code bei der Zeile
db.TableDefs.Append neue_Tabelle
an und sagt mir das die Lokale Tabelle nicht gefunden werden kann, [...]

Die Fehlermeldung sagt mit Sicherheit, dass die Tabelle "ImporttabelleLokal" nicht gefunden werden kann. - Das bezieht sich im Kontext deines Codes zum Verknüpfen aber auf die Tabelle im Backend. Der SourceTableName beim Verknüpfen stimmt nicht. Die Tabelle im Backend heißt "TestTabelle".
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

TerraAOC

Juli 12, 2021, 11:22:31 #50 Letzte Bearbeitung: Juli 12, 2021, 11:31:16 von TerraAOC
Egal wie ich es verändere, also ob ich die lokale Tabelle als Quelltabelle nehme oder die im Backend erstellt wird, der Code endet immer bei db.TableDefs.Append neue_Tabelle einmal mit der Fehlermeldung

"Das Microsoft Access-Datenbankmodul konnte das Objekt 'TesttabelleLokal' nicht finden. Stellen Sie sicher, dass das Objekt vorhanden ist und dass die Namens- und Pfadangaben richtig eingegeben wurden."

Aber die Tabelle taucht auch im Objektkatalog auf, ich verstehe es einfach nicht.
Ein anderer Fehler tritt auf wenn ich die Tabellen tausche, also so
Tabellenname = "TesttabelleLokal"       'Name der Tabelle
      Name_Quelltabelle = "Testtabelle" 'Name der Originaltabelle
statt so:

Tabellenname = "Testtabelle"       'Name der Tabelle
      Name_Quelltabelle = "TesttabelleLokal" 'Name der Originaltabelle

Dann besagt der Fehler "TesttabelleLokal ist schon vorhanden und markiert mir wieder die oben genannte Zeile.
Bitte um weitere Hilfe. Ich weiß nicht was ich da noch testen kann.


Edit: Falls es hilft, neue_Tabelle wird als TableDef initialisiert
Dim neue_Tabelle As TableDef
Edit2: Was bedeutet überhaupt TableDefs Append? Die Access Hilfe ist nicht grade... hilfreich

PhilS

Zitat von: TerraAOC am Juli 12, 2021, 11:22:31"Das Microsoft Access-Datenbankmodul konnte das Objekt 'TesttabelleLokal' nicht finden. Stellen Sie sicher, dass das Objekt vorhanden ist und dass die Namens- und Pfadangaben richtig eingegeben wurden."
Der Fehler tritt auf, weil die Tabelle im Backend nicht existiert.

Zitat von: TerraAOC am Juli 12, 2021, 11:22:31Dann besagt der Fehler "TesttabelleLokal ist schon vorhanden und markiert mir wieder die oben genannte Zeile.
Bitte um weitere Hilfe. Ich weiß nicht was ich da noch testen kann.
Der Fehler tritt auf, weil die Tabelle im Frontend bereits vorhanden ist. Evtl. weil du sie durch den Import der Textdatei gerade schon erstellt hast. Da musst du halt aufpassen, dass du verschiedene Namen für die Tabelle der importierten Textdatei und für die verknüpfte Tabelle aus dem Backend verwendest.

Insgesamt funktioniert dein Code so auch nur genau 1 mal. Damit er dauerhaft funktioniert, musst du Tabellen, die bereits existieren, aber durch deinen Code neu erstellt werden, im nächsten Durchlauf der Prozedur löschen.

Wäre schon einfacher die Tabellen einmalig manuell zu erstellen und zu verknüpfen und dann die zwei(!) Codezeilen von mir zu verwenden, oder?

Zitat von: TerraAOC am Juli 12, 2021, 11:22:31Edit2: Was bedeutet überhaupt TableDefs Append? Die Access Hilfe ist nicht grade... hilfreich
TableDefs.Append fügt eine neue Tabelle den Tabellen in der jeweiligen Datenbank hinzu.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!