Bonjour, je travail sur code qui essaie de manipuler des bases de données en mode ODBC. je teste mon code s'il est connecté à ma table Employe(IdEmploye,Nom,Prenom,Raison Sociale,Matricule,IdPresAbs) en plus d'autre étape expliquer en commentaire dans le code.
le problème qui se pose c'est quand j'appelle la fonction qui ajoute des champs à ma base de donnée la fonction la ligne 35 du .cppj'ai essayé de l'écrire en fonction mais ceci ne marche pas et je ne sais pas pourquoi pourtant le compilateur (Visual Studio) n'indique pas d'erreur???
Code : Sélectionner tout - Visualiser dans une fenêtre à part ajouterRecord(char*,int)
le main.cpp
le fichier .h
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 #define WINVER 0x0A00 #include <iostream> #include <afxdb.h> #include "RecordsetE.h" using namespace std; int main(){ //objet database CDatabase dbGT_1_ODBC; //source ODBC CString sDSN ("TestGTODBC"); //trouver connecter la base de donnee dbGT_1_ODBC.Open(sDSN); if(dbGT_1_ODBC.IsOpen()){ cout<<"-- DB trouvee et connectee! --" << endl; }else{cout << "-- DB pas trouvee ou echec de connexion! --" << endl;} //definir les objets necessaires CRecordsetE rsEmploye(&dbGT_1_ODBC); CString sSQL("SELECT* FROM employe"); // ---- ouvrir et rechercher les enregistrements ---- rsEmploye.m_strSort=_T("Nom"); //tri sur les noms rsEmploye.Open(CRecordset::dynaset,sSQL); if(!(rsEmploye.IsOpen() && rsEmploye.CanAppend())){ cout<<"-- Recordset non connecte !"<<endl;} //ajouter un record à la table cout<<"voulez vous ajouter de nouveaux employes si oui cliquer 'O' si non cliquer 'N' "; char c='O'; cin>>c; if(c=='O'){ char* newEmploye=NULL; int element=0; cout<<"combien d'employe voulez vous entrer :"; cin>>element; cout<<endl; rsEmploye.ajouterRecord(newEmploye,element); } //lister tout les records de la table rsEmploye.MoveFirst(); // aller au premier record de la table //boucle sur les enregistrements//IsEOF retourne 0 apres le dernier enregistrement while(!rsEmploye.IsEOF()){ // récuperer les valeurs des champs // afficher les valeurs des champs cout<<rsEmploye.m_IdEmploye<<" - "<<rsEmploye.m_Nom<<" - "<<rsEmploye.m_Prenom; cout<<" - "<<rsEmploye.m_Raison_Sociale<<" - "<<rsEmploye.m_Matricule<<endl; // passer au record suivant rsEmploye.MoveNext(); } // fermer le recordset rsEmploye.Close(); //fermer (deconnecter) la base de donnee dbGT_1_ODBC.Close(); if(dbGT_1_ODBC.IsOpen()){ cout << "-- DB echec de fermeture! --" << endl; }else{cout<<"-- DB deconnectee et fermee"<<endl;} return 0; }
et le fichier où existe ma fonction le .cpp :
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 #pragma once #include <afxdb.h> using namespace std; class CRecordsetE: public CRecordset { public: // data membres correspondant aux champs de la table long m_IdEmploye; CStringA m_Nom; CStringA m_Prenom; CStringA m_Raison_Sociale; long m_Matricule; CString m_Telephone; long m_IdPresAbs; public: CRecordsetE(CDatabase* ); virtual ~CRecordsetE(); // fonction de mappage virtual void DoFieldExchange(CFieldExchange*); void ajouterRecord(char*,int); };
merci !
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 #include "RecordsetE.h" #include <afxdb.h> #include <iostream> using namespace std; CRecordsetE::CRecordsetE(CDatabase* pDatabase=NULL) :CRecordset(pDatabase) { m_IdEmploye=0; m_Nom=_T(""); m_Prenom=_T(""); m_Raison_Sociale=_T(""); m_Matricule=0; m_Telephone=_T(""); m_IdPresAbs=0; m_nFields=7; //nombre de champs m_nDefaultType=dynaset; //mode d'ouverture par default } CRecordsetE::~CRecordsetE(void) { } void CRecordsetE::DoFieldExchange(CFieldExchange* pFX) { //champs à mapper pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Long(pFX,_T("[IdEmploye]"),m_IdEmploye); RFX_Text(pFX,_T("[Nom]"),m_Nom); RFX_Text(pFX,_T("[Prenom]"),m_Prenom); RFX_Text(pFX,_T("[Raison Sociale]"),m_Raison_Sociale); RFX_Long(pFX,_T("[Matricule]"),m_Matricule); RFX_Text(pFX,_T("[Telephone]"),m_Telephone); RFX_Long(pFX,_T("[IdPresAbs]"),m_IdPresAbs); } void CRecordsetE::ajouterRecord(char* newEmploye,int element) { newEmploye=new char[element]; newEmploye[0]='0'; for(int j=0;j<element;j++){ cout<<"entrer un nom pour l'employe "<<j++<<" :"; cin>>newEmploye[j]; cout<<endl; } for(int i=0;i<element;i++){ this->AddNew(); this->m_IdEmploye=6+i; this->m_Nom=newEmploye[i]; this->m_Matricule=13001+i; this->Update(); this->Requery(); } }
Partager