QT 5.5, ODBC, Informix - Błąd Sekwencji funkcji, QODBC3: Unable to execute statement.

0

Witam, podczas pisania swojego programu do projektu natrafiłem na problem, którego nie umiem rozwiązać...

Poprzez kliknięcie na przycisk Dodaj powinno umieścić rekord w bazie danych... niestety pojawia się o to taki błąd:

QODBCResult: Unable to execute statement: "[Microsoft][Menedżer sterowników ODBC] Błąd sekwencji funkcji"
" "
"[Microsoft][Menedżer sterowników ODBC] Błąd sekwencji funkcji QODBC3: Unable to execute statement" DODAJ BUTTON

Ten dodaj button to z mojego qDebug.

Kod akcji przycisku:

void pacjenci_window::on_dodaj_clicked()
{
    QSqlQuery uQuery = QSqlQuery(db);
    uQuery.prepare("INSERT INTO pacjent(nr_ubezpieczenia, imie_pacjenta, nazwisko_pacjenta, adres_pacjenta, telefon_pacjenta) VALUES(nr_ubezpieczenia = :nr_ub, imie_pacjenta= :imie, nazwisko_pacjenta = :nazwisko, adres_pacjenta = :adres, telefon_pacjenta = :telefon)");
    uQuery.bindValue(":nr_ub",ui->nr_ub->text());
    uQuery.bindValue(":imie",ui->imie->text());
    uQuery.bindValue(":nazwisko",ui->nazwisko->text());
    uQuery.bindValue(":adres",ui->adres->text());
    uQuery.bindValue(":telefon",ui->nr_tel->text());
    if(!uQuery.exec()){
        qDebug() << db.lastError().text();
        qDebug() << uQuery.lastError().text() << "   DODAJ BUTTON";
    }
    sQuery.prepare("SELECT * FROM pacjent");
    if(!sQuery.exec()){
        qDebug() << uQuery.lastError().text() << "   DODAJ BUTTON select";
    }
    sQuery.last();
    FillForm();
} 

Nie wiem czy to wina kodu, czy może potrzeba gdzieś wrzucić dodatkowo plik ze sterownikiem ODBC, itp.... Z zapytaniem SQL cudowałem na chyba wszystkie sposoby i żadne nie przeszło.
pacjenci_window.h:
http://pastebin.com/BVs0WrRd
pacjenci_window.cpp:
http://pastebin.com/X9wuuPUb

Dodam że przy innych przyciskach też występuję podobny błąd. Tak naprawdę to działają mi tylko zapytania SELECT. Mam nadzieję że znajdzie się ktoś na tyle uprzejmy aby podpowiedzieć w czym tkwi błąd :)

0
INSERT INTO pacjent(nr_ubezpieczenia, imie_pacjenta, nazwisko_pacjenta, adres_pacjenta, telefon_pacjenta) VALUES (:nr_ub, :imie, :nazwisko ...)
0

Niestety to nie jest to... Po poprawieniu kodu program przy naciśnięciu Dodaj zawiesza się i nawet nie drukuje błędu...

0

Em, no to w takim razie może ten błąd jest naprawiony, ale wiesza się gdzieś dalej? ;p
Przestepuj kod debuggerem.

0

Program zawiesza się po prostu w momenciu if(!uQuery.exec)....
I nic nie idzie z nim dalej zrobić, w debuggerze tez się zawiesza. Nawet nie drukuje qDebugiem czy Query został wykonany, czy nie...

void pacjenci_window::on_dodaj_clicked()
{
    QSqlQuery uQuery = QSqlQuery(db);
    uQuery.prepare("INSERT INTO pacjent(nr_ubezpieczenia, imie_pacjenta, nazwisko_pacjenta, adres_pacjenta, telefon_pacjenta) VALUES(:nr_ub, :imie, :nazwisko, :adres, :telefon)");
    uQuery.bindValue(":nr_ub",ui->nr_ub->text());
    uQuery.bindValue(":imie",ui->imie->text());
    uQuery.bindValue(":nazwisko",ui->nazwisko->text());
    uQuery.bindValue(":adres",ui->adres->text());
    uQuery.bindValue(":telefon",ui->nr_tel->text());
    if(!uQuery.exec()){
        qDebug() << db.lastError().text();
        qDebug() << uQuery.lastError().text() << "   DODAJ BUTTON";
    }
    else {
        qDebug() << "Przeszlo";
    }
    sQuery.prepare("SELECT * FROM pacjent");
    if(!sQuery.exec()){
        qDebug() << uQuery.lastError().text() << "   DODAJ BUTTON select";
    }
    sQuery.last();
    FillForm();
} 

@Edit:
wpadłem na pomysł, że może być coś nie tak z ui->nr_ub->text() - po wyswietleniu w qDebug pojawia się String ale w cudzysłowie - może dlatego zapytanie się wywala? Masz może pomysł jak usunąć ten cudzysłów?
wpisałem na sztywno dane i też sie zawiesza. Może jest to jakiś błąd w konfiguracji ODBC?
Dobra, wiem w czym problem... Jeśli w zapytaniu wpiszę na sztywno w polach zapytania przykładowo: 111,'Michal','costam','costam',222 to zapytanie zostaje wysłane na serwer i rekord zostaje dodany. Nawet wyświetla sie w oknie w tabelce. Więc problem jest z tymi wartościami w bindvalue. Ma ktoś może pomysł jak to rozwiązać?

@Edit Potestowałem i jestem na 90% pewny, że problem polega właśnie na tym, że serwer nie przyjmuje zapytania ze zwykłym cudzysłowem, ale z pojedynczymi apostrofami. Niestety czytałem dokumentacje, googlowałem i nie mam pomysłu jak tekst z pola tekstowego, który jest QStringiem zapisanym w cudzysłowie zmienić na treść z apostrofami.

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