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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не обрабатываются запросы 4.4.1  (Прочитано 8152 раз)
Krow
Гость
« : Август 24, 2008, 14:33 »

Для начала приведу несколько кусков кода:
Код:
QSqlQuery *query = new QSqlQuery(QSqlDatabase::database("myorg"));
query->exec("create table myorg (id, name, fullname, yuradress, faktadress, inn, idbank, bankname, phone, pschet, direktor, kassir, glbuh)");
query->exec("INSERT INTO myorg (id) VALUES ('1')");
вот так создаётся моя таблица. значение в таблице будет тока одно, поэтому сразу добавляется.
здесь проблем не возникает.
вызываю окно в котором будут редактироваться поля данной таблицы. Вот так происходит заполнение этого окна:
Код:
QSqlQuery *queryMyOrg = new QSqlQuery(QSqlDatabase::database("myorg"));
queryMyOrg->exec("SELECT * FROM myorg WHERE id='1'");
queryMyOrg->first();
ui.leName->setText(queryMyOrg->value(1).toString());
ui.leFullName->setText(queryMyOrg->value(2).toString());
ui.leYurAdress->setText(queryMyOrg->value(3).toString());
ui.leFactAdress->setText(queryMyOrg->value(4).toString());
ui.leInn->setText(queryMyOrg->value(5).toString());
ui.lePhone->setText(queryMyOrg->value(8).toString());
ui.leRSchet->setText(queryMyOrg->value(9).toString());
ui.leLeader->setText(queryMyOrg->value(10).toString());
ui.leAccountant->setText(queryMyOrg->value(12).toString());
ui.leTeller->setText(queryMyOrg->value(11).toString());
после внесений в них изменения. и выполнения процедуры с кодом:
Код:
QSqlQuery *queryMyOrg = new QSqlQuery(QSqlDatabase::database("myorg"));
QString queryStr;
queryStr = tr("UPDATE myorg SET name='%1', fullname='%2', yuradress='%3', faktadress='%4', inn='%5', idbank='%6', bankname='%7', phone='%8', pschet='%9', direktor='%10', kassir='%11', glbuh='%12' WHERE id='1'").arg(ui.leName->text()).arg(ui.leFullName->text()).arg(ui.leYurAdress->text()).arg(ui.leFactAdress->text()).arg(ui.leInn->text()).arg(QString::number(idBank)).arg(ui.cbBank->currentText()).arg(ui.lePhone->text()).arg(ui.leRSchet->text()).arg(ui.leLeader->text()).arg(ui.leTeller->text()).arg(ui.leAccountant->text());
queryMyOrg->exec(queryStr);
QMessageBox::critical(0, "", queryMyOrg->executedQuery());
close();
внесения в базу данных изменений не происходит. не могу понять в чем проблема Грустный

экспериментальным путем выяснил что БД не воспринимает третий и последующий запросы на изменение этой БД. т.е. первый запрос на создание таблицы и второй запрос на внесение новой записи проходят нормально. а потом больше никакие запросы не проходят.
queryMyOrg->lastError.text() ошибок не показывает
кто что посоветует? где копать? (кладбище не предлагать!)

ЗЫ с другими БД и таблицами в этом приложении работает всё нормально. ошибок при открытии БД не выскакивает. SELECT запросы работаеют нормально.
Записан
ритт
Гость
« Ответ #1 : Август 24, 2008, 15:16 »

я бы предложил использовать QSqlTableModel + QDataWidgetMapper + дюжина строк кода...а эту карикатуру закопать

ЗЫ queryStr = tr(...) - это некий извращённый способ писать запросы в юникоде?
ЗЫЗЫ а почему ты не пишешь QString *queryStr = new QString("...") ? QString ведь тоже шарабля...
Записан
Krow
Гость
« Ответ #2 : Август 24, 2008, 16:32 »

я бы предложил использовать QSqlTableModel + QDataWidgetMapper + дюжина строк кода...а эту карикатуру закопать

ЗЫ queryStr = tr(...) - это некий извращённый способ писать запросы в юникоде?
ЗЫЗЫ а почему ты не пишешь QString *queryStr = new QString("...") ? QString ведь тоже шарабля...
по поводу первой части.. предпочитаю контроллировать вручную базу.. как добавляется и пр.
по поводу второй привычка.. в этой версии кути не пробовал как кутя работает с юникодом в qstring но в версии 4.2.2 были с ней проблемы в винде. даже при использовании qtextcodec
Записан
ритт
Гость
« Ответ #3 : Август 24, 2008, 17:13 »

Код:
QSqlQuery *query = new QSqlQuery(QSqlDatabase::database("myorg"));
query->exec("create table myorg (id, name, fullname, yuradress, faktadress, inn, idbank, bankname, phone, pschet, direktor, kassir, glbuh)");
query->exec("INSERT INTO myorg (id) VALUES ('1')");
вот так создаётся моя таблица. значение в таблице будет тока одно, поэтому сразу добавляется.
здесь проблем не возникает.
delete query в этом куске кода присутствует?
Записан
Krow
Гость
« Ответ #4 : Август 24, 2008, 19:00 »

нет. пробовал и не в этом куске создавать запись.. не помогает. когда база создана выполняется тока запрос update все равно не помогает
Записан
ритт
Гость
« Ответ #5 : Август 24, 2008, 20:49 »

эксперимента ради замени
Код:
QSqlQuery *query = new QSqlQuery(QSqlDatabase::database("myorg"));
query->exec("create table myorg (id, name, fullname, yuradress, faktadress, inn, idbank, bankname, phone, pschet, direktor, kassir, glbuh)");
query->exec("INSERT INTO myorg (id) VALUES ('1')");
на
Код:
{
    QSqlQuery query(QSqlDatabase::database("myorg"));
    query.exec("create table myorg (id, name, fullname, yuradress, faktadress, inn, idbank, bankname, phone, pschet, direktor, kassir, glbuh)");
    query.exec("INSERT INTO myorg (id) VALUES ('1')");
}
Записан
Krow
Гость
« Ответ #6 : Август 24, 2008, 22:32 »

завтра ради эксперимента сделаю... тока вопрос... а смысл? не понимаю.. что это даст кроме того что я с указателями не буду работать?
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #7 : Август 28, 2008, 22:08 »

Попробуй использовать QCursor. В нем легче определить поле на котором происходит ошибка...
Похоже, какое то поле не изменяется (некорректно), и в результате не обновляется вся запись Злой
Записан

Как мало времени и как много нужно узнать
ритт
Гость
« Ответ #8 : Август 28, 2008, 23:46 »

Попробуй использовать QCursor
Цитировать
QT 4.3.0 - OS Linux Suse10.2
а ну-ка, найди QCursor: http://doc.trolltech.com/main-snapshot/classes.html
точнее, найди и скажи как через него выполнить запрос...
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #9 : Август 29, 2008, 10:00 »

Извиняюсь, имел  ввиду QSqlCursor, но его в QT4.4.1 не наблюдается...
Работаю с QT3.3.8.  Да уж, вирсии категорически отличаются...
Это не есть хорошо... Злой

Для проверки можно использовать       Q3SqlCursor - он имеется для совместимости.

На трешке это приблизительно так:

Код:
  int Count;
  QSqlRecord *buffer;
  QSqlCursor cPuskAG("test"); // таблица
  cPuskAG.select("countkey="+QString::numb(10));  // меняем запись №10
  if (cPuskAG.next()==true) // есть запись
 {
buffer = cPuskAG.primeUpdate();   // запись для обновления
buffer->setValue("name","ales is ordnung");
          Count=cPuskAG.update();
 }
  if (Count==1) // запись успешна
 {
 }

И т.д. - перебрать все поля и определить кривое Веселый
« Последнее редактирование: Август 29, 2008, 10:19 от Примерный ученик » Записан

Как мало времени и как много нужно узнать
ритт
Гость
« Ответ #10 : Август 29, 2008, 14:12 »

дело наверняка не в кривизне поля...
ждём что скажет Кроу
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #11 : Август 29, 2008, 14:42 »

Не знаю как в 4.4.1, а в 3.3.8 в
Код:
C:\QT\3.3.8\examples\demo

Есть демонстрация работы с БД с помощью SQL запросов.
Классная штука, я на ней все свои сложные запросы отлаживаю,
она прям носом тыкает в ошибочные конструкции.
Если под ней запрос проходит, то все ГАРАНТИРОВАННО в порядке Рот на замке
Записан

Как мало времени и как много нужно узнать
ритт
Гость
« Ответ #12 : Август 29, 2008, 15:13 »

предпочитаю контроллировать вручную базу.. как добавляется и пр.
квотить названия таблиц/полей/значений вручную - себе вредить

Записан
Krow
Гость
« Ответ #13 : Август 30, 2008, 12:34 »

возможно. видать что проблема именно в создании сей базы. решил забить на неё и реализовать всё через xml. так было проще и удобнее. данных в этой базе вс1 равно не много было бы.
Записан
ритт
Гость
« Ответ #14 : Август 30, 2008, 16:34 »

а какая бд использовалась?
и ты всё-таки попробовал тот код?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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