Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: TerraAOC am Juni 08, 2021, 07:47:38

Titel: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 08, 2021, 07:47:38
Guten Morgen miteinander,

Ich möchte über VBA eine Tabelle in meinem Backend erstellen, das VBA soll über das Frontend ausgeführt werden.
Wenn ich es mache wie ich es kenne, wird die Tabelle im Frontend erstellt, brauche die aber im Backend.

Außerdem bräuchte ich auch die Funktion diese Tabelle wieder zu löschen mit VBA, hier habe ich docmd.deleteobject versucht, allerdings sagt mir Access das die Tabelle nicht gefunden werden konnte, da sie im Frontend nicht existiert, sondern nur im Backend.

Ich hoffe das ist nicht so super kompliziert.
Vielen Dank im Voraus und liebe Grüße!
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: markusxy am Juni 08, 2021, 11:13:24
Vielleicht zeigst du mal deinen Code.
Grundsätzlich darfst du aber nicht Currentdb für den Zugriff verwenden,
sondern musst erstmal selbst eine Verbindung zur gewünschten Datenbank erstellen.

Diese Verbindung kannst du mittels DBEngine.OpenDatabase erstellen.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 08, 2021, 12:07:58
Danke für den Denkanstoß mit DBEngine.

Meinen Code kann ich nicht zeigen, ich habe noch keinen (Für Zugriff von Front auf Backend)
nur zum erstellen von einer Tabelle in der aktuellen Datenbank.
Da mach ich zuerst docmd.deleteobject um die Tabelle zu löschen, danach erstell ich die mithilfe von
docmd.transfertext eine Tabelle über eine CSV.

Ich probiere das mal aus mit DBEngine und Frage zur Not einfach noch die Access Onlinehilfe.


Edit: Habe es jetzt so, meinst du das wird so funktionieren?
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = DBEngine.OpenDatabase("Datenbank - Kopie_be", False, False)
Set rst = db.OpenRecordset("Testtabelle", dbOpenDynaset)
DoCmd.DeleteObject acTable, "Testtabelle"

Es funktioniert, ich musste nur statt dem Namen also Datenbank - Kopie_be den kompletten Pfad zur DB angeben.

Danke für die Hilfe
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 08, 2021, 13:07:21
Nochmal ich;
es funktioniert nicht wenn ich eine Tabelle mit docmd.transfertext erstelle.

Die Tabelle wird trotzdem im Frontend erstellt.

Benötige weitere Hilfe

Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = DBEngine.OpenDatabase("Datenbank - Kopie_be", False, False)
Set rst = db.OpenRecordset("Testtabelle", dbOpenDynaset)
DoCmd.TransferText acImportDelim, "Testimport", "Testtabelle", "C:\Exporte\CSVTest.txt", True, ""
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: markusxy am Juni 08, 2021, 15:43:29
Zitat von: TerraAOC am Juni 08, 2021, 13:07:21Nochmal ich;
es funktioniert nicht wenn ich eine Tabelle mit docmd.transfertext erstelle.

Ja, wie denn auch.
Du erstellst eine Database Referenz zur Access Datei und nutzt sie dann nicht.
So macht das keinen Sinn.
Grundsätzlich bezweifle ich auch die Sinnhaftigkeit deiner Vorgehensweise.
Du sprachst ja zuerst davon einen Tabelle zu erstellen.
Jetzt geht es darum sie zu importieren und dann auch noch zu löschen.

Vielleicht solltest du das mal überdenken.
Normal erstellt mal erstmal eine Tabelle wo die Datei rein kommen.
Wenn die existiert kannst du ruhig eine Verknüpfung über das Frontend erstellen und die Daten korrekt konvertiert ins Backend schreiben.

Da dir noch so viele Grundlagen fehlen, erklärst du vielleicht mal vorerst den Sinn des Ganzen.
Zwischenzeitlich kannst du dir ja auch mal in der Hilfe ansehen, zu welcher Klasse die Docmd Methode gehört, damit du den Zusammenhang zu deinem Problem erkennen kannst.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 08, 2021, 16:01:57
Wieso muss ich immer alles begründen was ich mit Access machen will?
Kannst du mir nicht einfach kurz sagen wie mein Vorhaben funktioniert oder ob es eben nicht funktioniert?

Wenn mir gesagt wird, das es so gemacht werden soll, dann mache ich das so. Da brauche ich keinen tieferen Sinn oder eine Begründung für jeden Schritt.

Das mit dem Löschen war lediglich ein Versuch ob die Verbindung funktioniert und mit docmd.deleteobject tut sie das. Die Tabelle wird aus beiden DBs entfernt.
Allerdings wird die Tabelle nur im Frontend erstellt wenn ich meine csv datei mit docmd.transfertext importiere.
Falls du mir nicht helfen willst, lass es einfach gut sein. Dieses Forum ist normalerweise ein Weg wie man Probleme löst und/oder verhindert.

Aber nach deiner Antwort bin ich mir da nicht so sicher.
Wenn ich mir andere Beiträge hier angucke, bekommen die Leute auch sofort eine Lösung geschrieben, da wird nicht nach dem tieferen Sinn hinter jeder Aktion gefragt. (Aber das ist immer ein Glücksspiel und hängt vom "Experten" ab der sich begnadigt auf einen Beitrag zu antworten)


Und außerdem: Nur weil du die "Sinnhaftigkeit" bezweifelst, heißt das nicht das es 1. Nicht Möglich ist und 2. Nicht auch von anderen Leuten so verwendet wird. Ich habe gehofft das ich einige dieser Leute hier in dem Forum finde.


Edit: Und auch wenn es am Ende vielleicht funktioniert und es trotzdem sehr fehlerbehaftet ist, dann ist das halt so, dann wird es anders gemacht.
Aber ohne das getestet zu haben, weiß ich nicht ob das bei mir funktioniert wie es soll oder nicht, das kann keiner Voraussagen
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: MzKlMu am Juni 08, 2021, 16:25:54
Hallo,
wenn Du in einem Accessfrum etwas fragst, musst Du Dir auch die Frage nach dem Sinn gefallen lassen. Es wäre ein schlechtes Forum wenn nicht nach dem Sinn einer Aktion gefragt werden würde. Denn je nach Sinn können sich ja unterschiedliche Lösungsvorschläge ergeben.
Du sprichst zunächst mal davon per VBA eine Tabelle zu erstellen. Dann willst Du plötzlich eine CSV importieren, was ja was anderes ist. Dann willst Du auch eine Tabelle löschen.
Das ist alles ziemlich verwirrend.

Normalerweise würde man eine CSV nur verlinken.
Und dann kann man mit einer Tabellenerstellungsabfrage eine neue Tabelle erstellen oder mit einer Anfügeabfrage die Daten in eine vorgefertigte/vorhandene Access Tabelle übertragen. Dabei kann auch eine Tabellenname im Backend angegeben werden.
Eine CSV ist auch im Regelfall nicht direkt in Access verwendbar. Da müssen auch Datenanpassungen vorgenommen werden, was man dann mit den Abfragen auch gleich erledigen kann.
Diese Abfrage:
SELECT Nachname, Geburtsdatum INTO Test IN 'X:\PfadBackend\Backend.accdb'
FROM VerlinkteCSV
Schreibt aus der verlinkten CSV 2 Felder in die gleichzeitig erstellte Backendtabelle


Die Frage dem dem Sinn des Vorhabens ist also schon mal berechtigt.
Und eine detailiertere Beschreigung des Vorhabens wäre auch sinnvoll.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: markusxy am Juni 08, 2021, 17:46:46
Zitat von: TerraAOC am Juni 08, 2021, 16:01:57Wieso muss ich immer alles begründen was ich mit Access machen will?

Sei doch froh, so lernst du weit mehr.
Außerdem sind die Helfer diejenigen, die ihre Zeit opfern.

Zitat von: TerraAOC am Juni 08, 2021, 16:01:57Kannst du mir nicht einfach kurz sagen wie mein Vorhaben funktioniert oder ob es eben nicht funktioniert?

Also natürlich funktioniert das Vorhaben.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 09, 2021, 08:37:36
Eine Beschreibung:
Ich habe eine CSV diese soll per Druck auf einen Button importiert werden, die alte Tabelle die aus der CSV gebildet wurde, soll überschrieben werden, bzw gelöscht und neu angelegt. Das mache ich momentan als es noch nicht Front und Backend war, mit der Docmd.transfertext Methode, allerdings legt diese, wie oben schon erwähnt, die Tabelle immer lokal an. Ich möchte GENAU den gleichen Schritt den transfertext mir ausführt mit Importspezifikation und allem drum und dran in meinem Backend ausführen über das Frontend.

Ich war gestern sehr gereizt, sorry dafür. Ich hoffe wir finden eine Lösung für das Problem.

Grüße
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: MzKlMu am Juni 09, 2021, 08:42:11
Hallo,
siehe mein Beitrag #6.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 09, 2021, 08:52:38
Ja, aber so wie in #6 möchte ich es nicht machen, ich möchte es einfach und simpel mit docmd.transfertext machen.
Wie ich in #8 sagte:
ZitatIch möchte GENAU den gleichen Schritt den transfertext mir ausführt mit Importspezifikation und allem drum und dran in meinem Backend ausführen über das Frontend.

Edit: Auch wenn ich es so machen würde wie in #6 ist das viel zu umständlich, da sich die CSV jeden Tag ändern kann. Dann müsste ich die ja jedes mal neu verlinken.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 09, 2021, 09:07:14
Zitat von: TerraAOC am Juni 09, 2021, 08:52:38Ja, aber so wie in #6 möchte ich es nicht machen, ich möchte es einfach und simpel mit docmd.transfertext machen.
"Einfach und simpel" geht es aber mit DoCmd.TransferText nicht, weil DoCmd ein Objekt der Access.Application ist und sich immer auf die aktuell geöffnete Datenbank, d.h. in diesem Fall das Frontend, auswirkt.

Du kannst entweder ...

[Edit]
Zitat von: TerraAOC am Juni 09, 2021, 08:52:38Edit: Auch wenn ich es so machen würde wie in #6 ist das viel zu umständlich, da sich die CSV jeden Tag ändern kann. Dann müsste ich die ja jedes mal neu verlinken.
Und? Du kannst die CSV-Datei doch per Code neu verknüpfen.
[/Edit]
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: MzKlMu am Juni 09, 2021, 09:14:35
Hallo,
ob importiert oder verlinkt ist egal.
Erst Transfertext ausführen (dabei lässt sich steuern ob verlinkt oder importiert) und in der nächsten Zeile dann:
CurrentDb.Execut "SELECT Feldname1, Feldname2 INTO Test IN 'X:\PfadBackend\Backend.accdb' FROM CSV", DbFailOnError
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 09, 2021, 10:32:00
Hallo,

Zu #11

ZitatUnd? Du kannst die CSV-Datei doch per Code neu verknüpfen.
Ich habe das grade mal getestet, solange sich der Pfad und die Struktur der csv nicht ändert, kann ich die verlinkt lassen. Das ist schon mal gut.


zu #12:
ist bei INTO Test, das Test der Name den die Tabelle im Frontend erhalten soll?
ZitatErst TransferText ausführen (dabei lässt sich steuern ob verlinkt oder importiert) und in der nächsten Zeile dann
Also DoCmd.Transfertext acLinkDelim ?
Das wäre zwar ein bisschen umständlicher, aber ich könnte die verlinken und dann so wie du gezeigt hast als Tabelle ins Backend packen? Hab ich das richtig verstanden? Falls ja, ist das genau was ich brauche.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 09, 2021, 11:03:52
Funktioniert nicht, muss ich bei FROM CSV den kompletten Pfad der CSV eingeben?

Funktioniert auch nicht ich kriege jedes mal einen Laufzeitfehler.
Dieser besagt das meine CSV nicht in C:\CSV.mdb gefunden wurde, ich hab aber den Pfad mit .txt am Ende der CSV angegeben.
Wieso sucht der also nach einer mdb?
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: MzKlMu am Juni 09, 2021, 12:08:20
Hallo,
zeige bitte den vollständigen von Dir verwendeten Code. Alle Zeilen.

Es ist mir unverständlich, warum man das nicht gleich zeigt, sonders erst auf Rückfrage. Es muss Dir doch klar sein, dass der benötigt wird, wie sonst soll man denn einen Fehler finden ?
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 09, 2021, 12:11:12
Sub Test123()
DoCmd.TransferText acLinkDelim, "Import", "Testtabelle", "Q:\CSVImport\TestCSV.txt", True
CurrentDb.Execute "SELECT * INTO Testtabelle IN 'C:\Users\tests\Front und Backend Test\Datenbank - Kopie_be.accdb' FROM TestCSV", dbFailOnError
End Sub

Das rufe ich über den Button mit:
Private Sub Befehl2_Click()
Call Test123
End Sub
auf

Die CSV wird verlinkt, aber danach kommt ein Fehler und der Debugger markiert mir die Execute Zeile
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: MzKlMu am Juni 09, 2021, 12:28:43
Hallo,
schreibe statt des * die Feldnamen (kommagetrennt). Wie in #6.

PS:
danach kommt ein FehlerDas ist auch so eine Antwort, die für erhöhten Blutdruck sorgt.
Bitte die Fehlermeldung exakt zitieren.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 09, 2021, 12:35:02
ZitatBitte die Fehlermeldung exakt zitieren.
Laufzeitfehler '3010'
Die Tabelle Testtabelle existiert bereits.

Eigentlich die Wahrheit, denn sie wurde im Schritt davor erstellt.

Statt des * die Feldnamen hat nichts geändert.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: MzKlMu am Juni 09, 2021, 12:37:22
Hallo,
dann nimm doch mal einen anderen Namen.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 09, 2021, 12:40:58
Ja, gut. das klappt, habe nicht gesehen das er die Tabelle im Backend schon erstellt hat, denn die wurde nicht automatisch verknüpft.

Es funktioniert also jetzt, aber die Tabelle ist nicht verknüpft, also werden Abfragen im Frontend nicht darauf zugreifen können. Wie verknüpfe ich diese mit VBA?
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: Beaker s.a. am Juni 09, 2021, 15:57:24
ZitatWie verknüpfe ich diese mit VBA?
Diese Frage in einer Suchmaschine ergibt mehrere Tsd. Treffer.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 11, 2021, 07:57:45
Ich dachte ich bin hier in einem Forum wo mir geholfen wird?? Da kann ich mir doch eigentlich googlen sparen.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: HB9876 am Juni 11, 2021, 13:57:19
Zitat von: TerraAOC am Juni 11, 2021, 07:57:45Ich dachte ich bin hier in einem Forum wo mir geholfen wird?? Da kann ich mir doch eigentlich googlen sparen.

Das denke ich bist du auch, zumindest ist das mein Eindruck und Erfahrung.
Aber ein Forum ist Hilfe zur Selbsthilfe, versuch doch mal einen Ansatz zu finden und frage dann spezifisch nach wenn es Fragen/Probleme gibt.
Wenn ich deine Post lese (sorry, mit allen Respekt) moechtest du Loesungen praesentiert bekommen.
Das sollte man dann doch eher einkaufen und nicht aus einem Forum erwarten/verlangen.

Just my 2 cents,
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 14, 2021, 11:59:02
Guten Tag zusammen. Ich habe es jetzt so versucht:
Sub Verknüpfen()
  Dim db As Database
  Dim Tabellenname As String
  Dim Verbindungsinformation As String
  Dim Name_Quelltabelle As String
  Dim neue_Tabelle As TableDef

  'Beispiele für Verbindungsinformationen
  Tabellenname = "Meine_Tabelle"                'Name der Tabelle
  Name_Quelltabelle = "externe_Tabelle"         'Name der Originaltabelle

  'MS Access DB
  Verbindungsinformation = ";DATABASE=C:\Users\Datenbank - Kopie_be"
  'Datenbankobjekt ermitteln
  Set db = CurrentDb

  'Neues Tabellenobjekt anlegen
  Set neue_Tabelle = db.CreateTableDef
  neue_Tabelle.Name = "Testtabelle"                  'Tabellenname festlegen
'  neue_Tabelle.Connect = Verbindungsinformation     'Verbindungsinformation festlegen
  neue_Tabelle.SourceTableName = "TesttabelleCSV"  'Name der Quelltabelle
  'Tabelle anlegen
  db.TableDefs.Append neue_Tabelle
  db.TableDefs.Refresh

  'Speicher freigeben
  Set db = Nothing
End Sub

Aufruf über einen Button

Allerdings bekomme ich immer beim Ausführen des Buttons
den Fehler '3264'
Kein Feld definiert: TableDef- oder Index-Objekt kann nicht angefügt werden.

Und der Debugger markiert mir db.TableDefs.Append neue_Tabelle

Brauche bitte weitere Hilfe

Code von hier: http://www.makrothek.de/index.php/programmiertipps/vba-tipps/17-tabelle-mittels-vba-verkn%C3%BCpfen

Edit: Der Name bei SourceTableName passt zu 100%
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 14, 2021, 12:27:20
Warum weist du die Verbindungsinformation zum Backend (Connect-Property) nicht zu?
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 14, 2021, 12:57:14
Ich weiß nicht was da reinkommt. Das Backend benötigt weder ein Passwort noch sonst irgendwas
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 14, 2021, 13:38:02
Zitat von: TerraAOC am Juni 14, 2021, 12:57:14Ich weiß nicht was da reinkommt. Das Backend benötigt weder ein Passwort noch sonst irgendwas
;DATABASE=C:\pfad\zur\Datenbank.accdb
War doch in dem von dir verwendeten Beispielcode enthalten. Sogar in deiner Fassung des Codes ist es drin, allerdings solltest du noch eine Dateinamenerweiterung ergänzen.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 14, 2021, 13:56:45
Ah danke. Ich glaub da war ich blind.

Jetzt bekomme ich eine andere Fehlermeldung
'3011'
Konnte das Objekt "TesttabelleCSV" nicht finden.....

Dabei ist die Tabelle als CSV verknüpft und soll jetzt als Tabelle im Backend erstellt werden.
Also eigentlich müsste das Objekt doch gefunden werden. Ist schließlich vorhanden und kann ich auch ohne Probleme öffnen
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: Beaker s.a. am Juni 14, 2021, 14:09:36
Hier fehlt der Punkt
ZitatTesttabelle.CSV
Prüfe ob der im Code auch fehlt.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 14, 2021, 14:16:31
Wieso ein . ? Ich habe die CSV verknüpft, die Datei heißt nicht .csv die heißt komplett anders. Es geht mir hier um den Namen der Accessverknüpfung.
(https://i.imgur.com/M4rxtHV.png)
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 14, 2021, 14:36:03
Zitat von: TerraAOC am Juni 14, 2021, 13:56:45Konnte das Objekt "TesttabelleCSV" nicht finden.....

Dabei ist die Tabelle als CSV verknüpft und soll jetzt als Tabelle im Backend erstellt werden.
Der Programmcode verknüpft eine bestehende Access-Tabelle aus dem Backend in dein Frontend.

Wenn ich dem Thread folgen konnte, war das auch deine Ausgangssituation vor dem Verknüpfen der Tabelle.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: Beaker s.a. am Juni 14, 2021, 14:42:49
O.K., hatte ich falsch verstanden.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 14, 2021, 16:12:48
ZitatDer Programmcode verknüpft eine bestehende Access-Tabelle aus dem Backend in dein Frontend.
Wie kann ich denn dann die angehängte CSV zu einer lokalen Tabelle machen und die dann ins Backend verschieben?

Oder soll ich einfach wie vorher meine Tabelle im Frontend erstellen lassen (ohne anhängen der CSV) und die dann mit dem Code ins Backend schieben?
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 15, 2021, 11:05:37
Guten Tag ich nochmal,
in der Theorie würde das so funktionieren wie ich es jetzt mache, wenn ich aber
            DoCmd.TransferText acImportDelim, "CSV Import", "TesttabelleLokal", "Q:\Export\Testtabelle.txt", True, ""ausführe, wird mir die erstellte Tabelle erst angezeigt wenn ich das Frontend neu öffne. Dadurch kann der Rest von meinem Code die Tabelle TesttabelleLokal nicht finden.
Gibt es eine möglichkeit die Tabellenanzeige zu "refreshen"? Ansonsten muss ich den Code irgendwie Access neustarten lassen, was auch extrem Zeit kostet.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 15, 2021, 11:43:17
Zitat von: TerraAOC am Juni 15, 2021, 11:05:37in der Theorie würde das so funktionieren wie ich es jetzt mache, wenn ich aber
            DoCmd.TransferText acImportDelim, "CSV Import", "TesttabelleLokal", "Q:\Export\Testtabelle.txt", True, ""ausführe, wird mir die erstellte Tabelle erst angezeigt wenn ich das Frontend neu öffne. Dadurch kann der Rest von meinem Code die Tabelle TesttabelleLokal nicht finden.
Das ist eher ungewöhnlich. I.d.R. sollte der Programmcode unabhängig von der Anzeige der Tabellen sein.
Die Anzeige in der Navigation Pane kannst du so aktualisieren:
Application.RefreshDatabaseWindow
Wenn du irgendwo eine bestehende Dao.Database-Variable hast, die von der neuen Tabelle nichts mitbekommen hat, dann probier mal:
deineDbVariable.TableDefs.Refresh
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 21, 2021, 08:17:25
Ich verstehe das nicht, meine Tabelle ist vorhanden, aber Access sagt die Tabelle ist nicht vorhanden.
(https://i.imgur.com/upHI9t1.png)

Hier nochmal der komplette Code, nach einem Klick in der MSGBox auf Ja, soll das passieren, Access sagt aber jedesmal das es die Tabelle nicht gibt, obwohl es die gibt
        Case vbYes
            DoCmd.DeleteObject acTable, "ImporttabelleLokal"
            DoCmd.TransferText acImportDelim, "Import1", "ImporttabelleLokal", "U:\Importe\ImportCSV.txt", True, ""
           
           
            Application.RefreshDatabaseWindow
           
            db.TableDefs.Refresh
           
            Tabellenname = "Meine_Tabelle"       'Name der Tabelle
            Name_Quelltabelle = "externe_Tabelle" 'Name der Originaltabelle

            'MS Access DB
            Verbindungsinformation = ";DATABASE=C:\Users\ImportTest_be.accdb"
            'Datenbankobjekt ermitteln
            Set db = CurrentDb

            'Neues Tabellenobjekt anlegen
            Set neue_Tabelle = db.CreateTableDef
            neue_Tabelle.SourceTableName = "ImporttabelleLokal" 'Name der Quelltabelle
            neue_Tabelle.Name = "Importtabelle" 'Tabellenname festlegen
            neue_Tabelle.Connect = Verbindungsinformationen 'Verbindungsinformation festlegen
           
            'Tabelle anlegen
            db.TableDefs.Append neue_Tabelle
            db.TableDefs.Refresh

            'Speicher freigeben
            Set db = Nothing
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 21, 2021, 09:50:52
Zitat von: TerraAOC am Juni 21, 2021, 08:17:25[...]Access sagt aber jedesmal das es die Tabelle nicht gibt, obwohl es die gibt
        Case vbYes
            DoCmd.DeleteObject acTable, "ImporttabelleLokal"
In deinem Screenshot steht: DoCmd.DeleteObject acForm, "ImporttabelleLokal"
?

Außerdem ist ein grundsätzlicher Logikfehler in deinem Lösungsansatz.
Du importierst erst die CSV-Datei in dein Frontend (DoCmd.TransferText), dann versuchst du eine gleichnamige Tabelle ("ImporttabelleLokal") aus dem Backend in das Frontend zu verknüpfen (db.CreateTableDef).

Rein technisch könnte das zwar so funktionieren, aber ich bin mir recht sicher, dass das nicht deine Absicht ist.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 21, 2021, 10:24:41
Egal ob da acForm oder acTable steht, das ändert nichts am Fehlerbild.

ZitatDu importierst erst die CSV-Datei in dein Frontend (DoCmd.TransferText), dann versuchst du eine gleichnamige Tabelle ("ImporttabelleLokal") aus dem Backend in das Frontend zu verknüpfen (db.CreateTableDef).

Ich möchte es anders rum machen, ich hole mir die CSV Datei in mein Frontend und erstelle mir mit DoCmd.TransferText die Tabelle ImporttabelleLokal im Frontend, danach soll mit dem restlichen Code die ImporttabelleLokal im Backend erstellt werden unter einem anderen Namen und dann soll die Tabelle vom Back ins Frontend verknüpft werden und die Lokal soll im Frontend gelöscht werden.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 21, 2021, 20:23:14
Zitat von: TerraAOC am Juni 21, 2021, 10:24:41Egal ob da acForm oder acTable steht, das ändert nichts am Fehlerbild.
Bei acForm wäre der Fehler logisch und zu erwarten.
Für den Fehler bei acTable habe ich keine Erklärung. - Ich würde da nochmal ganz genau prüfen, ob die Tabelle auch in dem Moment wo es zum Fehler kommt wirklich existiert und nicht bereits vorher z.B. durch anderen Code gelöscht wurde.

Zitat von: TerraAOC am Juni 21, 2021, 10:24:41Ich möchte es anders rum machen, ich hole mir die CSV Datei in mein Frontend und erstelle mir mit DoCmd.TransferText die Tabelle ImporttabelleLokal im Frontend, danach soll mit dem restlichen Code die ImporttabelleLokal im Backend erstellt werden unter einem anderen Namen und dann soll die Tabelle vom Back ins Frontend verknüpft werden und die Lokal soll im Frontend gelöscht werden.

Wir drehen uns hier im Kreis.
Schon zu Beginn dieses Threads haben dir mehrere Leute erklärt, dass dieser Ansatz eher ungewöhnlich und schwierig zu realisieren ist. - Warum du diesen (unnötig?) komplizierten Ansatz unbedingt weiter verfolgen willst, hast du bisher nicht erklärt.
Vorgeschlagene Lösungsansätze, wie du es trotz der komplizierten Anforderungen umsetzen kannst (Z.B.: IN '...\Backend.accdb' ) hast du inzwischen scheinbar wieder über Bord geworfen.

Ich weiß langsam nicht mehr, wie ich dir hier weiterhelfen soll.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juni 22, 2021, 10:32:21
Du kannst mir weiterhelfen indem du mir eine Anfängerfreundliche Hilfe gibst.
Ich habe außerdem alles von den anderen Seiten dieses Threads ausprobiert.
Ich habe es mit DBEngine versucht, da wurde mir aber nicht weitergeholfen wie ich diese Verbindung dann nutze.
Ich habe versucht die CSV anzuhängen, das hat geklappt, danach weiß ich nicht weiter.
Und SQL ist mir zu kompliziert, keine Ahnung wo ich bei dem SQL aus #6
SELECT Nachname, Geburtsdatum INTO Test IN 'X:\PfadBackend\Backend.accdb'
FROM VerlinkteCSV
ansetzen soll.
Und da ich nach sehr langem Googlen und Ergebnisse durchklicken dann den Code aus #24 gefunden habe dachte ich "jetzt habe ich es endlich und es funktioniert" aber dann wird die erstellte Tabelle im Frontend nicht vom Code gefunden.

Das Problem scheint sich aber auch in Luft aufgelöst zu haben, denn jetzt bekomme ich drei Zeilen weiter einen Fehler

Laufzeitfehler 91
"Objekt oder With Blockvariable nicht festgelegt"

Der Debugger markiert mir da die Zeile mit db.TableDefs.Refresh
Hier nochmal der Code:
Case vbYes
            DoCmd.DeleteObject acTable, "ImporttabelleLokal"
            DoCmd.TransferText acImportDelim, "Import", "ImporttabelleLokal", "U:\Importe\ImportCSV.txt", True, ""
           
           
            Application.RefreshDatabaseWindow
           
            db.TableDefs.Refresh
           
            Tabellenname = "Meine_Tabelle"       'Name der Tabelle
            Name_Quelltabelle = "externe_Tabelle" 'Name der Originaltabelle
           
            'MS Access DB
            Verbindungsinformation = ";DATABASE=C:\Users\Importtest_be.accdb"
            'Datenbankobjekt ermitteln
            Set db = CurrentDb
           
            'Neues Tabellenobjekt anlegen
            Set neue_Tabelle = db.CreateTableDef
            neue_Tabelle.SourceTableName = "ImporttabelleLokal" 'Name der Quelltabelle
            neue_Tabelle.Name = "Importtabelle" 'Tabellenname festlegen
            neue_Tabelle.Connect = ";DATABASE=C:\Users\Importtest_be.accdb" 'Verbindungsinformation festlegen
           
            'Tabelle anlegen
            db.TableDefs.Append neue_Tabelle
            db.TableDefs.Refresh
           
            'Speicher freigeben
            Set db = Nothing
           
        Case vbNo
            Exit Sub

Bitte helft mir es so umzusetzen, ich finde es so viel praktischer und übersichtlicher als mit kompliziertem SQL oder angehängter CSV.
Ihr könnt mir auch sagen wie ich die Verbindung mit DBEngine nutze, falls das leichter ist.

Danke schon mal.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juni 22, 2021, 11:28:13
Zitat von: TerraAOC am Juni 22, 2021, 10:32:21Du kannst mir weiterhelfen indem du mir eine Anfängerfreundliche Hilfe gibst.
Das versuchen alle hier Antwortenden hier seit geraumer Zeit.
Die anfängerfreundliche Empfehlung war und ist: Mach es anders, das ist viel einfacher.
Du bestehst auf deinem komplizierteren Lösungsansatz. Die Antworten dazu sind komplizierter. Das liegt aber nicht daran, dass man dir hier nicht anfängerfreundlich helfen will, sondern daran dass du dir einen komplizierten Lösungsweg ausgesucht hast.

Bitte beantworte eine Frage: Ändert sich das Format der CSV-Dateien von Datei zu Datei?


Zitat von: TerraAOC am Juni 22, 2021, 10:32:21Und SQL ist mir zu kompliziert, keine Ahnung wo ich bei dem SQL aus #6
SELECT Nachname, Geburtsdatum INTO Test IN 'X:\PfadBackend\Backend.accdb'
FROM VerlinkteCSV
ansetzen soll.
In #20 (https://www.access-o-mania.de/forum/index.php?msg=152364) hattest du geschrieben, dass das im Prinzip (etwas anderes SQL) bei dir funktioniert.

Zitat von: TerraAOC am Juni 22, 2021, 10:32:21Das Problem scheint sich aber auch in Luft aufgelöst zu haben, denn jetzt bekomme ich drei Zeilen weiter einen Fehler

Laufzeitfehler 91
"Objekt oder With Blockvariable nicht festgelegt"
Das ursprüngliche Problem hat sich vermutlich in Luft aufgelöst, als du acForm zu acTable geändert hast.

Die 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.

Zitat von: TerraAOC am Juni 22, 2021, 10:32:21Bitte helft mir es so umzusetzen, ich finde es so viel praktischer und übersichtlicher als mit kompliziertem SQL oder angehängter CSV.
Es . funktioniert . so . aber . nicht!

Der Code, den du jetzt aktuell verwendest, importiert die CSV-Datei ins Frontend und versucht dann eine Tabelle aus dem Backend in's Frontend zu verknüpfen.
Der essenzielle Zwischenschritt, deine Tabelle mit den CSV-Daten in's Backend zu bekommen, fehlt. - Dazu wäre z.B. der o.a. Code mit dem SELECT ... INTO ... IN '...\Backend.accdb' geeignet.

Zitat von: TerraAOC am Juni 22, 2021, 10:32:21Ihr könnt mir auch sagen wie ich die Verbindung mit DBEngine nutze, falls das leichter ist.
Mit DbEngine.OpenDatabase kannst du direkt das Backend öffnen, analog zu CurrentDb für das Frontend. Das kehrt aber nur die Richtung um, in der deine Tabelle kopiert werden müsste und ist daher m.M. keine große Erleichterung.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: MzKlMu am Juni 22, 2021, 12:42:45
Hallo,
in #6 steckt die komplette einfache, Anfängertaugliche Lösung.
Die dortige Abfrage (SELECT Feldnamen INTO....) ist nur auf die vorliegenden Feld/Tabellennamen anzupassen.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juli 09, 2021, 08:14:17
Hallo ich wieder nach langer Zeit, kam heute erst wieder dazu, habe das SQL genauso wie in #6 bzw in #42 eingefügt und angepasst. Trotzdem bekomme ich immer noch einen Laufzeitfehler "Objektvariable oder With-Blockvariable nicht festgelegt.

Access markiert mir mein SQL.

db.Execute "SELECT Artikelnummer, Lagerfach INTO Testtabelle IN 'C:\Users\Importtest_be.accdb' FROM ImporttabelleLokal"
db ist deklariert.


Hier nochmal der komplette Abschnitt:
        Case vbYes
    Dim Tabellenname As String
    Dim Verbindungsinformation As String
    Dim Name_Quelltabelle As String
    Dim neue_Tabelle As TableDef
    Dim db As Database
            DoCmd.DeleteObject acTable, "ImporttabelleLokal"
            DoCmd.TransferText acImportDelim, "Import", "ImporttabelleLokal", "Q:\Export\Importtabelle.txt", True, ""
           
           
       
           db.Execute "SELECT Artikelnummer, Lagerfach INTO Testtabelle IN 'C:\Users\Importtest_be.accdb' FROM ImporttabelleLokal"
           
           
           
           
            Application.RefreshDatabaseWindow
           
            db.TableDefs.Refresh
           
            Tabellenname = "ImporttabelleLokal"       'Name der Tabelle
            Name_Quelltabelle = "Testtabelle" 'Name der Originaltabelle
           
            'MS Access DB
            Verbindungsinformation = ";DATABASE=C:\Users\Importtest_be.accdb"
            'Datenbankobjekt ermitteln
            Set db = CurrentDb
           
            'Neues Tabellenobjekt anlegen
            Set neue_Tabelle = db.CreateTableDef
            neue_Tabelle.SourceTableName = "ImporttabelleLokal" 'Name der Quelltabelle
            neue_Tabelle.Name = "Testtabelle" 'Tabellenname festlegen
            neue_Tabelle.Connect = ";DATABASE=C:\Users\Importtest_be.accdb" 'Verbindungsinformation festlegen
           
            'Tabelle anlegen
            db.TableDefs.Append neue_Tabelle
            db.TableDefs.Refresh
           
            'Speicher freigeben
            Set db = Nothing
           
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juli 09, 2021, 09:04:02
Zitat von: TerraAOC am Juli 09, 2021, 08:14:17Trotzdem bekomme ich immer noch einen Laufzeitfehler "Objektvariable oder With-Blockvariable nicht festgelegt.
Bitte ließ meinen vorigen Post. Darin hatte ich diese Frage bereits beantwortet.

Außerdem beantworte bitte die Frage darin.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juli 09, 2021, 09:09:49
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.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juli 09, 2021, 12:12:24
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.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juli 09, 2021, 13:31:59
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
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juli 09, 2021, 13:46:36
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.
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juli 09, 2021, 14:46:16
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".
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: TerraAOC am Juli 12, 2021, 11:22:31
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
Titel: Re: Mit VBA eine Tabelle im Backend erstellen über Frontend
Beitrag von: PhilS am Juli 12, 2021, 16:57:00
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.