Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Falke22 am Februar 16, 2012, 10:20:20

Titel: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 16, 2012, 10:20:20
Hallo,

ich habe folgendes SQL Statement um eine Prozedur auf einem SQL Server aus Access heraus zu starten

SELECT *
FROM OPENQUERY( localhost ,'exec [TourWebHLKFTestFlatGen].dbo.[proc_find_flat_trip] @strTripCode = ''EUR1307'', @strCurrency=''EUR''')


Nun möchte ich anstatt dem hart codierten "EUR1307" den Inhalt eines Textfeldes als Parameter übergeben.

Hab es schon mit  " ' & Textfeld & ' " und ' " & Textfeld & " ' versucht aber ohne Erfolg.

Jemand ne Idee wie ich es richtig machen muss?

Vielen Dank im voraus
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: bahasu am Februar 17, 2012, 05:27:36
Moin,

SELECT *
FROM OPENQUERY( localhost ,'exec [TourWebHLKFTestFlatGen].dbo.[proc_find_flat_trip] @strTripCode = & chr(34) & Textfeld & chr(34), @strCurrency=''EUR''')

Harald
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 17, 2012, 10:33:00
Erstmal vielen Dank für den Tipp.
Leider bekomme ich die Fehlermeldung "Falsche Syntax in der Nähe von &"

Mein Code sieht mit deiner Hilfe jetzt so aus

& chr(34) & frm_ReisePrüfung.cmbReise & chr(34)

Hatte es auch schon mit eckigen Klammern versucht aber leider ohne Erfolg

& chr(34) & [frm_ReisePrüfung].[cmbReise] & chr(34)

Könnte mir nochmal jemand helfen?
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: bahasu am Februar 17, 2012, 11:02:22
Hi,

vermutlich hatte ich ' vergessen.
Probier mal:
SELECT *
FROM OPENQUERY( localhost ,'exec [TourWebHLKFTestFlatGen].dbo.[proc_find_flat_trip] @strTripCode = ' & chr(34) & Textfeld & chr(34) & ', @strCurrency=''EUR''')
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 17, 2012, 11:09:40
Hmm er meldet immer noch den Syntaxfehler. Hab auch schon versucht anstatt dem Textfeld nen String einzusetzen aber ohne erfolg
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Josef P. am Februar 17, 2012, 13:26:47
Hallo!

Kann es sein, dass ihr von unterschiedlichen Szenarien schreibt?
Wo steht der Ausdruck
SELECT *
FROM OPENQUERY( localhost ,'exec [TourWebHLKFTestFlatGen].dbo.[proc_find_flat_trip] @strTripCode = ''EUR1307'', @strCurrency=''EUR''')

Steht er in einer gespeicherten Prozedur oder in einem VBA-Modul?

Wird möglicherweise eine ADP-Anwendung genutzt?

mfg
Josef
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 17, 2012, 13:48:12
Der Code ist Inhalt einer Abfrage.

SELECT *
FROM OPENQUERY( localhost ,'exec [TourWebHLKFTestFlatGen].dbo.[proc_find_flat_trip] @strTripCode = ''EUR1307'', @strCurrency=''EUR''')


Die aufgerufene Prozedur läuft auf einem SQL Server und wird mithilfe der Abfrage geöffnet
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Josef P. am Februar 17, 2012, 14:04:55
Ich nehme an, dass nicht nur die Prozedur sondern auch die Select-Anweisung auf einem SQL-Server läuft und der SQL-Code in einer Abfrage in einer ADP steht. Liege ich richtig mit meiner Annahme?
Vorab: ich kenne mich mit ADP-Dateien zu wenig aus, da ich das nie produktiv verwendete.
Wenn das eine ADP-Datei ist, steht der SQL-Code in einer Sicht bzw. in einer gespeicherten Prozedur im SQL-Server. Dieser wird vermutlich nicht viel mit Formularbezügen anfangen können.
Kannst du nicht direkt die SP z. B. mittels ADODB.Command aufrufen und damit ein Recordset öffnen?
Falls es keine ADP-Datei ist und es sich um eine Jet-Abfrage handelt, wird Jet die Anweisung OpenQuery nicht bekannt sein.

mfg
Josef
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 20, 2012, 11:10:54
Hi,

sorry dass ich mich jetzt erst melde, aber gab ein bissl Streß hier und dann kam das WOchenende ;)

Die Select Abfrage wird aus Access heraus gestartet, allerdings ist das gesamte Openquery auf dem SQL Server.

Müsste es nicht möglich seinaus Access heraus an die SQL-Abfrage einen Parameter zu übergeben?


Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Josef P. am Februar 20, 2012, 12:28:15
Hallo!

ZitatDie Select Abfrage wird aus Access heraus gestartet, ...
Und wie wird sie gestartet? Verwendest du eine ADP-Datei oder startest du die SQL-Anweisung über ADODB-Recordset bzw. ADODB.Command oder nutzt du eine Pass-Through-Abfrage?

mfg
Josef
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 20, 2012, 12:53:17
Hey sorry hatte ich vergessen zu sagen.

Es handelt sich dabei um eine Pass-Through-Abfrage
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Josef P. am Februar 20, 2012, 12:58:17
Hallo!

In einer PT-Abfrage kannst du keine Parameter von außen ändern.
Du kannst aber einen Umweg gehen und die PT-Abfrage per Code anpassen und die SQL-Anweisung inkl. den gewünschten Parametern verwenden.

Prinzip:

dim qdf das DAO.QueryDef
set qdf = Codedb.QueryDefs("Deine PT-Abfrage")
qdf.SQL = FertigerSqlAusdruck ' also SQL-Anweisung wie im ersten Beitrag gezeigt - per VBA zusammengestellt



Aber: was machst du denn mit dem Ergebnis dieser PT-Abfrage? Falls du das nicht als Datenbasis für einen Bericht verwendest oder als Unterabfrage für eine Jet-Abfrage einsetzt, könntest du ein ADODB-Recordset erzeugen und diese an das Formular binden bzw. die Daten auslesen.

Übrigens:
Benötigst du überhaupt OpenQuery? Falls du die PT-Abfrage auf dem gleichen Server ausführst, könntest du doch direkt die Prozedur in der PT-Abfrage bzw. mit ADODB.Command starten.

mfg
Josef
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 20, 2012, 13:16:29
Hallo,

danke erstmal für den Tipp werd ich gleich ausprobieren :)

Wozu ich die PT_Abfrage brauche

Ich habe einen externen SQL Server auf denen die Reisedaten liegen.
Wenn ich jetzt eine Reise auswähle soll er die dazugehörigen Daten aus der SQL-Datenbank holen, aber nur bestimmte Spalten anzeigen
Dafür habe ich dann eine weitere Abfrage die auf die PT-Abfrage zugreift.
Hintergrund ist der dass zur Kontrollenur bestimmte Zeieln angezeigt werden sollen aber hinterher natürlich alle Daten übertragen werden müssen.

Wahrscheinlich kann man das auch schneller lösen, aber da ich schön länger nicht mehr mit Access gearbeitet hab und schnelle Lösung her musste hab ich den Weg gewählt
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 20, 2012, 13:34:59
Mal ne naive Frage (bitte nicht steinigen wenn es nicht gehen sollte)

Kann ich nciht auch die Reisenummer als Kriterium aus der Prozedur herausnehmen und dann über eine WHERE-Klausel selektieren?
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Josef P. am Februar 20, 2012, 13:41:06
Ob du die Reisenummer hausnehmen kannst, hängt von der SP ab. ;)

Bei vielen Datensätzen wirst du allerdings keine Freude haben, da Jet-Filter auf die PT-Abfrage keine serverseitgie Indexnutzung ermöglicht.

Die einfachste (übersichtlichste und am wengisten fehleranfällige) Variante ist meiner Ansicht nach, wenn du das Recordset per ADODB.Command oder ADODB.Recordset öffnest, an das Formular bindest und im Formular die Felder anzeigst, die du sehen willst.
Falls du unbedingt den Weg über die PT-Abfrage gehen musst, ist das Ändern der SQL-Anweisung aber auch nicht die große Herausforderung.

Bezüglich der Spalten: warum stellst du die nicht gleich in der PT-Abfrage ein?
Titel: Re: In Openquery Textfeld als Parameter übergeben
Beitrag von: Falke22 am Februar 20, 2012, 14:27:51
Hi,

das Problem bei den Spalten ist dass ich alle Spalten der Abfrage hinterher weitergeben muss, aber zur Prüfung nur einige Spalten anzeigen brauch/soll wegen der Übersicht

Habs jetzt auf die schnelle gelöst in dem ich die PT-Abfrage ohne Reisenummer laufen lasse und bei den nachfolgenden Abfragen dann nach Reisenummer selektiere

Aber werde demnächst eine ordentliche und saubre Lösung entwickeln bei der ich die Anregungen aufnehme und versuche weitestgehend umzusetzen

Danke für deine Hilfe und Mühen