DatabaseQuery()

Syntaxe

Resultat = DatabaseQuery(#BaseDeDonnees, Requete$ [, Options])
Description
Exécute une requête SQL qui ne modifie pas la base de donnée (de type 'SELECT' par exemple).

Arguments

#BaseDeDonnees La base de données à utiliser.
Requete$ La requête SQL à exécuter.
Options (optionnel) Peut être une des valeurs suivantes:
  #PB_Database_StaticCursor : Exécute la requête pour accéder au résultat d'une manière séquentielle. 
                              Il n'est pas possible de revenir en arrière avec PreviousDatabaseRow() ou FirstDatabaseRow() 
                              sur certains pilotes, mais c'est le moyen le plus rapide pour obtenir les données (par défaut).
  #PB_Database_DynamicCursor: Exécute la requête pour accéder au résultat d'une manière aléatoire 
                              en utilisant PreviousDatabaseRow() ou FirstDatabaseRow().
                              Cela peut être plus lent, voire non pris en charge sur certains pilotes.

Valeur de retour

Renvoie une valeur non nulle si la requête a réussi, zéro sinon (en raison d'une erreur SQL ou une requête mal formatée).

Remarques

Pour modifier une base de données, utiliser DatabaseUpdate().

Si une requête n'a pas abouti, la description exacte de l'erreur peut être récupérée grâce à DatabaseError().

Si une requête a abouti alors NextDatabaseRow() peut être utilisé pour lister les enregistrements renvoyés. Cette commande affecte toujours NextDatabaseRow() même si aucun enregistrement n'est renvoyé par la requête. Il est conseillé d'utiliser DatabaseUpdate() quand une requête ne renvoie jamais d'enregistrement.

Pour obtenir le nombre de colonnes (champs) renvoyé par la requête, utiliser DatabaseColumns().
Pour exécuter une requête qui ne renvoie pas tous les enregistrements (données), utiliser DatabaseUpdate() au lieu de DatabaseQuery()().

Une fois que les résultats de la requête ne sont plus nécessaires, FinishDatabaseQuery() doit être appelée pour libérer toutes les ressources de la requête.

La requête peut contenir des espaces réservés pour les variables de liaison. Ces variables doivent être définies avant d'appeler SetDatabaseString(), SetDatabaseLong() etc. Après l'exécution de la requête, les variables liées sont effacées et doivent être définies à nouveau pour de futurs appels. La syntaxe de spécification des variables liées à SQL dépend de la base de données. Voir le deuxième exemple ci-dessous.

Exemple

  ; D'abord, il faudra se connecter à une base de données qui contient une table 'employee'
  ;
  If DatabaseQuery(#BaseDeDonnees, "SELECT * FROM employee") ; Recupère tous les enregistrements de la table 'employee'
  
    While NextDatabaseRow(#BaseDeDonnees) ; Enumeration des enregistrements
      Debug GetDatabaseString(#BaseDeDonnees, 0) ; Affichage du contenu du premier champ
    Wend

    FinishDatabaseQuery(#BaseDeDonnees)
  EndIf

Exemple: Variables liées avec SQLite, MySQL et ODBC

  ; SQLite, MySQL et ODBC partagent la même syntaxe pour les variables de liaison, indiquées par le caractère "?" 
  ;
  SetDatabaseString(#Database, 0, "test")  
  If DatabaseQuery(#Database, "SELECT * FROM employee WHERE id=?")    
    ; ...
  EndIf

Exemple: PostgreSQL

  ; PostgreSQL utilise une autre syntaxe dans la déclaration: $1, $2 ..  pour indiquer le paramètre indéfini
  ;
  SetDatabaseString(#Database, 0, "test")  
  If DatabaseQuery(#Database, "SELECT * FROM employee WHERE id=$1")    
    ; ...
  EndIf

Voir aussi

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

OS Supportés

Tous

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