Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [qt4] ODBC бинд значений


Автор: GrishinUS 22.10.2008, 10:03
Добрый день!

код:
Код


    QSqlDatabase dbInOut2 = QSqlDatabase::addDatabase("QODBC"); 
..............................
    
    bool connected = dbInOut2.open();
    if (!connected) 
        {
         QMessageBox msgBox;

            msgBox.setText("database : InOut");
            msgBox.setIcon(QMessageBox::Critical);
            msgBox.setDefaultButton(QMessageBox::Save);
            msgBox.setInformativeText(dbInOut2.lastError().text());
            msgBox.setStandardButtons(QMessageBox::Ok);
            msgBox.setDefaultButton(QMessageBox::Ok);
            msgBox.exec();
            
            return 10;
        }
    QSqlQuery query;
    query.prepare("INSERT INTO InOut (KartaNum, DateIn, PostIn, CarID) "
    "VALUES (?, GETDATE(), ?, ?");
    query.addBindValue("747744");
    query.addBindValue("1");
    query.addBindValue("sdrfwe");

    query.exec();


выдает ошибку :

QODBCResult::exec: Unable to execute statement:   [Microsoft][SQL Native Client]
[SQL Server]Incorrect syntax near '@P3'. [Microsoft][SQL Native Client][SQL Serv
er]Statement(s) could not be prepared.

у меня в запросе нет '@P3'!!

пробовал еще биндить с помощью
bind()
говорит что у объекта query такой метод не найден.

Автор: GrishinUS 22.10.2008, 12:55
вобщем экспериментальным путем установлено, что ошибка возникает если смешивать бинды со вставкой GetDate().
Например, вот так запись в таблицу прохдит :

Код

    query.prepare("INSERT INTO InOut3 (grishin, dateIn) "    
    "VALUES('ruhfusd', GetDate())");


и вот так тоже :
Код

        query.prepare("INSERT INTO InOut3 (grishin, dateIn) "    
        "VALUES(":grishin1");
    query.bindValue(":grishin1", "123");


Вопрос теперь в том как забиндить текущую дату?

Автор: crossly 22.10.2008, 13:04
QDate::currentDate();

Автор: GrishinUS 22.10.2008, 13:11
Цитата(crossly @ 22.10.2008,  13:04)
QDate::currentDate();

вообще на клиенте может стоять некорректная дата, так что нужна дата с sql сервера. Ладно, короче говоря втопку этот бинд, сделал вот так :

Код

    query.prepare("INSERT "
    "INTO InOut "
    "    (KartaNum "
    "    , DateIn "
    "    , PostIn "    
    "    , CarID) "
    "VALUES ("
    "    '555' "
    "    , GETDATE() "
    "    , 12 "
    "    , '" + qstrID + "')"
    );
    
    query.exec();


Хороший форум -- что не напишешь, все решается (=

Автор: crossly 22.10.2008, 13:56
ну если так не нравится .... то мона вообще тупо постваить поле даты в запросе в конец... и биндить как тебе хочется..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)