crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Запрос вставки, с помощью QSqlQuery
AD
  опции профиля:
сообщение 28.3.2011, 11:12
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Есть запросы вставки записи в таблицу, подобные данной:
QSqlQuery query(QSqlDatabase::database("conn_1"));
query.prepare(QString("insert into ScriptLayer(ScriptItemId, LayerNameId) values(%1, -1)").arg(id));
bool ins = query.exec();
Проверяю. ins = true. При этом в саму таблицу ничего не добавилось. Как такое возможно? Естественно, что при закрытии приложения никаких удалений не делаю.

Сообщение отредактировал AD - 28.3.2011, 11:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
3 страниц V   1 2 3 >  
Начать новую тему
Ответов (1 - 9)
BRE
  опции профиля:
сообщение 28.3.2011, 12:11
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


А если в программе sqlbrowser попробовать добавить запись в эту базу?

Как создается таблица ScriptLayer?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 28.3.2011, 12:42
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(BRE @ 28.3.2011, 13:11) *
А если в программе sqlbrowser попробовать добавить запись в эту базу?

Не пробовал. Попробую.

P.S. Да, создается.
Цитата(BRE @ 28.3.2011, 13:11) *
Как создается таблица ScriptLayer?

Она по-умолчанию создана.

Сообщение отредактировал AD - 28.3.2011, 13:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 28.3.2011, 15:18
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(AD @ 28.3.2011, 11:12) *
query.prepare(QString("insert into ScriptLayer(ScriptItemId, LayerNameId) values(%1, -1)").arg(id));

А попробуй как вот так
query.prepare(QString("insert into nameDB.ScriptLayer(ScriptItemId, LayerNameId) values(%1, -1)").arg(id));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 28.3.2011, 15:40
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(MJIbIu @ 28.3.2011, 16:18) *
А попробуй как вот так
query.prepare(QString("insert into nameDB.ScriptLayer(ScriptItemId, LayerNameId) values(%1, -1)").arg(id));

Что за nameDB? У меня ведь запрос-то выполняется... По какой-то причине при выходе из БД удаляется запись. Непонятно почему.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 28.3.2011, 15:52
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(AD @ 28.3.2011, 15:40) *
Цитата(MJIbIu @ 28.3.2011, 16:18) *
А попробуй как вот так
query.prepare(QString("insert into nameDB.ScriptLayer(ScriptItemId, LayerNameId) values(%1, -1)").arg(id));

Что за nameDB? У меня ведь запрос-то выполняется... По какой-то причине при выходе из БД удаляется запись. Непонятно почему.

query.prepare("INSERT INTO ИмяБД.ИмяТаблице VALUES (:value1,:value2);");
query.bindValue(":valut1", "значение 1");
query.bindValue(":value", "значение 2");
я делаю так
Если бы у тебя запрос бы выполнялся тогда бы и в БД заносились бы данные.

Цитата(AD @ 28.3.2011, 15:40) *
По какой-то причине при выходе из БД удаляется запись.

:huh:
Ты с какой СУБД работаешь ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 28.3.2011, 16:36
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(MJIbIu @ 28.3.2011, 16:52) *
query.prepare("INSERT INTO ИмяБД.ИмяТаблице VALUES (:value1,:value2);");
query.bindValue(":valut1", "значение 1");
query.bindValue(":value", "значение 2");
я делаю так
Если бы у тебя запрос бы выполнялся тогда бы и в БД заносились бы данные.

При добавлении я вижу, что в таблице появилась новая запись, значит, все же, добавилась. На счет ИмяДБ хотел уточнить. Я правильно понимаю, что имеется в виду имя соединения или же имеется в виду имя следующее - QSqlDatabase::database("connectionName").databaseName();

Цитата(MJIbIu @ 28.3.2011, 16:52) *
:huh:
Ты с какой СУБД работаешь ?

SQLiteAdmin в качестве СУБД. http://sqliteadmin.orbmu2k.de/

Сообщение отредактировал AD - 28.3.2011, 16:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MJIbIu
  опции профиля:
сообщение 28.3.2011, 17:03
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 14.4.2010
Пользователь №: 1630

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(AD @ 28.3.2011, 17:36) *
При добавлении я вижу, что в таблице появилась новая запись, значит, все же, добавилась. На счет ИмяДБ хотел уточнить. Я правильно понимаю, что имеется в виду имя соединения или же имеется в виду имя следующее - QSqlDatabase::database("connectionName").databaseName();

Цитата(MJIbIu @ 28.3.2011, 16:52) *
:huh:
Ты с какой СУБД работаешь ?

SQLiteAdmin в качестве СУБД. http://sqliteadmin.orbmu2k.de/

create database ИмяБД character set utf8; вот что я имел виду
если у тебя создается тогда это не важно
Важнее то что у тебя после выхода твоей проги не сохраняются данные.
Выложи полный код. И покопайся в СУБД мб она как то настроено хитро всяко бывает

http://www.mysql.ru/docs/gruber/mg23.html
КОГДА СДЕЛАННЫЕ ИЗМЕНЕНИЯ СТАНОВЯТСЯ ПОСТОЯННЫМИ
Смахивает на твою проблему

Сообщение отредактировал MJIbIu - 28.3.2011, 16:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 29.3.2011, 11:24
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(MJIbIu @ 28.3.2011, 18:03) *
http://www.mysql.ru/docs/gruber/mg23.html
КОГДА СДЕЛАННЫЕ ИЗМЕНЕНИЯ СТАНОВЯТСЯ ПОСТОЯННЫМИ
Смахивает на твою проблему

Да. Похоже на данную проблему. Как это в СУБД решить, пока не нашел.
/// Вcmaвka строк в таблицу AztPage
bool SqlFileModel::insertRowsAztPage(int row, int count)
{
    if(tableName() != QString("AztPage")) return false;

    QStringList chart_names(valueElement("Azt/ChartFiles", QStringList()).toStringList());
    QString chart_name(chart_names.at(row));
    int sz = rowCount(), id = sz,
        stump_group_of_pages_id = 1;            ///< TODO: номер группы страниц (затычка)
    if(id < 0) id = 0;
    ++id;
    for(int i=0; i<sz; ++i)
    {
        QString file_name(record(i).value("SpatialFilePath").toString());
        if(chart_names.at(row).toLower() == file_name.toLower())
            return false;
    }
    QSqlDatabase db(QSqlDatabase::database("conn_1"));
    QString query_string(QString("insert into AztPage(Id, SpatialFilePath, GroupOfPagesId) values(%1, '%2', %3)")
                .arg(id).arg(chart_names.at(row)).arg(stump_group_of_pages_id));
    QSqlQuery query(db), q(db);
    query.prepare(query_string);
    q.prepare(QString("COMMIT;"));
    bool res = query.exec(), res_commit = q.exec();
    QString err(q.lastError().text());
    if(!res) return false;

    return true;
}

res = true, res_commit = false;
И в БД не попадает при выходе из приложения.
В err данном случае попадает следующая фраза
Цитата
cannot commit transaction - SQL statements in progress Unable to fetch row

Данный код тоже выдает сообщение предупреждение
QSQLiteDriver* p_driver((QSQLiteDriver*)QSqlDatabase::database("conn_1").driver());
bool is = p_driver -> commitTransaction();
if(!is)
        emit display(p_driver -> lastError().text(), true, false);

Цитата
cannot commit transaction - SQL statements in progress Unable to commit transaction.
Есть варианты как сделать? Копаюсь в ассистенте. Пока ничего не нашел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 29.3.2011, 15:17
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Буду рад, если поможете. Не понимаю, как сделать правильный commit транзакции. Возвращает ошибку, указанную в предыдущем посте. Повторюсь, что это необходимо, чтобы БД приняла данные, т.е. чтобы данные сохранились в БД. На данный момент получается такая фигня, что я вижу добавленные данные во время работы приложения. Но как только я перезапускаю приложение, данных нет. Сделать так, чтобы commit в итоге стал true не получается....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.11.2024, 2:47