[Qt-interest] HOW to make 'void QSqlTableModel::setFilter ( const QString & filter )' work

Me dooit.lee at gmail.com
Wed Jun 8 10:23:13 CEST 2011


Thank you. I solved my problem. It's ambiguity of column name in more than
one relation.
HERE's the link: http://developer.qt.nokia.com/forums/viewthread/2261
And my code updates to, which is what I want
===================================================================
void BankAccountMS::on_fromCardIdEdit_textChanged(const QString &text)
{
    if (!NDEBUG) {
        cerr << "on_fromCardIdEdit_textChanged()\n";
        cerr << "text.size(): " << text.size() << endl;
        cerr << "text: " << text.toStdString() << endl;
    }

    QString filter;

    if (userId != ROOT_ID && userId != INVALID_ID) {
        filter += QString("card.id = %1 ").arg(userId);
        if (text.size() != 0)
            filter += "AND ";
    }

    if (text.size() != 0) {
        filter += "card.id REGEXP '" + text + "'";
    }

    cardModel->setFilter(filter);
    cardModel->select();

    if  (!NDEBUG) {
    //    cerr << "filter: " << filter.toStdString() << endl;
        cerr << "filter():"
             << cardModel->filter().toStdString() << endl;
        cerr << "cardModel->query().lastQuery(): "
             << cardModel->query().lastQuery().toStdString() << endl;
    }
}

On Wed, Jun 8, 2011 at 1:19 AM, Me <dooit.lee at gmail.com> wrote:

> I really don't want to post this, but it seems there is still no solution
> on using QSqlTableModel::setFilter(const QString&) to get expected result. I
> have been google and search on qt-interest mailing list, but I still found
> nothing helpful on how to use QSqlTableModel::setFilter(const QString&) to
> get expected result such as 'SELECT * FROM card WHERE id = 2'. When
> setFilter(QString("id = %1").arg(userId)) (ps: where userId is 2)) and I
> selected, cardModel::rowCount() (which is QSqlRelationalTableModel) returns
> 0 and cardView (which is QTableView) display nothing.
>
> I have read the docs (Qt4.7) and I know how to use
> QSqlTableModel::setFilter(cosnt QString&), but the law of attraction seems
> not work. Does anyone get some idea what I should do?
>
> HERE I have a subroutine about QSqlTableModel::setFilter(const QString&)
> ========================================================
> void BankAccountMS::on_fromCardIdEdit_textChanged(const QString &text)
> {
>         if (!NDEBUG) {
>                 cerr << "on_fromCardIdEdit_textChanged()\n";
>                 cerr << "text.size(): " << text.size() << endl;
>                 cerr << "text: " << text.toStdString() << endl;
>         }
>
>         QString filter;
>
>         if (userId != ROOT_ID && userId != INVALID_ID) {
>                 filter += QString("id = %1 ").arg(userId);
>                 if (text.size() != 0)
>                         filter += "AND ";
>         }
>
>         if (text.size() != 0) {
>                 filter += "id REGEXP '" + text + "'";
>         }
>
>         cardModel->setFilter(filter);
>         cardModel->select();
>
>         if  (!NDEBUG) {
>                 cerr << "filter: " << filter.toStdString() << endl;
>                 cerr << "filter():"
>                      << cardModel->filter().toStdString() << endl;
>         //      cerr << "cardModel->selectStatement(): "
>         //           << (cardModel->selectStatement()).toStdString() <<
> endl;
>         }
> }
> =====================================================================
>
> --
> Victory Loves Preparation.
> Me: http://about.me/dooit
>



-- 
Victory Loves Preparation.
Me: http://about.me/dooit
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20110608/71617bac/attachment.html 


More information about the Qt-interest-old mailing list