DatabaseQuery()

Syntax

Ergebnis = DatabaseQuery(#Datenbank, Abfrage$ [, Flags])
Beschreibung
Führt eine SQL-Abfrage (englisch "SQL query") in der angegebenen Datenbank aus. Es werden nur Abfragen akzeptiert, die nicht die Datenbank-Einträge verändern ('SELECT'-ähnliche Abfragen). Um Veränderungen an der Datenbank durchzuführen, verwenden Sie DatabaseUpdate().

Parameter

#Datenbank Die zu verwendende Datenbank.
Abfrage$ Die auszuführende SQL-Abfrage.
Flags (optional) Die zu verwendenden Flags. Dies kann einer der folgenden Werte sein:
  #PB_Database_StaticCursor : führt die Abfrage aus, um auf das Ergebnis in einer sequentiellen Weise zuzugreifen.
                              Es ist auf manchen Treibern nicht möglich, mittels PreviousDatabaseRow() oder
                              FirstDatabaseRow() zurückzuspringen, aber es ist der schnellere Weg zum Zugriff
                              auf die Daten (Standard).
  #PB_Database_DynamicCursor: führt die Abfrage aus, um auf das Ergebnis in einer zufälligen Weise mittels
                              PreviousDatabaseRow() oder FirstDatabaseRow() zuzugreifen. Dies kann langsamer sein,
                              oder auf manchen Treibern auch nicht unterstützt.

Rückgabewert

Gibt einen Wert ungleich Null zurück, wenn die Abfrage erfolgreich war, oder Null wenn sie fehlgeschlagen ist (wegen eines SQL-Fehlers oder einer falsch formatierten Abfrage).

Anmerkungen

Wenn die Abfrage erfolgreich war, dann kann NextDatabaseRow() zum Auflisten der Einträge (englisch "Records") verwendet werden (siehe Beispiel unten). Im Falle eines Fehlers kann der Fehlertext mittels DatabaseError() ermittelt werden. Es ist sicher NextDatabaseRow() zu verwenden, auch wenn die Abfrage keine Einträge zurückgibt. Um die Anzahl der von der Abfrage zurückgegebenen Spalten (Felder) zu ermitteln, verwenden Sie DatabaseColumns().

Sobald die Abfrage-Resultate nicht mehr benötigt werden, muss FinishDatabaseQuery() aufgerufen werden, um alle Abfrage-Ressourcen freizugeben.

Die Abfrage kann Platzhalter für Bindungsvariablen (englisch "bind variables") enthalten. Solche Variablen müssen vor dem Aufruf der Funktion mittels SetDatabaseString(), SetDatabaseLong() etc. gesetzt werden. Nach dem Ausführen der Abfrage werden die gebundenen Variablen (englisch "bound variables") gelöscht und müssen für zukünftige Aufrufe erneut festgelegt werden. Die Syntax für das Angeben der Bindungsvariablen in SQL ist abhängig von der Datenbank. Das Beispiel unten zeigt die Syntax.

Beispiel

  ; Zuerst stellen wir eine Verbindung zu der 'employee' (Angestellten) Tabelle her
  ;
  If DatabaseQuery(#DatenBank, "SELECT * FROM employee")  ; Ermittelt alle Einträge in der 'employee' Tabelle

    While NextDatabaseRow(#Datenbank)   ; alle Einträge durchlaufen
      Debug GetDatabaseString(#Datenbank, 0)  ; Inhalt vom ersten Feld anzeigen
    Wend

    FinishDatabaseQuery(#Datenbank)
  Else
    MessageRequester("Fehler", "Kann die folgende Abfrage nicht ausführen: "+DatabaseError())
  EndIf

Beispiel: Bindungsvariablen mit SQLite und ODBC

  ; SQLite und ODBC haben die gleiche Syntax für Bindungsvariablen. Diese werden durch das '?' Zeichen angegeben.
  ;
  SetDatabaseString(#Database, 0, "test")  
  If DatabaseQuery(#Database, "SELECT * FROM employee WHERE id=?")    
    ; ...
  EndIf

Beispiel: PostgreSQL

  ; PostgreSQL verwendet eine andere Syntax: $1, $2.. innerhalb der Anweisung, um die undefinierten Parameter anzugeben
  ;
  SetDatabaseString(#Database, 0, "test")  
  If DatabaseQuery(#Database, "SELECT * FROM employee WHERE id=$1")    
    ; ...
  EndIf

Siehe auch

DatabaseUpdate(), NextDatabaseRow() SetDatabaseString(), SetDatabaseLong(), SetDatabaseQuad(), SetDatabaseFloat(), SetDatabaseDouble() SetDatabaseBlob(), SetDatabaseNull()

Unterstützte OS

Alle

<- DatabaseID() - Database Inhaltsverzeichnis - DatabaseUpdate() ->