Russian Qt Forum

Qt => Базы данных => Тема начата: chu от Февраль 14, 2011, 12:59



Название: ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/too
Отправлено: chu от Февраль 14, 2011, 12:59
Код:
ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/tools/qvarlengtharray.h, line 107
ошибка при попытке выполнении setData
Код:
int row = sqlModel->rowCount();
    sqlModel->insertRow(row);
    qDebug()<<row;
    sqlModel->setData(sqlModel->index(row, 1), "qweqwer");
в БД несколько таблиц, функция вставки работала для всех, добавил в БД ещё одну таблицу...
и замучался искать что с ней не так >:( данные не отображаются, setData не работает...
проьовал c mySQL и MS SQL Server - без результатов.
Код:
MyForm::MyForm(QWidget *parent)
    :QDialog(parent)
{
    setWindowFlags(Qt::Window);

    sqlModel = new QSqlTableModel;
    sqlModel->setTable("check");
    sqlModel->setSort(Check_Id, Qt::AscendingOrder);
    sqlModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    sqlModel->select();

    qDebug()<<checkModel->tableName();
    qDebug()<<checkModel->index(1,1).data().toString();

    sqlTableView = new QTableView;
    sqlTableView->setModel(sqlModel);
    sqlTableView->setColumnHidden(Check_Id, true);
    sqlTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    sqlTableView->resizeColumnsToContents();

    QGridLayout *lay = new QGridLayout;
    lay->addWidget(checkTableView, 0, 0, 4, 1);
    ...
    setLayout(lay);

    resize (1024, 640);
}
подставляя любую другую таблицу в setTable все ОК.
что может быть не так с этой таблицей?! (работаю под root / sa)


Название: Re: ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/too
Отправлено: Пантер от Февраль 14, 2011, 13:05
Привел бы скрипт создания таблицы, что ли.


Название: Re: ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/too
Отправлено: chu от Февраль 14, 2011, 13:10
создавал в MS SQL Server Managment Studio
стандартно: БД - таблицы - new table - заполнил несколько полей.


Название: Re: ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/too
Отправлено: Пантер от Февраль 14, 2011, 13:25
Я просил что-то типа:
"CREATE table some_table (id INTEGER, ....."
Т.е. чтобы можно было увидеть какие поля, какие зависимости и пр.


Название: Re: ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/too
Отправлено: chu от Февраль 14, 2011, 13:25
Неожиданно решил проблему  :D
все дело в имени таблицы: "check"
изменил имя - все заработало!
не знал что существуют "некорректные/нежелательные" имена для таблиц


Название: Re: ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/too
Отправлено: Пантер от Февраль 14, 2011, 13:26
Гы. Есть зарезервированные слова. Обычно если используешь зарезервированное слово, то на оно обрамляется кавычками. т.е. название твой таблицы было не check, а "check".


Название: Re: ASSERT: "idx >= 0 && idx < s" in file ..\..\include/QtCore/../../src/corelib/too
Отправлено: chu от Февраль 14, 2011, 13:35
Гы. Есть зарезервированные слова. Обычно если используешь зарезервированное слово, то на оно обрамляется кавычками. т.е. название твой таблицы было не check, а "check".
Спасибо за инфу! :)
эх... знал бы я это вчера, когда весь вечер перекапывал прогу и настройки sql