Wysyłanie danych z programu do bazy danych

Odpowiedz Nowy wątek
2019-02-09 20:31
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
edytowany 1x, ostatnio: furious programming, 2019-02-10 03:28
przy pierwszym jest NULL bo w mysql id mam na A_I - Xezolpl 2019-02-09 20:31
Ok, przepraszam ;) - Xezolpl 2019-02-10 11:05

Pozostało 580 znaków

2019-02-09 20:50
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22, 2019-02-09 20:59
Aha, czyli bez productid ok, myslalem ze trzeba ja wpisac. Czyli braklo execa, nwm, mysqla nie ogarniam wzorowalem sie na kodzie z neta. Dziekuje - Xezolpl 2019-02-09 21:24

Pozostało 580 znaków

2019-02-09 21:42

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.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 4x, ostatnio: MasterBLB, 2019-02-09 21:45
Pokaż pozostałe 6 komentarzy
ps. ikony możesz trzymać na dysku a w bazie nazwę/lokalizację coby tak mocno nie rozrastała się... - zegarek84 2019-02-10 13:15
No właśnie na początku to rozważałem, ale już sam nie wiem bo teraz przesyłam sobię tego img na qbytearray i wrzucam jako blob'a do bazy i niestety nie działa a przynajmniej na phpmyadmin sie nie wyswietla. Może i było by to najlepszą opcją sporo baza będzie na komputerze użytkownika. - Xezolpl 2019-02-10 13:17
dawno nic nie skrobałem... to z blob'em przykłady możesz szukać nawet na forum z PHP... - zegarek84 2019-02-10 13:19
How to Store and Retrieve Image on SQLite https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite google "qt blob example"... - zegarek84 2019-02-10 13:23
Widziałem ten kod, pracowałem na nim, ale tak teraz znowu patrzę i znalazłem swój błąd :D wkładałem do bazy jako bloba qimage a nie qbytearraya którego już wcześniej przygotowałem. Dzięki - Xezolpl 2019-02-10 13:44

Pozostało 580 znaków

2019-02-10 11:14
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);
// ...
Nie, nie trzeba mi chyba tego bo działa z AI ten productid więc co rekord sie inkrementuje i nie ma problema :) ale dzieki - Xezolpl 2019-02-10 11:41

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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