Wysyłanie danych z programu do bazy danych

0

Witam, mam problem z bazą danych.
A więc mam odwartą bazę na localhosta odpalona w xamppie na apache i mySQL no i odpalam ją w programie w Qt potem wrzucam do niej wartości niby mi pokazuje że się to udało bo sobie QMessageBoxa ustawiłem po tym kodzie żeby pokazywał czy się udało i niby pokazuje że się udało, ale wbijam do Phpmyadmin czy pliku sql i tam brak tych wartości które wpisałem, nic, czysto... Nie wiecie może o co chodzi? Może jakoś źle baze otwieram?

void Adding::on_btnok_clicked() 
{
    //DODAWANIE DO BAZY DANYCH

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setUserName("root");
    db.setPassword("");
    db.setDatabaseName("supplymng");
    if (db.open())
    {

        QSqlQuery query = QSqlQuery(db);

        ///SCIAGANIE WARTOSCI Z LINEEditów z UI
        QString nm = ui->lnname->text();
        QString nt = ui->txtnotes->toPlainText();
        QString Kc = ui->lnkcal->text(); int kc; kc= Kc.toInt();
        QString Car = ui->lncarbonates->text();int car; car= Car.toInt();
        QString Pro = ui->lnproteins->text();int pro; pro= Pro.toInt();
        QString Fa = ui->lnfats->text(); int fa; fa= Fa.toInt();
        QString Wei = ui->lnweight->text();int wei; wei= Wei.toInt();
        QDate dat = ui->caldate->selectedDate();
    /// img - ikona dla produktu/// WYSLAC JĄ DO BAZY DANYCH POTEM PRZEZ BLOB'a lub ByteArray -> doczytać

        /// WYSYLANIE DO BAZY DANYCH

        query.prepare("INSERT INTO produkty (productid,name,notes,kcal,carbonates,proteins,fats,weight,date,img)"
"VALUES(?,?,?,?,?,?,?,?,?,?) ");
        query.addBindValue(NULL);
        query.addBindValue(nm);
        query.addBindValue(nt);
        query.addBindValue(kc);
        query.addBindValue(car);
        query.addBindValue(pro);
        query.addBindValue(fa);
        query.addBindValue(wei);
        query.addBindValue(dat);
        query.addBindValue(img);

        QMessageBox::information(this,"Adding to database","Succefully added");

    }

    else QMessageBox::information(this,"Connecting to database","Database connection failed");
accept();
}```cpp
2

a gdzie w tym kodzie jest query.exec();?
Zrobiłeś bindowanie danych, a potem nic.
A productid jest chyba generowane automatycznie przez bazę danych.
Jeśli kolumna była skonfigurowana productid int NOT NULL AUTO_INCREMENT, .... , PRIMARY KEY (productid) to nie wymienia się jej podczas INSERT.

2

Zmień ostatnie wywołanie na:

if (query.exec())
{
   QMessageBox::information(this,"Adding to database","Succefully added");
}

tego przede wszystkim brakowało - tworzyłeś zapytanie, dospawałeś dane, ale finalnie go nie wykonałeś :P
Wstawić klucz automatyczny z palca wprawdzie możesz, ale nie po to bazy danych go mają jako autoID - zdefiniuj go tak, jak Marek radzi, i będzie dobrze.

1

to co przedmówcy
+
dodatkowo co do NULL
może coś zmienili lub poprawili w kodzie Qt, jednak jak pamiętałem, to zerknąłem do starego projekciku z 2012 roku, gdzie NULL miałem problem zbindować, znalazłem tam takie coś z komentarzem:

// ...
    // TO BIND NULL USE QVariant(QString()) not QVariant(QString(""))
    const QVariant qNULL(QVariant::String);

    q.addBindValue(this->_nazwa.length()?QVariant(this->_nazwa):qNULL);
// ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1