While(j != nbre_tot_colonnes)

Fermé
romanikou - 20 mai 2005 à 09:18
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 20 mai 2005 à 16:44
bonjour tout le monde,
voilà (au cas où vous ne le sauriez pas encore!!) je fais une APIwin32 sous VisualC++ et je travaille avec ADO avec pRs qui pointe sur un RecordSet.
Voilà je récupère les différents enregistrements d'une table de ma base de données que j'insère dans une listview.Pour tous les enregistrements de ma table je fais un "while(!pRs->EndOfFile)", et je voudrais faire de même pour toutes les colonnes (évitant ainsi d'éviter de répéter continuellement
"if(var.vt != VT_NULL) {..........}" pour chaque SubItem.
Donc je compte le nombre de colonnes et je fais une boucle "tant que j différent du nombre total de colonne" (ceci est en fait pour simplifier le code étant donné que j'ai plus de 30 colonnes), mais ca ne marche pas (abnormal program termination), je ne vois pas le problème!!
(vous verrez également que je regroupe les colonnes par 2 étant donné que pour le 1er champ je dois faire un INSERTITEM puis les autres un SETITEM.
j'espère avoir été assez clair.
Déjà merci


_variant_t Count = pRs->GetFields()->GetCount(); 
Count.ChangeType(VT_I4);
short NbrField = Count.intVal;

while(!pRs->EndOfFile)
{
    while(j != NbrField)
    {
///////////////////////////////////////////////////////////////////////////////////////////
        // On renseigne lvItem
        lvItem.mask = LVIF_TEXT;
        lvItem.iItem = i;

        long NumCol = j;
        _variant_t VarNumCol (NumCol, VT_I4 ); 
        var = pRs->Fields->GetItem(VarNumCol )->Value; 
        bst = var; 
        if(var.vt != VT_NULL) 
        {
            lstrcpy(szBuffer, bst);    
            lvItem.iSubItem = j;
            lvItem.pszText = szBuffer;
            SendMessage(hList1, LVM_INSERTITEM, 0, (LPARAM)&lvItem);
        }

        long NumCol1 = j+1;
        _variant_t VarNumCol1 (NumCol1, VT_I4 ); 
        var = pRs->Fields->GetItem(VarNumCol1 )->Value; 
        bst = var; 
        if(var.vt != VT_NULL) 
        {
            lstrcpy(szBuffer, bst);    
            lvItem.iSubItem = j+1;
            lvItem.pszText = szBuffer;
            SendMessage(hList1, LVM_SETITEM, 0, (LPARAM)&lvItem);
        }
        j++;
    }
    i++;
    pRs->MoveNext();
}

4 réponses

teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
20 mai 2005 à 09:48
Salut,
J'ai pas lu le code mais essaye avec nbrcol-1 :o) ou mieux < nbrcol
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
20 mai 2005 à 14:07
C'est bizarre j'ai l'impression que ton j est pas initialisé. Si c'est bien ça c'est normal que ça plante (ton j vaut une valeur aléatoire, et forcément tu tentes d'accéder à une zone mémoire invalide, d'où le plantage !). Essaie de remplacer ton :

while (j!=nbFields){
...
j++;
}

par :

for(j=0;j<nbFields;j++){
...
}
0
en fait si j'ai initialisé j de cette façon "UINT j=0;" mais ca n'apparait dans le bout de code que j'ai mis.
je vais essayer comme tu m'as dis, mais il me semble avoir déjà essayer.
En tout cas merci beaucoup d'avoir répondu et si j'ai la solution je vous fais signe!!
0
en fait comme je t'avais dis, j'avais bien essayé le for et ca ne marchait pas.
En jouant entre le for et le while, j'ai fini par oublié d'en retirer un sur les 2, ce qui fait que je les ai utilisé l'un aprés l'autre dans mon code, et vlà pas qu'ca marche!!
QUELLE JOIE!!
Mais mon souci, maintenant est que je ne sais pas pourquoi, à vrai dire cà me semble pas trés catholique.
Par hazard voit tu pourquoi ca marche?
allé ciao rom
0
ha ha ha
c pourtant avec beaucoup d'intéret que j'ai essayé de vous suivre mais là franchement je comprend pas...
c une nouvelle langue ? c fou, pourkoi toujours tt vouloir changer...
elles vous plaisent pas les langues parlées de nos jours, alors vs en inventé d'otres...
bon j'arrête
si vous pouviez m'expliquer succintement en koi consiste ces différents codes incompréhensibles , je vous en serai reconnaissante
bon j'vais aller me prendre un aspirine , après tout ça ...
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
20 mai 2005 à 16:44
Je pense que tu as du faire des trucs louches au niveau des accolades... Normalement le for suffit (et la boulce foireuse n'est jamais évaluée au moment où elle est sensée planter).
0