PDA

Vollständige Version anzeigen : in Löschfrage für externe DB Dateipfad aus Textfeld übernehmen


H.v.D
22.12.2001, 10:14
Hallo Profis!

Aus meiner Datenbank exportiere ich Abfragen in eine externe DB. Dazu nutze ich zuerst eine Löschabfrage und danach eine Anfügeabfrage die in der externen DB bestimmte Datensätze löscht und danach anfügt. Den Pfad der externen Datenbank will ich aber nicht in der Abfrage als Quelldatenbank hinterlegen, da der Speicherort variieren kann. Mein Ziel ist über ein Eingabefeld den jeweiligen Pfad vom User eingeben zu lassen. Dafür habe ich
innerhalb meiner DB ich ein verborgenes Formular. Dieses enthält ein Textfeld. Den Standardwert des Textfeldes lasse ich über eine Inputbox setzen. Als Standardwert ist dann der komplette Pfad mit DB-Namen hinterlegt. Das funktioniert. Über Code lasse ich die Lösch- und Anfügeabfrage starten und möchte, das vorher der im Textfeld als Standardwert hinterlegte Pfad in der Löschabfrage als Quell/ZielDB übernommen wird.
Ich habe bereits versucht im IN-Abschnitt der Abfragen folgendes anzugeben:
ME![Forms]![hiddenform]![Historypfad].DefaultValue
Das klappt nicht! Kann mir jemand helfen??

siboern
22.12.2001, 17:43
Hallo h.v.D,
der Verweis auf ein Formularfeld mit "Forms!.... "klappt nach meiner Erfahrung in einem sql-String nicht. Es klappt aber, wenn Du zuerst den Pfad aus dem Formular in eine String-Variable (z.B. strPfad) einliest und diese Variable dann in den sql-String einbaust.
Hoffe das hilft!
Gruß Siegfried

siboern
22.12.2001, 17:46
Hallo H.v.D.
noch einmal: Beim Einbauen der Variablen strPfad in den sql-String bitte nicht die Hochkommas vergessen, also:
sqlText1 & '" & strPfad & "' sqltext2
Gruß Siegfried

A.S.
23.12.2001, 09:41
Moin....

Den Weg über die Stringvariable braucht man nicht unbedingt, kann man aber aus Gründen der Übersichtlichkeit nutzen.

Der Fehler in dieser Zeile

ME![Forms]![hiddenform]![Historypfad].DefaultValue

liegt darin das Me auf das aktuelle Form-Objekt verweist und mit "Forms!HiddenForm" auf ein anderes Form zugegriffen werden soll. Mit:

Forms!HiddenForm!Historypfad.DefaultValue

sollte es IMHO funktionieren.

Entweder wie Sigfried vorgeschlagen hat mit

Dim strPfad As String
Dim strSQL As String
strPfad = Forms!HiddenForm!Historypfad.DefaultValue
strSQL = "DELETE .......'" & strPfad & "'" & strSQL

oder direkt mit

Dim strSQL As String
strSQL = "DELETE .......'" & Forms!HiddenForm!Historypfad.DefaultValue & "'" & strSQL

sollte es funktionieren.

------------------
HTH

Arno

H.v.D
23.12.2001, 10:10
Ich habe probiert Eure Tips umzusetzen. Es erfolgt zwar keine Fehlermeldung, aber trotzdem funktioniert es noch nicht richtig. Der zuammengesetzte SQL-String in den Entwurfsmodus einer Abfrage eingesetzt funktioniert erst wenn ich die Anführungszeichen, die Access automatisch einfügt per Hand entferne. Die Prozedur sah folgendermaßen aus:

Private Sub ExportEoM_Click()
Dim quer1 As String
quer1 = "DELETE * FROM Tabellenname IN" & "'" & Forms!hiddenform!Historypfad.DefaultValue & "'" & "WHERE (((Tabellenname.Year) Like [forms]![Formularname]![EoMExportyear]));"
End Sub

Da es nicht funktionierte habe ich noch folgendes probiert, was leider auch nicht funktioniert:

Private Sub ExportEoM_Click()
Dim dbs As Database, qdf As QueryDef, strSQL As String
Set dbs = CurrentDb
strSQL = "DELETE * FROM Tabellenname IN" & "'" & Forms!hiddenform!historypfad.DefaultValue & "'" & "WHERE (((Tabellenname.Year) Like [forms]![Formularname]![EoMExportyear]));"
Set qdf = dbs.CreateQueryDef("", strSQL)
End Sub

Leider auch kein Ergebnis, was mein Problem löst. Sieht jemand von Euch mögliche Fehler?
Die Dateipfade und Namen habe ich überprüft, dort ist kein Fehler.

A.S.
28.12.2001, 09:21
Hallo Heiner,

Private Sub ExportEoM_Click()
Dim quer1 As String
quer1 = "DELETE * FROM Tabellenname IN " & _
"'" & Forms!hiddenform!Historypfad.DefaultValue & _
"' WHERE (((Tabellenname.Year) Like " & _
[forms]![Formularname]![EoMExportyear] & "));"
End Sub

Hinter dem IN und vor dem WHERE fehlten Freizeichen. Den Bezug auf das Formular klammere ich bei solchen Aktionen immer aus dem eigentlichen SQL-Text aus, so das als Parameter der eigentliche Wert und kein Bezug übergeben wird.

BTW: Damit hast Du dann zwar den SQL-String. Den solltest Du aber noch über DoCmd.RunSQL ausführen ;)

------------------
HTH

Arno

H.v.D
04.01.2002, 15:13
Hallo!

Habe meine Fehler korrigiert und kann mich nur noch tausendmal für eure Hilfe bedanken. Jetzt funktioniert es so wie es soll!

Danke! :)