CRecordset.MoveNext() im Dialog funktioniert nicht
-
hallo,
versuch ohne Beziehungen .
Mit Dialog vielleicht hast du UpdateData(FALSE); vergessen
-
Hallo Jens,
ist zwar nicht ganz passend was ich grad mach, aber ich hab ne kurze Frage an Dich.
Ich hab genau das Problem...das mein Recordset aus einem Dialog gar nicht funktioniert.
Kannst Du mir bitte kurz helfen?
Wie erzeugst Du den denn?
Aus der xxxView raus wärs ja:
[CRecordset* pSet = OnGetRecordset();
...
m_pSet->AddNew();]
und schon würds funktionieren.
Aber wie krieg ich das aus einem Dialog hin.Der ist ja nicht von der CRecordView abgeleitet.
Sorry, dass ich das so in Deine Frage reinschreib,aber hab mir gedacht Du ast es schon, dann wär einfach Dich schnell hier zu fragen.Vielen Dank für Deine Hilfe
Dippi
-
Hi ,
hast du dasProjekt am anfang mit DB tabelle verbunden...SDI oder MDI?
wenn ja dann ist es einfach ..
Z.B. füge einen knopf auf deinem dialog und doppelklick.und einen Edit-fled
für den Edit-feld füge variable z.B. m_name;
in der funktion dann schreib.m_pSet->MoveNext(); m_name= m_pSet->irgendein_splate_der_Tablee_gleiche_Type UpdateData(FALSE);
jedes mal du auf dem knopf druckst zeigt er dich der nächste eintrag
-
Dippi_81 schrieb:
Aus der xxxView raus wärs ja:
CRecordset* pSet = OnGetRecordset();Du kannst die Funktion doch einfach in den Dialog einbauen.
-
Hallo nochmal,
also die DB ist eingebunden und es handelt sich um eine SDI Anwendung!
also zu dokdok...
das würde dann einwandfrei funktionieren, wenn ich das ganze DIREKT aus der xxxView.cpp heraus machen würde, da diese Klasse ja abgeleitet ist von CRecordView.
Da ein Dialog aber von CDialog abgeleitet ist, gibts da Probleme.und zu estartu_de...
wie kann ich die Funktion einfach in meinen Dialog einbinden.
Ich muss doch vorher den Zeiger auf die Fkt OnGetRecordset() legen...Also SDI Anwendung->Beim Start Wizard Datenbank mit Datei Unterstützung(ODBC)
Daraufhin wieder eine xxxView.h und xxxView.cpp erstellt.
Wenn man im FormView einen Button erstellt und dem eine Fkt gibt, so wird die Fkt automatisch in diesen xxxView.h(.cpp) erzeugt.Dann funktioniert.
Aber aus nem Dialog raus komm ich einfach nicht drauf!!!Nochmal danke für Eure Hilfe
MfG Dippi
-
Dippi_81 schrieb:
und zu estartu_de...
wie kann ich die Funktion einfach in meinen Dialog einbinden.
Ich muss doch vorher den Zeiger auf die Fkt OnGetRecordset() legen...Du hast einen Dialog.
Dieser Dialog hat als Member ein Recordset.
An das willst du von außen dran.
Also brauchst du eine Get-Funktion.Soweit, so klar?
Du bist einen Automatismus gewohnt, den du hier ganz einfach nachbauen kannst.
Diese OnGetRecordset kannst du im Dialog nachbauen. (Ich würde sie dann nur GetRecordset nennen, aber das ist Geschmackssache.)
-
Ohh Du bist der erste der mein Problem genau verstanden hat und mich auch schon bisserl weiter geracht hat.
Dafür schon mal vielen Dank.Habe es auch versucht, meine Fkt GetRecordset() einzubauen...nur ohne Erfolg.
Muss ich dazu alle was in der xxxView.h(cpp) drinsteht umschreiben für die Dialoge?enum { IDD = IDD_HACCP_FORM };
CHACCPSet* m_pSet;virtual CRecordset* GetRecordset();
CHACCPDoc* GetDocument() const;
virtual void OnInitialUpdate();void CMainFrame::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_HACCPSet;
CRecordView::OnInitialUpdate();
}CRecordset* CMainFrame::GetRecordset()
{
return m_pSet;
}Oder geht das auch einfacher...weil so (alles richtig eingefügt versteht sich) bringt er mir wieder neue Fehlermeldungen.
Ich kann mir gut vorstellen, dass es sich absolut blöd anhört, wenn man weiß wies geht, aber ich blick grad nicht so richtig durch....
Vielen Dank
Dippi
-
Dippi_81 schrieb:
Ohh Du bist der erste der mein Problem genau verstanden hat und mich auch schon bisserl weiter geracht hat.
Ich hatte das selber mal.
CRecordset* GetRecordset(); CRecordset* CDeinDlg::GetRecordset() { return m_pSet; }
Das sollte klappen. Sonst poste doch auch die Fehlermeldungen.
(Du musst doch beim Funktionen-Kopieren die Klassennamen anpassen, sonst sind die Fehler klar.)
-
Da klappt, aber bedenke ob du das willst, dass Zeiger rausgegeben werden.
-
Also ok
Ich befinde mich in der HauptKlasse "CMainFrame"
von hier aus:void CMainFrame::OnEinstellungenDmpferchillerAnmelden() { // TODO: Add your command handler code here UpdateData(TRUE); if (m_Anmeldung.DoModal() == IDOK) { CString Name = m_Anmeldung.m_Name; CString IP = m_Anmeldung.m_IPAdresse; CString MAC = m_Anmeldung.m_MACAdresse; CString Typ = m_Anmeldung.m_Typ; int i = m_Anmeldung.m_Schnittstelle; //auslesen aus DB (Name + ID) um dann neue ID vergeben zu können //Eintrag in DB //Button erstellen //CHoverButtonEx* m_pMoveButton = new CHoverButtonEx; m_pMoveButton = new CHoverButtonEx; CHoverButtonEx* pMoveButton = m_pMoveButton; pMoveButton->Create("Name", WS_VISIBLE|BS_PUSHBUTTON|BS_BITMAP, CRect(110,50,200,150), this, 1); pMoveButton->SetMoveable(); HBITMAP hBmp; hBmp =::LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_DAEMPFER)); pMoveButton->SetBitmap(hBmp); pButton->CenterWindow(); CRecordset* pSet = GetRecordset(); m_pSet->AddNew(); <== Hier Fehler } }
Wenn also der Dialog (m_Anmeldung.DoModal() == IDOK) ohne Probleme wieder verlassen wird, wird ein Button erstellt.
Zusätzlich sollen dann auch die DB Einträge passieren.Also gehe ich davon aus, das ich meine neue "GetRecordset" in der CMainFrame einbinden muss.
Ich habe folgendes dort hinzugefügt:
In der MainFrame.cppCRecordset* CMainFrame::GetRecordset() { return m_pSet; }
und in der MainFrame.h
virtual CRecordset* GetRecordset(); CHACCPSet* m_pSet;
Fehlermeldung ist:
First-chance exception in HACCP.exe: 0xC0000005: Access Violation.
Und zwar bei der im Code gezeigten Zeile....
hab ich was vergessen?
-
uninitialisierter Zeiger, wo legst du dein Recordset an??? garnicht???
-
In meiner Header Datei:
CHACCPDoc* GetDocument() const;
inline CHACCPDoc* CMainFrame::GetDocument() const // <== Datenbank { return reinterpret_cast<CHACCPDoc*>(m_pDocument); } // <== Datenbank #endif
In meiner cpp Datei:
void CMainFrame::OnInitialUpdate() { m_pSet = &GetDocument()->m_hACCPSet; CRecordView::OnInitialUpdate(); }
Fehlermeldungen:
Compiling... MainFrm.cpp d:\b\haccp5_1\mainfrm.h(25) : error C2143: syntax error : missing ';' before '*' d:\b\haccp5_1\mainfrm.h(25) : error C2501: 'CHACCPDoc' : missing storage-class or type specifiers d:\b\haccp5_1\mainfrm.h(25) : error C2501: 'GetDocument' : missing storage-class or type specifiers D:\b\HACCP5_1\MainFrm.cpp(126) : error C2227: left of '->m_hACCPSet' must point to class/struct/union D:\b\HACCP5_1\MainFrm.cpp(127) : error C2352: 'CRecordView::OnInitialUpdate' : illegal call of non-static member function c:\programme\microsoft visual studio\vc98\mfc\include\afxdb.h(1013) : see declaration of 'OnInitialUpdate'
-
Noch mal eine andere frag von mir.
Ich habe jetzt das Problem das man das ja scheinbar auch, ohne direkten ODBC vorher einzurichten, mit einem connection String sich das ODBC zu sparen beziehungsweise für viel mehr leute das Programm nutzbar zu machen.
Aber irgednwie iriege ich das mit dem ODBC nicht hin. Wo muss ich den hin schreeiben? Was ´muss ich da ändern oder ist das ein größere Umbau?
-
Hallo Jens,
also ich hab keine Antwort auf Deine Frage, bin noch da noch nicht so der Überflieger.
Aber eine direkte Frage an Dich.
Du hast geschrieben, dass DU es geschafft hast, auf einem Dialog raus auf eine Datenbank zuzugreifen.
Wenn es nicht zuviel verlangt ist, könntest Du mir den Code hier mal aufschreiben?Ich sitz da mittlerweile seit 1 1/2 Wochen dran und komm nicht weiter.
Oder Du könntest mir Deinen Code einfach schicken, dann kann ich mir die Stelen selber raussuchen, wennst dazuschreibst wo ich suchen muss, oder ne kurze Erklärung.
Vielen Dank und ein schönes Wochenende
Mfg Dippi
eMail: eiskalterengel_81@yahoo.de
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-127514.html
da findest du ein paar infos wie ich das gemacht habe.