Quelqu'un s'y connait en db sous visual c++ ?

Fermé
cobra - 18 avril 2002 à 09:07
 cobra - 23 avril 2002 à 09:54
Car j'ai des problèmes d'accès et d'écriture a partir des boites de dialogues

Merci

Cobra
A voir également:

8 réponses

En fait, a partir de mon fichier view.cpp, avec le pointeur m_pSet je n'ai pas de problèmes, mais dans les boites de dialogues ca marche pas

Au secours

Cobra
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
18 avril 2002 à 10:39
bon cobra, ton pointeur, il se trouve ds quelle classe??? la classe C<nomdeprojet>View ??? si tu m'expliquais plus, peut etre q je pourrai t'aider car je ne sais pas comment tes données st récupéres depuis tes boites de dialogue.N'oublies pas q si tu v recuperer des données depuis une boite de dialogue, tu dois declarer une variable de type cette boite de dialogue et le lier a la boite pour pouvoir recuperer les données (car chaq controle ds une boite de dialogue est une donéne de ta classe)
tafiscobar
0
Voici le code d'intialisation des champs d'une de mes boites a dialogiues. Ce code se trouve dans CSalleView

void CSalleView::OnButtonSallesPrinc()
{
CDialoguePrix Prix;
m_pSet->MoveFirst();
// Initialisation des differents champs
Prix.m_NumSalle = m_pSet->m_id_salles;
Prix.m_strNomSalle = m_pSet->m_nom_salle;
Prix.m_CapaciteMin = m_pSet->m_capacite;
Prix.m_CapaciteMax = m_pSet->m_capacite;
Prix.m_DemiJourMembre = m_pSet->m_prix_demi_journee_membre;
Prix.m_DemiJourNonMembre = m_pSet->m_prix_demi_journee_nonmembre;
Prix.m_JourMembre = m_pSet->m_prix_journee_membre;
Prix.m_JourNonMembre = m_pSet->m_prix_journee_non_membre;
// Affichage
Prix.DoModal();
}

Et quand je veux me deplacer dans la base a partir de la boite de dialogue affichée (au moyen de boutons que j'ai crées) j'ai des problemes d'assert

voici le code des 4 boutons de deplacement qui se trouvent dans le fichier cpp de la boite de dialogue

void CDialoguePrix::OnButtonEnd()
{
// TODO: Add your control notification handler code here
m_pSet.MoveLast();
UpdateData(true);
}

void CDialoguePrix::OnButtonFirst()
{
// TODO: Add your control notification handler code here
m_pSet.MoveFirst();
UpdateData(true);
}


void CDialoguePrix::OnButtonNext()
{
// TODO: Add your control notification handler code here
m_pSet.MoveNext();
UpdateData(true);
}

void CDialoguePrix::OnButtonPrevious()
{
// TODO: Add your control notification handler code here
m_pSet.MovePrev();
UpdateData(true);
}

J'ai peut etre fait des grosses conneries mais je suis un novice en programmation objet

Cobra
0
ariock > cobra
18 avril 2002 à 10:53
C'est un effet de mon imagination ou dans ta methode OnBoutonSalle tu vois m_pSet comme un pointeur (m_pSet->)et dans le reste de tes boutons comme une variable (m_pSet.) ?
0
cobra > ariock
18 avril 2002 à 11:37
J'ai essaye en le decalrant pointeur et en utilisant donc -> et non .

Quand je lance la fonction j'obtiens "Unhandled exception in Salle.exe (MFCD42D.DLL):0xC0000005: Access Violation"

Cobra
0
ariock > ariock
19 avril 2002 à 10:57
C'est idiot comme remarque je sais, mais ton probleme d'acces violation, ca veux generallment dire que tu travaille avec un pointeur (dans ton cas) qui ne pointe pas sur ce qu'il faut, ou que la classe qu'il pointe n'est pas construite ou a ete detruite par un destructeur que tu ne t'attendais pas a trouver sur ton chemin...
--> solution: ben chercher de ce cote... verifier que le pointeur est bien initialiser, et faire gaffe a tes appel... et aussi tenter de remplace les variables qui posent problemes par des varfiables pointee que tu cree par un "new"
--> il est aussi possible que ce soit la classe d'acces base de donne qui fasse des siennes parce que tu ne l'initialise pas comme il faut... genre un truc que appWizard aurait ajoute tout seul dans la CFormView...
0
Bon le m_pSet utilise dans la methode on button salle est un pointeur vers CSalleSet (declare dans le header salleview) et initialisé (automatiquement) dans le view.cpp de la manere suivante

CSalleView::CSalleView()
: CRecordView(CSalleView::IDD)
{
...
//{{AFX_DATA_INIT(CSalleView)
m_pSet = NULL;
...
//}}AFX_DATA_INIT
}

void CSalleView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_salleSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
...
}

// CSalleView database support
CRecordset* CSalleView::OnGetRecordset()
{
return m_pSet;
}

// CSalleView message handlers

Et dans le header de ma boite de dialogues

public:
CDialoguePrix(CWnd* pParent = NULL); // standard constructor
CSalleSet m_pSet;

C'est peut etre une grosse connerie en effet

Tu peux m'aider ?

Cobra
0
Bon le m_pSet utilise dans la methode on button salle est un pointeur vers CSalleSet (declare dans le header salleview) et initialisé (automatiquement) dans le view.cpp de la manere suivante

CSalleView::CSalleView()
: CRecordView(CSalleView::IDD)
{
...
//{{AFX_DATA_INIT(CSalleView)
m_pSet = NULL;
...
//}}AFX_DATA_INIT
}

void CSalleView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_salleSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
...
}

// CSalleView database support
CRecordset* CSalleView::OnGetRecordset()
{
return m_pSet;
}

// CSalleView message handlers

Et dans le header de ma boite de dialogues

public:
CDialoguePrix(CWnd* pParent = NULL); // standard constructor
CSalleSet m_pSet;

C'est peut etre une grosse connerie en effet

Tu peux m'aider ?

Cobra
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
18 avril 2002 à 17:13
voila, ton bleme vient du fait que tu utilises ton recordset sans l'ouvrir.Voila comment j'ai fait pour le resoudre :
ds la boite de dialogue, je declare une varaible de type CSalleSet*
puis voila le code :
CDialoguePrix : public CDocument
{
public:
CDialoguePrix(); //constructeur
CSalleSet *m_pPrix;
etc...
};
//ds le constructeur voila :
CDialoguePrix::CDialoguePrix()
{
///ce que soft a joute
//voila ce q tu dois ajouter apres ce q soft a ajoute ds le constructeur
m_pPrix = new CSalleSet;
m_pPrix->open();
}

voila, c'est tout, maintenant ds tes fct :
onend : teste d'abord s'il n'est pas a la fin puis si non alors tu p l'amener a la fin ( c'est plus propre)
onfirst : pareil sauf q tu testes s'il n'est pas deja ds le debut

c'est tout, moi ça marche, j'espere pour roi aussi.
tafiscobar
0
C'est presque parfait, sauf que les nouvelles données ne s'affichent pas dans la boite

void CDialoguePrix::OnButtonEnd()
{
// TODO: Add your control notification handler code here
m_pPrix->MoveLast();
UpdateData(true);
}

void CDialoguePrix::OnButtonFirst()
{
// TODO: Add your control notification handler code here
m_pPrix->MoveFirst();
UpdateData(true);
}


void CDialoguePrix::OnButtonNext()
{
// TODO: Add your control notification handler code here
m_pPrix->MoveNext();
UpdateData(true);
}

void CDialoguePrix::OnButtonPrevious()
{
// TODO: Add your control notification handler code here
m_pPrix->MovePrev();
UpdateData(true);
}
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
19 avril 2002 à 10:23
c'est updatedata(false) a la place de updatedata(true) car la ce st les variables qui rafraichissent le controle et non le ocntraire, cela devrait etre bon, je l'avais oublie.
tafiscobar
0
Au secours !
Meme en mettant false a la place de true ca marche pas :( Pourtant l'instruction updatedata(false) est censeé rafraichir la fenetre non ?

Je fais quoi ? je commande la corde ou je vais voir un excorsiste pour voir si on m'a pas jeté un sort ?

Tous les champs sont initialisés dans le fichier view (a l'aide du pointeur m_pSet)
Puis dans le fichier de la boite de dialogue, j'utilise pour chacun des boutons les fonctions move (a l'aide du pointeur m_pPrix) et j'utilise la fontion updatedata. J'ai encore oublié qqc ?

Cobra
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
19 avril 2002 à 15:21
c'est sur que tu utilises m_pprix ds tes avancee aulieu de m_pset???, sinon si tu v je t'envoies un bout de code et tu compares car la cela devient difficile de voir ce q tu as coe probleme, bon tiens moi au courant.
tafiscobar
0
Dans mes fonctions pour la boite de dialogue j'utilises m_pPrix

J'ai rien contre un bout de code. Mais si tu as msn ca pourrait peut etre aider aussi. Comme ca on pourrait travailler en direct. Actuellement je suis connecte sous jdupont5@hotmail.com (le week end et en soiree je suis connecte en tant que F1_COBRA@hotmail.com)

Cobra
0
Dans mes fonctions pour la boite de dialogue j'utilises m_pPrix

J'ai rien contre un bout de code. Mais si tu as msn ca pourrait peut etre aider aussi. Comme ca on pourrait travailler en direct. Actuellement je suis connecte sous jdupont5@hotmail.com (le week end et en soiree je suis connecte en tant que F1_COBRA@hotmail.com)

Cobra
0
Bon, j'ai regardé tes sources et dans l'affichage de la boite, j'arrive a raffraichir les données, mais seulement pour les boutons "premier" et "dernier". Pour les boutons "suivant" et "precedent" ca marchetjs pas, je comprends pas

void CDialoguePrix::OnButtonEnd()
{
// TODO: Add your control notification handler code here
if (m_pPrix->IsEOF() == false)
{
m_pPrix->MoveLast();
m_NumSalle = m_pPrix->m_id_salles;
m_strNomSalle = m_pPrix->m_nom_salle;
m_CapaciteMin = m_pPrix->m_capacite;
m_CapaciteMax = m_pPrix->m_capacite;
m_DemiJourMembre = m_pPrix->m_prix_demi_journee_membre;
m_DemiJourNonMembre = m_pPrix->m_prix_demi_journee_nonmembre;
m_JourMembre = m_pPrix->m_prix_journee_membre;
m_JourNonMembre = m_pPrix->m_prix_journee_non_membre;
UpdateData(false);
}
}

void CDialoguePrix::OnButtonFirst()
{
// TODO: Add your control notification handler code here
if (m_pPrix->IsBOF() == false)
{
m_pPrix->MoveFirst();
m_NumSalle = m_pPrix->m_id_salles;
m_strNomSalle = m_pPrix->m_nom_salle;
m_CapaciteMin = m_pPrix->m_capacite;
m_CapaciteMax = m_pPrix->m_capacite;
m_DemiJourMembre = m_pPrix->m_prix_demi_journee_membre;
m_DemiJourNonMembre = m_pPrix->m_prix_demi_journee_nonmembre;
m_JourMembre = m_pPrix->m_prix_journee_membre;
m_JourNonMembre = m_pPrix->m_prix_journee_non_membre;
UpdateData(false);
}
}


void CDialoguePrix::OnButtonNext()
{
// TODO: Add your control notification handler code here
if (m_pPrix->IsEOF() == false)
{
m_pPrix->MoveNext();
m_NumSalle = m_pPrix->m_id_salles;
m_strNomSalle = m_pPrix->m_nom_salle;
m_CapaciteMin = m_pPrix->m_capacite;
m_CapaciteMax = m_pPrix->m_capacite;
m_DemiJourMembre = m_pPrix->m_prix_demi_journee_membre;
m_DemiJourNonMembre = m_pPrix->m_prix_demi_journee_nonmembre;
m_JourMembre = m_pPrix->m_prix_journee_membre;
m_JourNonMembre = m_pPrix->m_prix_journee_non_membre;
UpdateData(false);
}
}

void CDialoguePrix::OnButtonPrevious()
{
// TODO: Add your control notification handler code here
if (m_pPrix->IsEOF() == false)
{
m_pPrix->MovePrev();
m_NumSalle = m_pPrix->m_id_salles;
m_strNomSalle = m_pPrix->m_nom_salle;
m_CapaciteMin = m_pPrix->m_capacite;
m_CapaciteMax = m_pPrix->m_capacite;
m_DemiJourMembre = m_pPrix->m_prix_demi_journee_membre;
m_DemiJourNonMembre = m_pPrix->m_prix_demi_journee_nonmembre;
m_JourMembre = m_pPrix->m_prix_journee_membre;
m_JourNonMembre = m_pPrix->m_prix_journee_non_membre;
UpdateData(false);
}
}

Par contre pour ce qui est de l'ecriture ca ne marche toujours pas

Cobra
0
Bon, j'ai essayé avec tes sources, mais ca va pas mieux. Le jeu d'enregistrement semble toujours en lecture seule. Et j'ai le meme problème a l'affichage pour la boite de dialoge avec les boutons precedent et suivant

Cobra (au bord du gouffre y a qqn pour me pousser svp ?)
0
Arlette Laguiller
22 avril 2002 à 22:44
Aie aie aie... j'ai mal à la tête moi après tout votre charabia !
0