Neuigkeiten:

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

Mobiles Hauptmenü

Tabellenerstellungsabfrage in VBA-Abfrage ändern

Begonnen von cyberchris, März 07, 2012, 17:12:24

⏪ vorheriges - nächstes ⏩

cyberchris

Hallo,

ich habe eine Tabellenerstellungsabfrage mit einer festen Zielverknüpfung.
Diese muss ich jedoch ändern können und hierfür möchte ich die Zielverknüpfung in einer Tabelle ablegen und bei Ausführung der Abfrage auslesen und verwenden.

Hierzu möchte ich die Tabellenerstellungsabfrage in VBA umwandeln, bekomme das aber nicht hin. Kommen dauernd irgendwelche Fehler - egal was ich mache.
Das ist der SQL-Code in der Abfrage:

SELECT PMDB.IdentNr AS PMID, PMDB.Firma AS FIRMENNR, PMDB.IDoWAG AS ZIFFER, PMDB.Klassifizierung AS KLASSE, PMDB.Bezeichnung AS BEZEICHN, PMDB.Kalibrierdienst AS KDIENST, Format([Kalibrierdatum],"dd\.mm\.yyyy") AS KDATUM INTO PMM_Indexierung IN '\\faramir.wittag.net\PMM\Austausch\PMM-Archivierung.mdb'
FROM PMDB
WHERE (((PMDB.Standort)<>'Klärung'));

Den Pfad wohin geschrieben werden soll möchte ich dann per Variable einbinden. (...faramier...)

Was muss ich beachten, wenn ich das in einen VBA-Code umwandeln möchte. Denn einach in strSQL = ".... kopieren funktioniert leider nicht.

Vielen Dank
gruß Christoph



Jonny

Hallo Christoph,
mit dem Kopieren komme ich gut klar.
Abfrag in SQL-Ansicht und den String kopieren
In VBA SqlString = einfügen
jetzt noch den String in "" setzen.
Variable Felder so einstellen SqlString = "abc " & me!feldname & " def" usw.
Anführungszeichen nur für die Begrenzung vom String sonst Hochkomma, siehe dein Format(Kalibrierdatum,"dd/mm/yyyy")

Gruß

Johann

database

Hallo,

versuch mal so:


Dim strPfad as String, strSQL as String

strPfad = DLookup("PfadFeld","PfadTabelle")

strSQL = "SELECT PMDB.IdentNr AS PMID, PMDB.Firma AS FIRMENNR, PMDB.IDoWAG AS ZIFFER, PMDB.Klassifizierung AS KLASSE, PMDB.Bezeichnung AS BEZEICHN, " & _
        "PMDB.Kalibrierdienst AS KDIENST, Format([Kalibrierdatum],'dd\.mm\.yyyy') AS KDATUM INTO PMM_Indexierung IN " & strPfad &  " FROM PMDB " _
        "WHERE (((PMDB.Standort)<>'Klärung'));"

CurrentDb.Execute strSQL


HTH

cyberchris


cyberchris

#4
Hallo,

ich habe das jetzt erst testen können.

@database: Ich habe am Ende der zweiten Codezeile von strSQL noch ein "&" eingefügt.

Hierbei kommt jedoch folgende Fehlermeldung: "Die SELECT-Anweisung schließt ein reserviertes Wort oder einen Argumentennamen ein, das/der falsch, mit falscher Zeichensetzung oder überhaupt nicht eingegeben wurde.

Dim strPfad As String, strSQL As String

strPfad = DFirst("Verz_Saperion", "werk")

strSQL = "SELECT PMDB.IdentNr AS PMID, PMDB.Firma AS FIRMENNR, PMDB.IDoWAG AS ZIFFER, PMDB.Klassifizierung AS KLASSE, PMDB.Bezeichnung AS BEZEICHN, " & _
        "PMDB.Kalibrierdienst AS KDIENST, Format([Kalibrierdatum],'dd\.mm\.yyyy') AS KDATUM INTO PMM_Indexierung IN " & strPfad & " FROM PMDB " & _
        "WHERE (((PMDB.Standort)<>'Klärung'));"
CurrentDb.Execute strSQL


Gruß Christoph

DF6GL

Hallo,
Da solltest  Du halt mal alle die verwendeten Namen und den Inhalt der Variablen verifizieren und "Ziffer" sowie  "Klasse" umbenennen.



Weiterhin, wenn "KDATUM" in der Zieltabelle den Datentyp Datum/Uhrzeit erhalten soll, dann sollte es so aussehen:

[Kalibrierdatum] AS KDATUM

ggfls auch:

Format([Kalibrierdatum],'\#yyyy-mm-dd\#') AS KDATUM


cyberchris

Guten Morgen,

Ziffer und Klasse sind keine Variablen, sondern die Zieltabellen.
Ich habe sie mal in ZIFFER_N und KLASSE_N geändert.

Der Fehler kommt aber weiterhin. Ich habe auch mal beide Varianten mit dem Datum ausprobiert...
Eigentlich habe ich den Code ja nur von einer Abfrage in SQL Ansicht rauskopiert.

Dim strPfad As String, strSQL As String

strPfad = DFirst("Verz_Saperion", "werk")

strSQL = "SELECT PMDB.IdentNr AS PMID, PMDB.Firma AS FIRMENNR, PMDB.IDoWAG AS ZIFFER_N, PMDB.Klassifizierung AS KLASSE_N, PMDB.Bezeichnung AS BEZEICHN, " & _
         "PMDB.Kalibrierdienst AS KDIENST, Format([Kalibrierdatum],'\#yyyy-mm-dd\#') AS KDATUM AS KDATUM INTO PMM_Indexierung_NEU IN " & strPfad & " FROM PMDB " & _
         "WHERE (((PMDB.Standort)<>'Klärung'));"
CurrentDb.Execute strSQL

bahasu

Zitat von: cyberchris am März 14, 2012, 07:16:53
PMDB.Klassifizierung AS KLASSE_N, PMDB.Bezeichnung AS BEZEICHN, " & _
        "PMDB.Kalibrierdienst AS KDIENST, Format([Kalibrierdatum],'\#yyyy-mm-dd\#') AS KDATUM AS KDATUM INTO PMM_Indexierung_NEU IN " & strPfad & " FROM PMDB " & _
        "WHERE (((PMDB.Standort)<>'Klärung'));"
CurrentDb.Execute strSQL

Warum doppelt?
Servus

DF6GL

Hallo,

neben dem von Harald hinterfragten Fehler:

Zitat
Ziffer und Klasse sind keine Variablen, sondern die Zieltabellen.
???

Die beiden Bezeichnungen sind Aliasnamen und keine Zieltabellen. Die Zieltabelle heißt lt. des SQL-Strings  "PMM_Indexierung_NEU"    und befindet sich in der ext. Datenbank(datei) mit dem Namen , der in der Variablen "strPfad" steht, so er denn mit der mit Vorsicht zu geniesenden  DFirst-Funktion auch richtig ermittelt wird.



cyberchris

Ja, ich muss mich entschuldigen :-)
Ziffer und Klasse sind natülich nicht die Tabellen, sondern die Spalten in der Tabelle wie genannt.

Das doppelte "AS KDATUM" war nur hier im Code so. Habe es auch nochmal probiert. Kommt aber immer der gleiche Fehler.

Zur Sicherheit habe ich es dann auch nochmal hiermit probiert, dass das auslesen des Pfads nicht der Fehler ist:

strPfad = "\\faramir11.wittag.net\PMM\Austausch\PMM-Archivierung.mdb"

Die klassische Abfrage funktioniert, dass ist ja das seltsame.

Gruß Christoph

DF6GL

Hallo,

ok, sehe gerade dass da noch Hochkommata, bzw. Gänsefüße fehlen:


...IN """ & strPfad & """ FROM PMDB " & _
...IN '" & strPfad & "' FROM PMDB " & _

cyberchris

#11
Hallo,

Das wars! Jetzt gehts.
Nur beim 2. mal kommt die Meldung, dass die Tabelle bereits besteht. Und macht dann nichts. Muss ich die Tabelle vorher immer löschen? Oder wie löst man das am besten?

Danke
gruß Christoph

DF6GL

Hallo,


ja, wobei sich dann die grundsätzliche Frage nach der Verwendung einer Tabellenerstellungsabfrage stellt

cyberchris

so hatte ich es halt bei der klassischen Acces Abfrage drin und hatte funktioniert.
Was ist dann am besten, wenn ich die Tabelle immer aktualisieren möchte.
Löschen
Einfügen

oder
Leeren
Anfügen

Gruß Christoph

ebs17

ZitatWas ist dann am besten, wenn ich die Tabelle immer aktualisieren möchte.
Löschen
Einfügen

oder
Leeren
Anfügen
Definiere "am besten"?

Für Aufwand bzgl. Performance könnte man folgendes Gleichnis verwenden: Man möchte sein Wohnzimmer "aktualisieren".

- Würde man das Wohnzimmer komplett ausräumen und einschließend wieder einräumen (Leeren + Anfügen)
- oder zusätzlich noch Wände einreißen und neu aufbauen (Löschen + Einfügen)
- oder einfach die Kommode, die im Weg steht, entfernen, den Tisch, der falsch steht, umstellen und den Stuhl, der fehlt, ins Zimmer tragen?

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard