IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Lister les champs issus d'une requette [MySql][Api MySql]


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut Lister les champs issus d'une requette [MySql][Api MySql]
    Bonjour à tous.

    Je débute dans l'utilisation de MySql via Delphi. J'ai suivi différent tutoriels dont le principal est celui-ci : http://lfe.developpez.com/PasmySQL/

    Il est assez pratique et je suis parvenu à obtenir le contenu de ma requette. Sauf que je voudrais également récupérer le nom des champs. Et là, je n'y arrive pas. Depuis ce matin, je n'arrête pas de chercher (y compris sur internet) mais sans succès. Helas la DLL que j'utilise ne semble pas tellement documentée.


    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    procedure TForm1.btnSelectClick(Sender: TObject);
    var
        mySQLConnection : PMYSQL;
        myRES : PMYSQL_RES;
        myROW : PMYSQL_ROW;
        aStr : AnsiString;
        i, j : Cardinal;
        sSql : string ;
    begin
      sSql := '' ;
      sSql := sSql + 'SELECT TR_USER . * , TR_ROLE . * ' ;
      sSql := sSql + 'FROM TR_USER ' ;
      sSql := sSql + 'INNER JOIN TJ_USER_ROLE ON URO_USR_ID_FK = USR_ID_K ' ;
      sSql := sSql + 'INNER JOIN TR_ROLE ON URO_RO_ID_FK = RO_ID_K ' ;
        if mysql_query(g_mySQLConnection, PAnsiChar(sSql)) = 0 then begin
            myRES := mysql_store_result(g_mySQLConnection);
            if (myRES <> nil) then begin
                for i := 0 to myRES.row_count - 1 do begin
                    aStr := '' ;
                    myROW := mysql_fetch_row(myRES);
                    for j := 0 to mysql_num_fields(myRES) - 1 do
                    begin
                      if(i = 0)then
                      begin
                        aStr := aStr + ' | ' + myRES.fields[j].name; // <= Ici, ça récupère n'importe quoi au lieu de récupérer le nom de la colonne.
                      end
                      else
                      begin
                        aStr := aStr + ' | ' + myROW^[j];
                      end;
                    end;
                    lbSelect.Items.Add(aStr);
                end;
                mysql_free_result(myRES);
            end;
        end;
    end;

    Et voici la déclaration des types que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    type
      PMYSQL_RES = ^TMYSQL_RES;
      TMYSQL_RES = record
        row_count: my_ulonglong;
        field_count, current_field: longword;
        fields: PMYSQL_FIELDS;
        data: PMYSQL_DATA;
        data_cursor: PMYSQL_ROWS;
        field_alloc: TMEM_ROOT;
        row: PMYSQL_ROW;          // If unbuffered read
        current_row: PMYSQL_ROW;  // buffer to current row
        lengths: pLongword;       // column lengths of current row
        handle: PMYSQL;           // for unbuffered reads
        eof: my_bool;             // Used my mysql_fetch_row
      end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type
      PMYSQL_FIELDS = ^TMYSQL_FIELDS;
      TMYSQL_FIELDS = array[0..MaxInt div SizeOf(TMYSQL_FIELD) - 1] of TMYSQL_FIELD;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type
      PMYSQL_FIELD = ^TMYSQL_FIELD;
      TMYSQL_FIELD = record
        name: pChar;
        table: pChar;
        org_table : pChar;
        db : pChar;
        def: pChar;
        length: longword;
        max_length: longword;
        flags: longword;
        decimals: longword;
        _type: enum_field_types;
      end;
    J'utilise la dll "libmysql.dll" :
    - version inconnue (non renseignée),
    - taille : 2 359 296 octets


    Quelqu'un sait-il comment il faut faire ?

    Jean-Baptiste

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    pas exactement...mais ce que retourne la DLL n'est pas très éloigné de ce que récupère directement mon Client MySQL qui interroge directement le serveur en TCP
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Lister les champs d'une table
    Par gentelmand dans le forum VB.NET
    Réponses: 5
    Dernier message: 02/03/2009, 19h03
  2. Lister les champs d'une table
    Par Jb_One73 dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/08/2008, 22h28
  3. lister les champs d'une table
    Par papawemba dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/07/2006, 15h53
  4. [VB6/ACCESS] Lister les champs d'une table
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 07/06/2006, 19h01
  5. vérifier si une ligne existe, et lister les champs
    Par AIexis dans le forum Débuter
    Réponses: 15
    Dernier message: 27/12/2005, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo