Probleme mit Datenbank



  • Hab ein Datenbankprogramm geschrieben nach dem Buch Visual c++ in 21 Tage. Undhab denn auch den MovetoDlg eingebaut. Aber irgendwie moved der nich bei mir. Wenn ich nen wert eingebe und dann auf OK klicke dann wechselt er nicht auf den Datensatz und wenn ich dann einen Datensatz zurück oder vorwärts gehen will meldet er nen Fehler, dass es keinen aktuellen Datensatz gibt.
    Hat das damit was zu tun, dass wenn ich ein neues Programm erstelle und die Datenquelle angebe, kommt doch ein neues Fenster wo ich irgendeine Tabelle aussuchen muss?
    Ich habe 2 Tabellen mit dem Typ long und eine mit dem Typ CString. Aber es wird nur eine Tabelle anezeigt. Als erste Tabelle hab ich die erstellt, wo ich eigentlich auch den Wert eingebe, wo ich mit dem Dialog Moveto hingehen will. Weiß wodran das liegt?
    MFG



  • 1. Tabellen haben keinen Datentyp, höchstens die spalten darin
    2. scheint deine Datenbank nicht geladen zu werden
    3. ist es sehr komisch das du nur 1 von 3 dbs angezeigt bekommst, was für ne datenbank benutzt du? Access? MySQL? ...?



  • Ich benutze Access. Versuche das gerade mal ohne Assistenten, also die Tabelle zu erstellen. Wenns wieder net geht. Meld ich mich.



  • So habs jetzt nochmal mit ner manuell erstellten Tabelle gemacht und auch gleich noch n neues Programm geschrieben.
    Klappt aber auch nicht. Ich kann zwar zwischen den einzelnen Datensätzen mit meinem Programm hin und her springen, aber sobald ich zu einem bestimmten Datensatz will und auf den OK Button klicke, bleibt er da wo er gerade ist und wenn ich wieder nen Datensatz weiter will, kommt halt der Fehler "Datensatz ist nich aktuelle.
    Ist eine Access DB und benutze ODBC zum auslesen und hier der Quellcode womit ich zu dem neuen Datensatz sprigen will

    // Instanz des Dialogfelds 'Gehe zu' erzeugen
        Gehe_Zu dlgMoveTo;
        // Zeilennummer des Ziels ermitteln
        if (dlgMoveTo.DoModal() == IDOK)
    	{
        // Zeiger auf den Recordset holen
        CRecordset* pSet = OnGetRecordset();
        // Sicherstellen, daß alle Änderungen am aktuellen Datensatz gespeichert wurden.
        if (pSet->CanUpdate() && !pSet->IsDeleted())
    	{
        pSet->Edit();
        if (!UpdateData())
        return;
    
        pSet->Update();
    	}
    
    	// Neue Position einstellen
        pSet->SetAbsolutePosition(dlgMoveTo.m_Gehe_Zu_Var);
        // Formular aktualisieren
        UpdateData(FALSE);
    	}
    


  • Liegt das vielleicht dadrin, das ich keinen durchlaufenden Primärschlüssel hab, sondern den per Hand eingebe? Der Schlüssel soll nämlich als Artikel-Nr dienen. Ich geb einfach eine Artikel-Nr und dann soll das Programm zu dem Datensatz springen.



  • Versuch nach dem Update mal ein Requery. 🙂



  • Wenn ich nach dem UpdateData(FALSE) ein Requery mache, ändert er irgendwie die Werte des Primärschlüssels. Und dann hat auf einmal der Datensatz bei dem ich mich gerade befinde den Primärschlüssel zu dem ich eigentlich wollte und dann meldet er, dass 2 selbe Schlüssel vorhanden sind und das ich das ändern soll.
    Wenn ich nach dem pSet->Update() ein Requery setzte, passiert nix.



  • Hab das Problem endlich gelöst. Hab einfach mal den Primärschlüssel weggelassen und schwups es geht. 😃 So viel wirbel nur wegen nem Primärschlüssels.



  • Der ist relativ wichtig, hoffentlich fehlt er dir später nicht.


Anmelden zum Antworten