Erstellen einer parametrisierten Abfrage
Auf die gleiche Art, wie Sie parametrisierte Ansichten unter Verwendung des Ansichts-Designers oder der Programmiersprache erstellen, können Sie auch parametrisierte SQL Pass-Through-Abfragen erstellen.
So erstellen Sie eine parametrisierte Abfrage mit SQL Pass-Through
Geben Sie vor einem Visual FoxPro-Parameter ein Fragezeichen (?) ein, und fügen Sie den Parameter dann in die SQL-Zeichenfolge ein, die Sie mit Hilfe von SQLEXEC( ) an den Server senden.
Der von Ihnen angegebene Parameter wird als Visual FoxPro-Ausdruck ausgewertet, dessen Wert als Bestandteil der SQL-Anweisung der Ansicht gesendet wird. Schlägt die Auswertung fehl, fordert Visual FoxPro zur Eingabe des Parameterwertes auf.
Tipp Handelt es sich bei dem Parameter um einen Ausdruck, so schließen Sie den Parameterausdruck in Klammern ein. Dadurch ist gewährleistet, dass der vollständige Ausdruck als Teil des Parameters ausgewertet wird.
Befindet sich z. B. die Tabelle customer der Datenbank Testdata auf einem Remoteserver, erstellt der folgende Code eine parametrisierte Abfrage, bei der nur die Kunden aus dem Land berücksichtigt werden, das dem für den ?cCountry-Parameter angegebenen Wert entspricht.
? SQLEXEC(1,'SELECT * FROM customer WHERE customer.country = ?cCountry')
Wenn Sie den Benutzer dazu auffordern möchten, einen Wert einzugeben, müssen Sie den als Parameter verwendeten Ausdruck in Anführungszeichen setzen. Weitere Informationen zum Auffordern zur Eingabe eines Parameterwertes finden Sie unter Erstellen von Ansichten.
An den folgenden Stellen akzeptiert eine ODBC-Datenquelle keine Parameter:
- In einer Feld- oder Tabellenliste einer SELECT-Anweisung.
- Für beide Ausdrücke eines Vergleichsprädikats.
- Für beide Operanden eines binären Operators.
An den folgenden Stellen innerhalb der WHERE- oder HAVING-Klauseln einer SELECT-Anweisung akzeptiert eine ODBC-Datenquelle ebenfalls keine Parameter:
- Sowohl für den ersten als auch für den zweiten Operanden eines BETWEEN-Prädikats.
- Sowohl für den ersten als auch für den dritten Operanden eines BETWEEN-Prädikats.
- Sowohl für den Ausdruck als auch für den ersten Wert eines IN-Prädikats.
- Für den Operanden eines monadischen Additions- oder Subtraktionsoperators ( + oder -).
- Für das Argument einer SET-Funktion.
Verwenden von SQL-Server-Ein-/Ausgabeparametern
Mit Hilfe von Ein-/Ausgabeparametern können Sie zwischen Visual FoxPro und SQL-Server Werte übergeben. Ein-/Ausgabeparameter sind nur über SQL Pass-Through verfügbar; sie können nicht in Ansichten verwendet werden.
Die folgende Tabelle enthält ein Beispiel, das Ein-/Ausgabeparameter zur Übergabe von Werten von Visual FoxPro in eine gespeicherte Prozedur von SQL-Server verwendet, wobei das Ergebnis an eine Visual FoxPro-Variable zurückgegeben wird.
Verwenden von Ein-/Ausgabeparametern bei einer gespeicherten Prozedur in SQL-Server
Code | Kommentar |
---|---|
|
Erstellt eine gespeicherte Prozedur, sp_test, die zwei Variablen (mult1 und mult2 ) multipliziert und dann das Ergebnis in der Variablen result speichert. |
|
Erstellt eine Visual FoxPro-Variable, die den Wert des Ausgabeparameters erhält, wenn dieser von SQL-Server an Visual FoxPro übergeben wird. |
|
Führt die gespeicherte Prozedur in SQL-Server aus, wobei die Werte 2 und 4 zum Multiplizieren in der gespeicherten Prozedur übergeben werden. |
|
Zeigt den Wert des Ausgabeparameters an. |
Definieren von Parametern
Die Syntax für Ausgabeparameter lautet:
?@parameter_name
Wenn Sie Ein-/Ausgabeparameter implementieren, sollten Sie die Visual FoxPro-Variablen, die Sie in den SQL Pass-Through-Befehl einfügen möchten, zunächst definieren, bevor Sie sie in der SQL-Anweisung verwenden. Damit das Senden und Empfangen von Informationen mit Hilfe von Ein-/Ausgabeparametern gelingt, müssen Sie folgende Parameter definieren:
Einen Parameter für eine gespeicherte Prozedur mit einem Ausgabedatentyp, die einen Wert zurückgibt.
Sie müssen für den Parameter Ihrer gespeicherten Prozedur, z. B.
@result
, sowohl einen Ausgabetyp, z. B.int
, als auch einen Wert übernehmen.Einen Ausdruck als Ausgabeparameter (**@**parameter_name), der ausgewertet und einer vorhandenen Visual FoxPro-Variable zugewiesen wird.
Wenn der Ausdruck für Ihren Ausgabeparameter
?@outParam
lautet, muss Ihre Anwendung die Visual FoxPro-Variable alsoutParam
definiert haben.Anmerkung Wenn Sie weder in Visual FoxPro noch in der gespeicherten Prozedur einen Ausgabeparameter verwenden, und wenn Sie keine Visual FoxPro-Variable für den Rückgabewert definieren, wird sich der Wert des Visual FoxPro-Parameters nicht ändern.
Umwandeln von Datentypen
Visual FoxPro wandelt zurückgegebene Variablenwerte nach folgenden Regeln um:
- Variablen vom Gleitkommadatentypen (N, F, B) werden in N umgewandelt.
- Die Anzeigegröße wird auf 20 festgelegt.
- Die Dezimaleinstellung wird auf die Einstellung der aktuellen Arbeitssitzung festgelegt. Die Dezimaleinstellung wirkt sich nur auf das Standardanzeigeformat aus, nicht auf die Dezimalgenauigkeit.
- Datums- und Zeitvariablen (D, T) werden in Zeitvariablen (T) umgewandelt.
Sie können in Ein-/Ausgabeparametern nicht die Datentypen Memo, Objekt, Bild oder Null verwenden.
Wenn Ihre Anwendung Cursorfelder als Parameter verwendet, versucht Visual FoxPro, das Ergebnis wieder in den ursprünglichen Felddatentyp umzuwandeln.
Zurückgeben von Parameterwerten
Ein-/Ausgabeparameter sind erst verfügbar, nachdem das letzte Resultset einer Anweisung abgerufen wurde. Das bedeutet, dass Ein-/Ausgabewerte nur nach folgenden Anweisungen nach Visual FoxPro zurückgegeben werden:
SQLEXEC( ) gibt (1) im Batch-Modus zurück.
- Oder -
SQLMORERESULTS( ) gibt (2) im Nicht-Batch-Modus zurück.
Wenn die SQLEXEC( )-Anweisung mehrere Resultsets abruft, sind die Ausgabeparameter nur nach dem Abrufen des letzten Resultsets von der Datenquelle mit Sicherheit verfügbar.
Siehe auch
Wiedergeben mehrerer Resultsets | Erstellen von Inklusionsverknüpfungen mit Remotedaten | Verwenden der SQL Pass-Through-Technologie | Implementieren einer Client/Server-Anwendung | Entwurf von Client/Server-Anwendungen | Upsizing von Visual FoxPro-Datenbanken | Erstellen von Ansichten