Probleme mit SQL_Datenbankanbindung



  • dokdok schrieb:

    Frage?
    kann man funktion von klasse a in klasse b rufen ? und auch funktion von klasse b in klasse a rufen?
    ist es das eine mit include"xxxx.h" und das andere mit class Cklass;
    wird mir intressiren. ich probiere mal

    Das sollte funktionieren. Ist ja hinter dem Link erklärt. 🙂



  • estartu_de schrieb:

    Wieviele Klassen hast du jetzt? 😕

    Ich bin ausgegangen von:
    Ein Recordset
    Ein Dialog

    Da wäre der Weg:
    Recordset.Variable -> Dialog.VariableFürEinControl -> UpdateData(FALSE)
    oder eben
    UpdateData(TRUE)-> Dialog.VariableFürEinControl -> Recordset.Variable

    Ich habe 4 Tabellen somit 4 Klassen abgeleitet von CRecordSet und einmal mein Dialogfenster(Basisklasse CFormView)



  • dokdok schrieb:

    hallo
    mit mehre tabbellen ist einfach und du sollst keine panik haben.

    du kannst ein neuen Projekt legen und normal mit einem DB verbinden und nur mit einer Tabelle. und fertig.
    willst du 2te tabelle dann auf dem klassen ansicht -> rechtmaustatste und klassen einfügen MFC ODBC Consumer dann wählst du die 2te tablle.
    der assistenten macht alles für dich .
    vergiss hen Header einzufügen in deinem view kalsse

    #include"neueklasse.h"
    

    Ja denn kann ich zwar über m_pSet die eine Tabelle auswählen muss für die anderen Tabellen es dann aber auch anders machen.



  • reda schrieb:

    Ja denn kann ich zwar über m_pSet die eine Tabelle auswählen muss für die anderen Tabellen es dann aber auch anders machen.

    Dann guck doch mal, wie das mit dem m_pSet funktioniert und bau dir m_pSet2 bis n. 🙄

    Du musst da nix anders oder besonderes machen. Nur gucken, wie der Assistent das macht und abschreiben.



  • [cpp]public:
    //{{AFX_DATA(CTest3View)
    enum { IDD = IDD_TEST3_FORM };
    CTest3Set* m_pSet;
    //}}AFX_DATA

    Das steht in der *View.h
    Und denn ist sie halt noch in den ganzen DoDataExchange,usw. vorhanden.
    Ich habe eben einfach alles abgeschrieben und da halt mit ein getragen wo m_pSet ist. Denn sagt er mir oben in der Header Datei fehlendes ; * O_o
    Und denn fehlende Speicherklasse für meine 2 Set Klasse und fehlende Speicherklasse für m_pSet2



  • reda schrieb:

    Und denn fehlende Speicherklasse für meine 2 Set Klasse und fehlende Speicherklasse für m_pSet2

    include vergessen!



  • Hmm habs grad gefunden. Sie fehlten in der test3.cpp.....

    Nun fehlten sie noch in der.doc datei 😕

    Also das programm kann ich nun zwar starten bloss es kommt dieser nette fehlerbildschrim
    http://img362.imageshack.us/img362/8308/fehler0ek.th.jpg



  • reda schrieb:

    Also das programm kann ich nun zwar starten bloss es kommt dieser nette fehlerbildschrim
    http://img362.imageshack.us/img362/8308/fehler0ek.th.jpg

    Das ist kein Fehler. 🙄
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-120832.html



  • Er zeigt mir im Debug denn das an

    if (pOb == NULL)
    	{
    		TRACE0("ASSERT_VALID fails with NULL pointer.\n");
    		if (AfxAssertFailedLine(lpszFileName, nLine))
    			AfxDebugBreak();
    		return;     // quick escape
    	}
    

    Auf AfxDebugBreak ist der Pfeil gesetzt. Sagt mir bloss nix 😕



  • Das heißt einfach nur "in der Debugversion hier anhalten". So in etwa jedenfalls. 😉

    pOb ist NULL, dürfte es aber nicht sein.
    Verfolge mal im Callstack, wo du es hättest initialisieren müssen.



  • Hmm hab mir zwar dein Artikel über Debug durchgelesen,steig mit dem Callstack noch ned ganz durch wie ich nun da seh wo ich pOb initalisieren sollte 😕
    Bin mit Debuggen null vertraut sry 😕



  • Welche ist denn die erste Funktion im Callstack, die von dir ist? Oft liegt genau da der Fehler.

    Wenn du es wirklich nicht findest, müsstest du am besten mal ein Beispielprojekt machen, damit man sich das genauer angucken kann.
    Oder kannst du das eigentliche und die Datenbnk rausgeben? 🙂



  • Zur Zeit teste ich das ganze eh nur an nem Beispiel projekt 😉 Die Datenbank dazu könnte ich auch rausgeben bloss erst heute abend, bin nun unterwegs.

    So sieht mein Callstack aus.

    http://img460.imageshack.us/img460/2993/callstack6hu.th.jpg



  • Ich habe eh erst Montag wieder ein VC. 🙄
    Zeig mal CTest3View::OnInitialUpdate und markiere Zeile 74. (Klick einfach auf die Zeile im Callstack doppelt und mach nen Kommentar an die Zeile, wo der grüne Pfeil ist.)



  • void CTest3View::OnInitialUpdate()
    {
    	m_pSet = &GetDocument()->m_test3Set;
    	CRecordView::OnInitialUpdate();
    	GetParentFrame()->RecalcLayout(); //markierte Zeile
    	ResizeParentToFit();
    	m_pSet2 = &GetDocument()->m_KinderSet;
    	CRecordView::OnInitialUpdate();
    	GetParentFrame()->RecalcLayout();
    	ResizeParentToFit();
    
    }
    


  • Also, die letzten drei Zeilen der Funktion kannst du weglassen, die stehen ja oben schon. 😉

    Aber den Fehler sehe ich da nicht. 😞 Der ist wohl besser versteckt.

    Welches DBMS verwedest du? Access? MS-SQL? Dann schick mir mal die Datenbank und das Projekt, wenn du magst. mail@estartu.de
    Ich guck dann morgen mal drauf. 🙂



  • Habe eben mal m_pSet2 unter m_pSet geschrieben und das doppelte rausgenommen und nun spuckt er schon ganz andere sachen aus.

    CRecordset::IsDeleted() line 52 + 38 bytes
    

    Das steht als erstes im Callstack.

    { ASSERT(IsOpen()); return m_bDeleted; }
    

    Diese Zeile wird markiert.

    In dem Fenster vom Debug Assertion Failed steht Datei afxdb.inl in Line:52.
    Das wäre diese Zeile.
    Ich schick dir aber mal im laufe des tages den kram, vllt findest du das Problem ja :> Aber schonmal danke im voraus 👍



  • Hast du im Artikel gesehen, was ein ASSERT ist? 🙂
    Diese Zeile

    ASSERT(IsOpen());
    

    Sagt dir eigentlich nur "Du hast vergessen, Open aufzurufen". 😉



  • Joah hatte ich gelesen, bloss wohl wieder verdrängt 🙂
    Hmm hab aber noch ned wirklich gefunden wo ich nun nochmal extra CKinderSet hätte öffnen müssen 😕



  • So aus dem Stehgreif weiß ich das auch nicht, weil ich zwar mit Recordsets arbeite, aber den Recordview zu umständlich finde. Ich mach immer da Open, wo ich es grade brauche. 😉

    Drück doch mal Strg+Shift+F (Find in Files) und lass ihn nach
    Set->Open(
    suchen, dann siehst du, wo überall ein Recordset geöffnet wird. 🙂
    (Ich habe das deswegen so "gekürzt", damit auch möglichst alle Stellen gefunden werden. m_pSet->Open(); geht natürlich auch.)


Anmelden zum Antworten