DatabasePrint

Ecrit une table ou le résultat de l'exécution d'une requête SQL dans le journal des Experts.

long  DatabasePrint(
   int           database,          // handle de la base de données obtenu avec DatabaseOpen
   const string  table_or_sql,      // table ou requête SQL
   uint          flags              // combinaison de flags
   );

Paramètres

database

[in]  Handle de la base de données obtenu avec DatabaseOpen().

table_or_sql

[in]   Le nom d'une table ou le texte d'une requête SQL dont les résultats sont à écrire dans le journal des Experts.

flags

[in]  Combinaison de flags déterminant le format de sortie. Les flags sont :

DATABASE_PRINT_NO_HEADER      — n'affiche pas les noms des colonnes de la table (noms des champs)
DATABASE_PRINT_NO_INDEX         — n'affiche pas les index des chaînes de caractères
DATABASE_PRINT_NO_FRAME        — n'affiche pas de cadre séparant l'en-tête des données
DATABASE_PRINT_STRINGS_RIGHT — aligne les chaînes de caractères à droite.

Si flags=0, les colonnes et les chaînes de caractères sont affichées, l'en-tête et les données sont séparés par un cadre, et les chaînes de caractères sont alignées sur la gauche.

Valeur de Retour

Retourne le nombre de chaînes exportées ou -1 en cas d'erreur. Pour obtenir le code d'erreur, utilisez GetLastError(), les réponses possibles sont :

  • ERR_INTERNAL_ERROR (4001)                       — erreur critique d'exécution ;
  • ERR_NOT_ENOUGH_MEMORY (4004)              - mémoire insuffisante ;
  • ERR_DATABASE_INTERNAL (5120)                 — erreur interne de la base de données ;
  • ERR_DATABASE_INVALID_HANDLE (5121)      - handle invalide de la base de données ;  

Note

Si le journal doit afficher les résultats de la requête, la requête SQL doit commencer avec "SELECT" ou "select". En d'autres termes, la requête SQL ne peut pas modifier le statut de la base de données, sinon DatabasePrint() échouera avec une erreur.

Exemple :

//+------------------------------------------------------------------+
//| Fonction de lancement du programme                               |
//+------------------------------------------------------------------+
void OnStart()
  {
   string filename="departments.sqlite";
//--- crée ou ouvre une base de données dans le répertoire commun du terminal
   int db=DatabaseOpen(filenameDATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE |DATABASE_OPEN_COMMON);
   if(db==INVALID_HANDLE)
     {
      Print("DB: ", l'ouverture du fichier filename" a échouée avec le code "GetLastError());
      return;
     }
 
//--- crée la table COMPANY
   if(!CreataTableCompany(db))
     {
      DatabaseClose(db);
      return;
     }
//--- crée la table DEPARTMENT
   if(!CreataTableDepartment(db))
     {
      DatabaseClose(db);
      return;
     }
 
//--- affiche la liste de tous les champs des tables COMPANY et DEPARTMENT
   PrintFormat("Essaye d'imprimer la requête \"PRAGMA TABLE_INFO(COMPANY);PRAGMA TABLE_INFO(DEPARTMENT)\"");
   if(DatabasePrint(db"PRAGMA TABLE_INFO(COMPANY);PRAGMA TABLE_INFO(DEPARTMENT)"0)<0)
     {
      PrintFormat("Echec de DatabasePrint(\"PRAGMA TABLE_INFO()\"), code d'erreur=%d"GetLastError());
      DatabaseClose(db);
      return;
     }
//--- affiche la table COMPANY dans le journal
   PrintFormat("Essaye d'imprimer la requête \"SELECT * from COMPANY\"");
   if(DatabasePrint(db"SELECT * from COMPANY"0)<0)
     {
      Print("Echec de DatabasePrint avec le code "GetLastError());
      DatabaseClose(db);
      return;
     }
//--- récupère le texte des tables COMPANY et DEPARTMENT
   string request="SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT "
                  "ON COMPANY.ID = DEPARTMENT.EMP_ID";
//--- affiche le résultat combiné
   PrintFormat("Essaye d'imprimer la requête \"SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT\"");
   if(DatabasePrint(dbrequest0)<0)
     {
      Print("Echec de DatabasePrint avec le code "GetLastError());
      DatabaseClose(db);
      return;
     }
//--- ferme la base de données
   DatabaseClose(db);
  }
/*
Conclusion :
Essaye d' imprimer la requête "PRAGMA TABLE_INFO(COMPANY);PRAGMA TABLE_INFO(DEPARTMENT)"
#cid name    type     notnull dflt_value pk
-+-------------------------------------------
1|   0 ID      INT            1             1 
2|   1 NAME    TEXT           1             0 
3|   2 AGE     INT            1             0 
4|   3 ADDRESS CHAR(50)       0             0 
5|   4 SALARY  REAL           0             0 
#cid name   type     notnull dflt_value pk
-+------------------------------------------
1|   0 ID     INT            1             1 
2|   1 DEPT   CHAR(50)       1             0 
3|   2 EMP_ID INT            1             0 
Essaye d' imprimer la requête "SELECT * from COMPANY"
#ID NAME  AGE ADDRESS     SALARY
-+--------------------------------
1|  1 Paul   32 California 25000.0 
2|  2 Allen  25 Texas      15000.0 
3|  3 Teddy  23 Norway     20000.0 
4|  4 Mark   25 Rich-Mond  65000.0 
5|  5 David  27 Texas      85000.0 
6|  6 Kim    22 South-Hall 45000.0 
7|  7 James  24 Houston    10000.0 
Try to print request "SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT"
#EMP_ID NAME  DEPT       
-+-------------------------
1|      1 Paul  IT Billing  
2|      2 Allen Engineering 
3|        Teddy             
4|        Mark              
5|        David             
6|        Kim               
7|      7 James Finance     
*/
//+------------------------------------------------------------------+
//| Crée la table COMPANY                                            |
//+------------------------------------------------------------------+
bool CreateTableCompany(int database)
  {
//--- supprime la table COMPANY si elle existe
   if(DatabaseTableExists(database"COMPANY"))
     {
      //--- supprime la table
      if(!DatabaseExecute(database"DROP TABLE COMPANY"))
        {
         Print("Echec de la suppression de la table COMPANY avec le code "GetLastError());
         return(false);
        }
     }
//--- crée la table COMPANY
   if(!DatabaseExecute(database"CREATE TABLE COMPANY("
                       "ID INT PRIMARY KEY     NOT NULL,"
                       "NAME           TEXT    NOT NULL,"
                       "AGE            INT     NOT NULL,"
                       "ADDRESS        CHAR(50),"
                       "SALARY         REAL );"))
     {
      Print("DB: échec de création de la table COMPANY avec le code "GetLastError());
      return(false);
     }
 
//--- insére les données dans la table COMPANY
   if(!DatabaseExecute(database"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 25000.00); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (5, 'David', 27, 'Texas', 85000.0); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (6, 'Kim', 22, 'South-Hall', 45000.0); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (7, 'James', 24, 'Houston', 10000.00); "))
     {
      Print("Echec de l'insertion dans COMPANY avec le code "GetLastError());
      return(false);
     }
//--- succès
   return(true);
  }
//+------------------------------------------------------------------+
//| Crée la table DEPARTMENT                                         |
//+------------------------------------------------------------------+
bool CreateTableDepartment(int database)
  {
//--- supprime la table DEPARTMENT si elle existe
   if(DatabaseTableExists(database"DEPARTMENT"))
     {
      //--- supprime la table
      if(!DatabaseExecute(database"DROP TABLE DEPARTMENT"))
        {
         Print("Echec de la suppression de la table DEPARTMENT avec le code "GetLastError());
         return(false);
        }
     }
//--- crée la table DEPARTMENT
   if(!DatabaseExecute(database"CREATE TABLE DEPARTMENT ("
                       "ID      INT PRIMARY KEY   NOT NULL,"
                       "DEPT    CHAR(50)          NOT NULL,"
                       "EMP_ID  INT               NOT NULL);"))
     {
      Print("DB: échec de création de la table DEPARTMENT avec le code "GetLastError());
      return(false);
     }
 
//--- insére les données dans la table DEPARTMENT
   if(!DatabaseExecute(database"INSERT INTO DEPARTMENT (ID,DEPT,EMP_ID) VALUES (1, 'IT Billing', 1); "
                       "INSERT INTO DEPARTMENT (ID,DEPT,EMP_ID) VALUES (2, 'Engineering', 2); "
                       "INSERT INTO DEPARTMENT (ID,DEPT,EMP_ID) VALUES (3, 'Finance', 7);"))
     {
      Print("Echec de l'insertion dans DEPARTMENT avec le code "GetLastError());
      return(false);
     }
//--- succès
   return(true);
  }
//+-------------------------------------------------------------------

Voir aussi

DatabaseExport, DatabaseImport