Datenbangzugriff



  • Hallo,

    ich lerne seit kurzem die Sprache c++ und habe ein Problem die ich bislang nicht beweltigen konnte.

    Ich bin mometan dabei ein kleines Spielchen zu schreiben (das Spiel an sich ist fertig) , jedoch scheitere ich mometan an einem bestimmten Punkt undzwar der Verbindung meines Spiels mit einer Datenbank (Access) zwecks Highscore-Liste.

    Es ist eine sehr einfache Highscore-Liste die nur einen Spieler der seinen namen in die textBox1 eingibt zusammen mit der Anzahl bestandener Runden in eine Datenbank speichern und diese nach menge der bestandener Runden in eine Top 10 Liste darstellen soll.

    Mein Hauptproblem mometan ist das Hinzufügen eines neuen Datensatzes.

    Ich versuchte es zunächst durch folgende Funktion (die ich in meinem Quellcode angepasst habe :

    "

    private: System::Void button_Click(System::Object^  sender, System::EventArgs^  e) {
    
    String ^ Verbindungsstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\DotNetProjekt\\AcessDataBase\\dbzugriff\\schule.mdb";
    System::Data::OleDb::OleDbConnection ^DBVerbindung;
    System::Data::OleDb::OleDbCommand ^Befehl;
    System::Data::OleDb::OleDbDataReader ^DatenLeser;
    
    bool bOffen = false;
    int nAnzahl = 0;
    try
      {
       DBVerbindung = gcnew OleDbConnection(Verbindungsstring);
       DBVerbindung->Open();
       bOffen = true;
       Befehl  = DBVerbindung->CreateCommand();				
    
       String ^ sqlAbfrage1 = "SELECT * FROM tbSchueler";
       String ^ sqlAbfrage2 = "INSERT INTO tbSchueler VALUES (11,'Neuer-              Schueler',1,20,'Duisburg');";
       String ^ sqlAbfrage3 = "UPDATE tbSchueler SET Name = 'ChangeName' WHERE Name='Meyer';";
    
       Befehl->CommandText = sqlAbfrage1; // sqlAbfrage2 oder sqlAbfrage3
       nAnzahl = Befehl->ExecuteNonQuery();
    
       MessageBox::Show("Anzahl der eingefügten Zeilen: " + nAnzahl);
      }
    catch(Exception ^Ausnahme)
      {
       MessageBox::Show("Datenbankfehler: " + Ausnahme->Message);
       }
    finally
      {
        if(bOffen == true)
    	 DBVerbindung->Close();
      }
    

    "
    welche ich von meinem Lehrer als Rohstoff bekahm um diese für meine Zwecke umzuschreiben , jedoch habe ich bereits mehrere Tage damit verbracht eine Lösung zu finden ohne erfolg..

    Das Problem liegt genau hier :
    "

    String ^ sqlAbfrage2 = "INSERT INTO tbSchueler VALUES (11,'Neuer-            Schueler',1,20,'Duisburg');";
    

    ".

    als beispiel in meinem Code :
    ((11,'Spieler1',10) wobei die 11 die ID , 'Spieler1' den string aus der textBox1 übernehmen soll und die 10 die Anzahl der bestandenen Runden darstellen soll)

    zunächst sollte die Funktion eine logisch folgende ID einsetzen (zB. nach der 2 die 3),
    anschließend den string aus der textBox1 für den 'Spieler1' in der Access datenbank im datensatz nach der ID einsetzen
    und zuletzt die bestandenen Runden übernehmen die der Spieler gemeistert hat.

    Ich habe mehrere Methoden versucht jedoch scheitere ich jedesmal an der "live" änderung des Codes da ich diesen im bezug auf die oben beschriebene Zeile sehr unflexibel geschrieben habe.

    Ich muss zugeben dass ich nochnicht wirklich viel erfahrung mit C++ habe und erst damit beginne ,
    deshalb wäre es sehr freundlich wen mir jemand bei dieser Aufgabe helfen und es mir als ausdrücklich erklären könnte.

    EDIT :

    hab eine Lösung gefunden ,

    try
      {
       DBVerbindung = gcnew OleDbConnection(Verbindungsstring);
       DBVerbindung->Open();
       bOffen = true;
       Befehl  = DBVerbindung->CreateCommand();				
    
       Befehl->CommandText = "SQL COMMAND";
       Befehl->CommandText = "INSERT INTO tbHighscore VALUES ('"+textBox1->Text+"', '"+Punkte+"', '"+Platz+"')";
    

    Danke trotzdem an alle die sich mein Problem angeschaut haben 🙂 .


Log in to reply