2016-07-18 9 views
0

DAS PROBLEM:C++ String Ausgabe von MySQL-Anschluss mit Grafik-Schnittstelle entweder abstürzt oder druckt Müll

ich meine SQL-Abfrage haben ordnungsgemäß ausgeführt wird, wenn der Ausgang ist Konsole, aber ich bekomme ^^^ ^^^^^ ! auf der Grafikoberfläche oder es stürzt ab.

Mein Programm ist auf Visual Studio 2005 kompiliert und ich benutze Allegro.cc-Bibliothek Dies ist ein altes Projekt, das wiederbelebt werden muss.

Was ich tun möchte, ist:

1- Führen Sie eine Grafikschnittstelle, haben einige Aktion gehen, so dass sie die Daten auf MySQL speichern.

2- Immer und jetzt, ich muss die DB abfragen und einige Daten bekommen.

3- Ich möchte die abgefragten Daten auf dem Grafikbildschirm anzeigen.

MySql Connector ist 1.1.7 mit Binärdateien von der Website.

MySQL auf XAMP Turnkey Linux läuft Box 5.5.33-0 + wheezy1

Das Schema Motor ist: InnoDB Die Tabelle Kollation ist UTF-8 Standardkollatierung Die PK ist NN, AI.

Ein Spaltenname ist PointOfSaleID, VARCHAR (9) Ein weiterer Spaltenname ist cardIndex, INT (11)

Das Stück Code unten:

std::stringstream OutputStream; 
(...) 

prep_stmt = con -> prepareStatement ("SELECT * FROM `Triangulo`.`CardsSold` WHERE HitsA > 4 AND HitsB > 4 AND HitsC >4"); 

res = prep_stmt -> executeQuery(); 

con -> commit(); 

while (res -> next()) { 
    OutputStream << res -> getInt("idCardsSold"); 
    textprintf_ex(OUTPUT, font, 10, 10, makecol(255,255,255), 

makecol(0,0,0), "Winner Card %s", OutputStream.str().c_str()); 
     OutputStream.str(std::string()); // clear the string stream 

CRASHES HERE! OutputStream << res -> getString("PointOfSaleID"); 
     textprintf_ex(OUTPUT, font, 10, 300, makecol(255,255,255), makecol(0,0,0), "PointOfSaleID %s", OutputStream.str().c_str()); 

Wenn ich die gleiche Sache auf die Konsole - Textausgabe - das Programm läuft korrekt.

prep_stmt = con -> prepareStatement ("SELECT * FROM `Triangulo`.`CardsSold` WHERE HitsA > 4 AND HitsB > 3 AND HitsC >4"); 

res = prep_stmt -> executeQuery(); 

con -> commit(); 

    /* fetch the data : retrieve all the rows in the result set */ 

while (res -> next()) { 
    cout << Card: "; 
    cout << res -> getInt("idCardsSold") << endl; 


    OutputStream << res -> getString("PointOfSaleID"); 
    std::string resultstr = OutputStream.str(); 

    const char* cstr2 = resultstr.c_str(); 

    cout << "Loja Venda: "; 
    cout << cstr2 << endl; 

    cout << res -> getString("PointOfSaleID") << endl; 
} 

Es scheint ein Problem mit dem std :: stringOutput zu sein, aber ich kann nicht herausfinden, was los ist.

Jede Hilfe wird geschätzt.

Antwort

0

Der Fehler war meiner. Ich habe die falschen Bibliothekseinstellungen und -kombinationen in Visual Studio verwendet. Für diejenigen, die es gerne wissen würden, war es eine Mischung aus Bibliotheken von MySQL Connector für cpp mit den anderen Bibliotheken von MySQL Server. Ich las die Anweisungen noch einmal durch und stellte fest, dass es Fehler gab. Der Catch ist, dass der Connector für getInt() auch mit den falschen Bibliothekseinstellungen, Elementen und Kombinationen funktioniert hat und nicht für getString() funktioniert hat.

1- auf das Minimum, den Fehler zu reproduzieren erforderlich Reduzieren Sie den Code:

Die Methode, die ich, wie ich vielleicht von Bedeutung Neulinge verwendet, so wird es weiter unten. 2- Lesen Sie die Dokumentation der Produkte, die Sie verwenden möchten. 3- Versuchen Sie, anderen in schriftlicher und ausführlicher Form zu erklären, wie Sie was erreichen wollen. 4- Überarbeiten Sie Ihre eigene Frage nach etwas Schlaf.

Das funktionierte für mich.