bonsoir,
Voila, je me trouve confronté à un problème d'affichage de données provenant de mysql.
en fait, le but est de recopier les données dans un listcontrol en mode report.
Cette affichage est donc en colonnes.
Or, j'ai un problème à ce niveau là !
Lors de mes requetes, les colonnes ne sont pas toutes affiché ...
Voici le code :
et voici le code qui me permet de vérifier si num_field est bien égal au nombre de champs voulu :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 { UINT i; LVCOLUMN m_pCol; for (i = 0; i < num_Cols; i++) { // m_pCol = new LVCOLUMN; m_pCol.pszText = fd[0].name; m_lvDbTable.InsertColumn(i, m_pCol.pszText, LVCFMT_LEFT, 100); } return TRUE; } { MYSQL *conn; // initialisation if((conn = mysql_init(NULL)) == NULL) { } // connexion au serveur (ici, en local) if(mysql_real_connect(conn,"127.0.0.1","aquarium","aquarium","aquarium",0,NULL,0)==NULL) { C_problemeSql dlg; dlg.DoModal(); } // Run the query if (( mysql_query(conn, "select * from t_brutes") ==0)) { res = mysql_store_result(conn); num_fields = mysql_num_fields(res); fd = mysql_fetch_fields(res); // Build the listview headers based on the number of columns returned num_fields = mysql_num_fields(res); fd = mysql_fetch_fields(res); if (!BuildListView(num_fields, fd)) { return; } // Set some nice grid lines and effect to the listview m_lvDbTable.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE | LVS_EX_GRIDLINES | LVS_EX_INFOTIP); // Get all the rows in the result set while ( (row = mysql_fetch_row(res))) { for (j = 0; j < num_fields; j++) { // Fill in the listview items and subitems lvItem.mask = LVIF_TEXT; lvItem.iItem = i; lvItem.iSubItem = j; lvItem.pszText = row[j]; m_lvDbTable.InsertItem(&lvItem); m_lvDbTable.SetItem(&lvItem); // Next Item } i++; } } // Now free the resources mysql_free_result(res); // on ferme la connexion au serveur MySQL mysql_close(conn); }
Explication :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 #include <stdafx.h> #include <mysql.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> MYSQL_RES *res; MYSQL_FIELD fd[5]; MYSQL_ROW row; unsigned int num_fields; unsigned int i; char test[200]=""; void main(void) { MYSQL *conn; // initialisation if((conn = mysql_init(NULL)) == NULL) { } // connexion au serveur (ici, en local) if(mysql_real_connect(conn,"127.0.0.1","aquarium","aquarium","aquarium",0,NULL,0)==NULL) { } if (( mysql_query(conn, "select date,heure,a0,a1 from t_validees") ==0)) { res = mysql_store_result(conn); printf("res : %d\n",res); // Build the listview headers based on the number of columns returned num_fields = mysql_num_fields(res); // j'ai ajouter ceci fd = mysql_fetch_fields(res); // for(i = 0; i < num_fields; i++) // { printf("fd : %s\n", fd->name); sprintf(test,"%s%d ", test,fd[i].name); printf("%s\n",test); printf("Le champ %d est %s\n", i, fd[i].name); } ; //mettre un breakpoint ici et regarder ce que vaut test // Now free the resources mysql_free_result(res); // on ferme la connexion au serveur MySQL mysql_close(conn); } }
j'ai pu remarquer qu'il n'y a jamais de problème lors du premier passage , mais des qu'il arrive au deuxieme, il plante ... j'en conclu donc que c'est la structure res qui déconne, elle n'enregistre qu'un seul nom de colonne au lieu des 4 logiques !
Quelqu'un m'as proposé de mettre a new à m_pcol mais je ne voit pas comment faire !
De plus j'ai changé et mis "i" à un et helas, il ne reconnait rien donc je pense que c'est la structure qui déconne, mais la, je suis dépassé !
please, help me, je doit finir sa pour mardi 19H et ce serait dommage d'avoir une sale note pour un truc pareil![]()
Partager