2009-11-05 8 views
3

Je veux accéder à une base de données MySQL et je veux lire + écrire des données de + vers la base de données dans mon programme Qt/C++. Pour le processus d'écriture en lecture, j'essaie d'utiliser QSqlTableModel, QSqlTableRcord et QSqlDatabase car c'est une approche très agréable sans trop de commandes SQL que je n'aime pas pour l'une ou l'autre raison (me gérer). J'ai déjà une approche similaire en cours d'exécution (donc la base de données est déjà en cours d'exécution), mais il est encombré partout. Donc, la question simple est ce que je fais mal dans ces quelques lignes d'un exemple de code: Utilisation QT 4.5.x La base de données de test a 3 colonnes: x float, float y, blob imgSoumission QSqlRecord à la base de données MySQL dans Qt

int main(){ 
QImage img("./some_image.png"); 
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); 
db.setHostName("localhost"); 
db.setDatabaseName("test"); 
db.setPort(3306); 
db.setUserName("root"); 
db.setPassword("xxxxxxx"); 
if (!db.open()) 
    qDebug("Mising db/unable to open"); 
else { 
    QSqlTableModel model; 
    qDebug() << "tables::" <<db.tables(); //so I see the table exists and gets detected 
    model.setTable("test_table"); 

    QSqlRecord rec; 
    rec.setValue(0,1.0f); 
    rec.setValue(1,2.0f); 

    QByteArray ba; 
    QBuffer buffer(&ba); 
    buffer.open(QIODevice::WriteOnly); 
    img.save(&buffer, "PNG"); 
    rec.setValue(2,ba); 

    model.insertRecord(0,rec); 
    qDebug() << model.lastError().text(); 
    if (!model.submitAll()) 
     qDebug() << "Submit all did not work"; 
    return 0; 
    } 

Thx pour De toute façon, j'ai déjà couru d'un bout à l'autre du document Qt mais je n'ai pas trouvé de solution et j'ai déjà perdu 5 heures à le faire, donc je suis reconnaissant pour tout conseil (sauf si vous suggérez de le faire complètement différent).

+0

Pourriez-vous ajouter un peu plus d'informations sur la façon dont cela échoue? Quelle est la valeur de model.lasterror(). Text()? – Andomar

+0

il est vide, donc je suis vraiment désemparé – drahnr

Répondre

6

Votre QSqlRecord n'a aucun champ défini. Vous devez ajouter

rec.append(QSqlField("x", QVariant::Double)); 
rec.append(QSqlField("y", QVariant::Double)); 
rec.append(QSqlField("img", QVariant::Image)); 

avant de définir les valeurs

Questions connexes