MySQL Connector/C++ und die Länge der Resultstrings



  • Hi Community,

    nachdem ihr mir schon einmal so gut weiterhelfen konntet, wende ich mich in meiner Not nochmals an euch. Mein Problem ist dieses Mal folgendes (nochmal zu Erinnerung, ich bin bis jetzt mit C++ noch nicht so lange unterwegs):
    Über einen MFC-Dialog lege ich Daten in einer MySQl-DB an und lese diese später wieder ein. Im Wesentlichen geht dabei um das Bekanntmachen von RFID-Tags mit der DB. Leider habe ich ein Problem mit der Länge meiner Strings, d.h., sobald das Mysql-Feld mehr als 15 Zeichen enthält und ich dieses in einen std::string einlese, stürzt das Programm ab. Allerdings nur beim Auslesen; gebe ich mit meiner inserter-Methode Daten ein, können diese länger als fünfzehn Zeichen sein. Es ist sicherlich ein dümmlicher Fehler, aber ich begreife nicht ganz, warum das so ist - jeder String wird zur Ausgabe ja neu initialisiert!? Hat zufällig irgendjemand Erfahrungen mit dem Problem oder stehe ich einfach nur auf dem Schlauch? Oder hängt das Ganze mit dem Connector zusammen, der mir btw schon wirklich einige graue Haare beschert hat? Ich bin für jeden Input dankbar... Besten Gruß aus Hamburg, Kalle

    int CMifareOneDemoDlg::sqlreader(void) {
        if (sqlconnected) {
        //Typecast von CString nach std::string
          std::string sserial((LPCTSTR)listboxserial);        
          stmt = con->createStatement();
          //Standardabfrage
          res = stmt->executeQuery("SELECT name, vname, knummer from rfid_main where tagid = '" + sserial + "'");
    
          if (res->rowsCount() > 0) {    //Wenn Ergebnis nicht leer...
            while (res->next()) {        //Ergebnis zeilenweise ausgeben
                  std::string querryname = res->getString("name");
                  std::string querryvname = res->getString("vname");
                  std::string querryknummer = res->getString("knummer");
                  CString strresult;
                  strresult.Format(_T("%s, %s | KN: %s"), CString (querryname.c_str()), CString (querryvname.c_str()), CString (querryknummer.c_str()));
                  //Listfunktionen: zusammenbauen und auf letztes Ergebnis setzen
                  m_list1.AddString(datatogether+" "+strresult);
                  m_list1.SetCurSel(m_list1.GetCount()-1); 
                  rf_light(0,2);            //LED auf grün
                  tagisindb = true;
    
            } 
          } 
          else {    //Wenn das Tag nicht in der DB ist...        
              if (listboxserial != "") {    // aber erkannt werden kann    
                  rf_beep(0,20);            //Beep und Licht auf rot
                  rf_light(0,1);
                  tagisindb = false;
              } else {    
                  tagisindb = false;
              }
          }
    
    //Freigabe resultset & statement      
            delete res;
            delete stmt;
    
            return EXIT_SUCCESS;
        }
    }
    


  • Hat sich erledigt. Nach dem Umstellen auf Release und auf static linking inkl. Neuinstallation sämtlicher DLL's läufts jetzt. Grüße, Kalle


Anmelden zum Antworten