Gros problème avec "insert into" et nombre de paramètres

romydamour Messages postés 30 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 6 juillet 2005 - 10 mai 2005 à 10:28
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 10 mai 2005 à 20:41
bonjour tout le monde, voilà ce qui me pose pas mal de problème depuis un bout de temps.
je travaille sous visualc++ (API win32), et je dois créer une base de données, dans laquelle certaines tables ont plus de 100 champs (je sais je pourrais faire des relations entre différentes tables mais mon tuteur ne veut qu'une seule table où tout apparait, au cas où il irait voir dans access). En fait, au lancement de mon appli, je récupère le contenu de plusieurs EditBox pour l'insérer dans plusieurs cellules de ma table, ça je sais faire ou du moins jusqu'à un certain nombre de paramètres.
voici l'exemple:


CHAR szParam1[TAILLE_BUFFER], szParam2[TAILLE_BUFFER],……….


lstrcpy(szParam1, szBuffer);


GetWindowText(GetDlgItem(hwndDlg, IDC_EDITLIGNE2), szParam2, TAILLE_BUFFER);


Etc…….





if(strcmp(szParam1, "SPB_150_2_AL")==0)


{
//SPB_150_2_AL est le nom de ma table


wsprintf(szBuffer, "INSERT INTO SPB_150_2_AL


(Reference_programme,Numero_OF,Numero_tache,Surface_usinee,Reference_individuelle_piece,Cycle_de_taillage,SENS_MOLETTE,VITESSE_MOLETTE,VITESSE_TAILLAGE_FORMATION,VITESSE_TAILLAGE_EBAUCHE,VITESSE_TAILLAGE_FINITION,VITESSE_MEULE_FORMATION,VITESSE_MEULE_DIAMANTAGE,PRISE_PASSE_FORMATION_X,PRISE_PASSE_EBAUCHE_X,PRISE_PASSE_FINITION_X,PRISE_PASSE_FORMATION_Z,PRISE_PASSE_EBAUCHE_Z,PRISE_PASSE_FINITION_Z,PROFONDEUR_FORMATION,NB_PASSE_DIAMANTAGE) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",szParam1,szParam2,szParam3,szParam4,szParam5,szParam6,szParam7,szParam8,szParam9,szParam10,szParam11,szParam12,szParam13,szParam14,szParam15,szParam16,szParam17,szParam18,szParam19,szParam20,szParam21);

}

Comme vous pouvez le voir j'ai déjà un grand nombre de paramètres mais jusque là ca marche, par contre si j'en rajoute un (et j'en ai encore au moins 60), message d'erreur pendant l'exécution "erreur de syntaxe dans INSERT INTO" (et pourtant mon appli se lance qd même)!!
je suis bien emmerdé avec ça.
Alors j'avais pensé refaire un "wsprintf(szBuffer, "INSERT INTO dans la même table mais cette fois ci dans les colonnes suivantes:







if(strcmp(szParam1, "SPB_150_2_AL")==0)


{
//SPB_150_2_AL est le nom de ma table


wsprintf(szBuffer, "INSERT INTO SPB_150_2_AL


(Reference_programme,Numero_OF,.............) VALUES ('%s','%s',..........)",szParam1,szParam2,..........);


}



try


{


if(pRs->State != adStateClosed)


pRs->Close();



pRs->Open(szBuffer, _variant_t((IDispatch *) pConn, true), adOpenDynamic, adLockReadOnly, adCmdText);


}


catch(_com_error &e)


{


MessageBox(hwndDlg, e.Description(), "Erreur ExecuteRequete.", MB_ICONEXCLAMATION);

}


if(strcmp(szParam1, "SPB_150_2_AL")==0)


{
//SPB_150_2_AL est le nom de ma table


wsprintf(szBuffer, "INSERT INTO SPB_150_2_AL


(Cycle_d_usinage,SURFACE,POSITION,.............) VALUES ('%s','%s','%s'..........)",szParam22,szParam23,szParam24,..........);


}



try


{


if(pRs->State != adStateClosed)


pRs->Close();



pRs->Open(szBuffer, _variant_t((IDispatch *) pConn, true), adOpenDynamic, adLockReadOnly, adCmdText);


}


catch(_com_error &e)


{


MessageBox(hwndDlg, e.Description(), "Erreur ExecuteRequete.", MB_ICONEXCLAMATION);

}

Mais le problème maintenant c'est que les paramètres de ma deuxième requête sont enregistrés dans ma table mais à la ligne suivante (embêtant lorsque je veux l'afficher dans une liste), alors que je voudrais que tout soit sur la même ligne d'enregistrement.
Comment je peux faire?
Si quelqu'un a déjà rencontré ce problème, ca me serait vraiment trés utile,
merci bcp romy

1 réponse

cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
10 mai 2005 à 20:41
Bonsoir,



Une petite piste peut être :

Si tu as une clef primaire du style : Reference_Programme alors tu fais
un insert into d'un certain nombre de champs puis apres tu fais un
update ... where Reference_Programme = xxx


A tester, mais c'est vrai qu'une table de cent champs c'est balaise,


Matt...
0
Rejoignez-nous