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, Kalleint 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