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:
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:
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:
1 2 3
| type
PMYSQL_FIELDS = ^TMYSQL_FIELDS;
TMYSQL_FIELDS = array[0..MaxInt div SizeOf(TMYSQL_FIELD) - 1] of TMYSQL_FIELD; |
Code:
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 ? :roll:
Jean-Baptiste