Russian Qt Forum
Ноябрь 22, 2024, 23:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение QT к Access, операция INSERT  (Прочитано 5682 раз)
Praid
Гость
« : Февраль 06, 2018, 10:54 »

Товарищи, такой вопрос.
Подключил QT к ACCESS. Таким вот образом:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("127.0.0.1");
db.setDatabaseName("Driver={Microsoft Access Driver (*.mdb, *.accdb)}SN=''BQ=C:\\database.accdb");
db.setUserName("root");
if(!db.open())
qDebug() << db.lastError().text();
else
qDebug() << "Connect!";

К базе данных подключился, qDebug мне написал Connect, всё хорошо.
На форме в представлении view записи из БД сохранились.

Далее пытаюсь сделать вставку в БД. Таким образом:

QSqlQuery* query = new QSqlQuery(db);
query->prepare("INSERT INTO devices(type, number) VALUES (:type, :number);");
query->bindValue(":type", "someType");
query->bindValue(":number", 123);
query->exec();
qDebug() << query->lastError().databaseText();
qDebug() << query->lastError().driverText();


qDebug выдаёт следующее:

"[Microsoft][Драйвер ODBC Microsoft Access] Ошибка синтаксиса в инструкции INSERT INTO."
"QODBC3: Unable to prepare statement"

Я уже всякий способ перепробовал.

C использованием безымянных параметров:

QSqlQuery* query = new QSqlQuery(db);
query->prepare("INSERT INTO devices(type,number) VALUES (?, ?);");
query->bindValue(":type", "someType");
query->bindValue(":number", 123);
qDebug() << query->lastError().databaseText();
qDebug() << query->lastError().driverText();

Без подготовки:

query->exec("INSERT INTO devices(type, number) VALUES ('someType',157);");

Одна и та же ошибка:

"[Microsoft][Драйвер ODBC Microsoft Access] Ошибка синтаксиса в инструкции INSERT INTO."
"QODBC3: Unable to prepare statement"

Кто может подсказать где проблема в синтаксисе?

При использовании такого запроса:

    QSqlQuery query;
    query.prepare("INSERT INTO devices(type,number) VALUES (?, ?);");
    query.bindValue(":type","someType");
    query.bindValue(":number","123");
    query.exec();
    qDebug() << query.lastError();

Ошибка:
QODBCResult::exec: Unable to execute statement: "[Microsoft][Драйвер ODBC Microsoft Access]Неверное поле COUNT "
QSqlError("17", "QODBC3: Unable to execute statement", "[Microsoft][Драйвер ODBC Microsoft Access]Неверное поле COUNT ")

А что за поле COUNT, если у меня в таблице только два столбца - type, number?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Февраль 06, 2018, 12:08 »

https://stackoverflow.com/questions/23449776/odbc-microsoft-access-drivercount-field-incorrect
Записан
Praid
Гость
« Ответ #2 : Февраль 06, 2018, 13:55 »

Всё. Проблема решена. Всё дело в скобках [].

QSqlQuery query;
if(query.prepare("INSERT INTO [devices] ([type],[number]) VALUES (:type, :number)"))
{
query.bindValue(":type","someType");
query.bindValue(":number","124");
qDebug() << query.exec();
}
qDebug() << query.lastError();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 23.