Russian Qt Forum

Qt => Базы данных => Тема начата: mokynis от Февраль 04, 2010, 13:57



Название: не дополучаю содержимое запроса
Отправлено: mokynis от Февраль 04, 2010, 13:57
просто интересно, почему так:
получаю информацию для последующей печати-
void MyModel::makeHtml()
{
    QSqlQuery qry=this->query();
    QString strHtml="<TABLE BORDER>",tekUser="";
//пробовал без first(),next() и isValid(), просто while(qry.next())-теряет первые записи
    qry.first();
    while(qry.isValid())
    {
        if(tekUser!=qry.value(1).toString())
        {
            strHtml+="<TR><TH COLSPAN=5>"+qry.value(1).toString()+"</TH></TR>";
            tekUser=qry.value(1).toString();
        }
        strHtml+="<TR><TD>"+qry.value(2).toString()+"</TD>"+.....
        qry.next();
    }
    strHtml+="</TABLE>";
........
}
вопрос: почему надо непременно мудрить с first()? Я ж в qry получил содержимое запроса? Даже если встаю на первую строку в QTableView, в которой отображается модель, все равно на печати отсутствуют несколько первых строк.


Название: Re: не дополучаю содержимое запроса
Отправлено: crossly от Февраль 04, 2010, 14:05
При переходе на по TableView QSqlQuery::seek не вызывается.... а вызывается он в методе data модели.... т. е. по идее при QSqlQuery qry=this->query(); позиция в запросе должна быть в строке для которой последним вызывался  data модели.... каламбур... но надеюсь понятно??


Название: Re: не дополучаю содержимое запроса
Отправлено: CroCIV от Февраль 04, 2010, 14:36
нет )))) не понятно, прям талантище для написания курсовых и дипломов ;D


Название: Re: не дополучаю содержимое запроса
Отправлено: mokynis от Февраль 04, 2010, 14:43
Цитировать
надеюсь понятно??
не особо :(
Если я на первой строке стою, то для нее и вызывается data (у меня подробно раскрывается выбранная запись). Ну, не будет в распечатке первой записи, так у меня их штук несколько отсутствует.


Название: Re: не дополучаю содержимое запроса
Отправлено: CroCIV от Февраль 04, 2010, 14:51
mokynis, а что возвращает тебе qry.at()?


Название: Re: не дополучаю содержимое запроса
Отправлено: CroCIV от Февраль 04, 2010, 14:56
попробуй еще предварительно перед выполнением запроса установить setForwardOnly(true) и потом выполнение запроса, потом at() что вернет.
В твоем случае setForwardOnly(true) больше подходит, тебе же не надо выполнять замысловатую навигацию по запросу, просто данные получить ?


Название: Re: не дополучаю содержимое запроса
Отправлено: crossly от Февраль 04, 2010, 15:04
Цитировать
надеюсь понятно??
не особо :(
Если я на первой строке стою, то для нее и вызывается data (у меня подробно раскрывается выбранная запись). Ну, не будет в распечатке первой записи, так у меня их штук несколько отсутствует.

а с чего это он должен вызываться когда ты на нем стоишь??


Название: Re: не дополучаю содержимое запроса
Отправлено: CroCIV от Февраль 04, 2010, 15:19
кароче так, при QSqlQuery qry=this->query();
qry уже имеет смещенный индекс активной записи, когда он был смещен и почему, это надо шерстить this
и на самом деле да, если this - это некоторый указатель на объект, имеющий собственную модель, то, как метко заметил crossly индекс активного элемента модели НЕ одно и тоже, что и индекс активной записи запроса, т.е. можно индекс модели this-a менять как угодно от этого индекс активной записи запроса не изменится, до покуда не будет выполнено непосредственное обращение к данным запроса
каламбур?


Название: Re: не дополучаю содержимое запроса
Отправлено: crossly от Февраль 04, 2010, 15:31
примерно то же что и у меня :).... короче.... когда ты ходишь по вьюхе ты по сути дела работаешь с itemselectionmodel... метод data модели вызывается при создании/обновлении модели... но никак не при выделении ....


Название: Re: не дополучаю содержимое запроса
Отправлено: mokynis от Февраль 05, 2010, 09:30
действительно, at() показывает, что перед применением next() я стою на 3-й строке. С 4-й как раз и выводится на печать. Ну и бес с ней-буду выбирать, как показал в самом начале. Спасибо за информацию