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;J'utilise la dll "libmysql.dll" :
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;
- version inconnue (non renseignée),
- taille : 2 359 296 octets
Quelqu'un sait-il comment il faut faire ?
Jean-Baptiste
Partager