2015-11-02 13 views
9

ho sottoclasse QSqlQueryModel, chiamato UeOrdersModel, che estrae i dati dal database, sulla base seguente SQL dichiarazione:QSqlQuery :: :: valore all'interno QSqlQueryModel dati restituzione dei dati vuoti

SELECT ORDERS.USER_ID, 
     PEOPLE.NAME, 
     PLACE_ID, 
     PLACES.NAME, 
     PRODUCT_ID, 
     PRODUCTS.IMAGE, 
     PRODUCTS.NAME, 
     PRODUCTS.PRICESELL, 
     TAXES.RATE, 
     ORDERS.PRODUCT_QUANTITY 
FROM ORDERS 
JOIN PEOPLE 
ON ORDERS.USER_ID=PEOPLE.ID 
JOIN PRODUCTS 
ON ORDERS.PRODUCT_ID=PRODUCTS.ID 
JOIN PLACES 
ON ORDERS.PLACE_ID=PLACES.ID 
JOIN TAXCATEGORIES 
ON PRODUCTS.TAXCAT=TAXCATEGORIES.ID 
JOIN TAXES 
ON TAXCATEGORIES.ID=TAXES.ID 
WHERE ORDERS.USER_ID="15a2a62b-2a95-4d88-b0ad-d98001d730b4" 
    AND ORDERS.PLACE_ID="1"; 

e qui phpmyadmin uscita dalla mia database:

╔══════════════════════════════════════╦═══════════╦══════════╦════════╦══════════════════════════════════════╦═══════╦═══════════════════╦═══════════════╦═══════╦══════════════════╗ 
║    USER_ID    ║ NAME ║ PLACE_ID ║ NAME ║    PRODUCT_ID    ║ IMAGE ║  NAME  ║ PRICESELL ║ RATE ║ PRODUCT_QUANTITY ║ 
╠══════════════════════════════════════╬═══════════╬══════════╬════════╬══════════════════════════════════════╬═══════╬═══════════════════╬═══════════════╬═══════╬══════════════════╣ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ eda6eaa3-fb7d-4470-8890-9b05aaf97fb6 ║ NULL ║ Test product 1991 ║ 25   ║ 0  ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 8d307531-afe5-4746-a1f1-be5a743d453f ║ NULL ║ Test product 1761 ║ 1,8264840183 ║ 0,095 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 158e427c-11df-49b8-8d39-bfeff97c8f91 ║ NULL ║ Test product 1333 ║ 1,6393442623 ║ 0,22 ║    6 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 2890fc4f-2e59-4c34-b838-b43b0dceb145 ║ NULL ║ Test product 33 ║ 1,6393442623 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 3b12cb57-0ecd-48e6-9c78-8b1715a365d5 ║ NULL ║ Test product 34 ║ 1,6393442623 ║ 0,22 ║    2 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 3e72f6dc-baf5-4872-a42c-03b5a2748339 ║ NULL ║ Test product 75 ║ 12,2950819672 ║ 0,22 ║    3 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 5e02ff9c-dcb3-42b1-a04e-f3728d06af3b ║ NULL ║ Test product 20 ║ 1,6393442623 ║ 0,22 ║    12 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 67d44180-02c5-40b4-8c60-deebc99c1909 ║ NULL ║ Test product 19 ║ 2,868852459 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 6951109f-ae14-4691-b3b9-c64f11059780 ║ NULL ║ Test product 18 ║ 1,6393442623 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 7c007b66-2429-4e28-8bc0-8a15e595c606 ║ NULL ║ Test product 52 ║ 1,6393442623 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 7e43ff6a-80d9-4669-8600-a57f6ff030f7 ║ NULL ║ Test product 12 ║ 1,6393442623 ║ 0,22 ║    6 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ 9ab29108-b058-48a3-b012-4c6684470217 ║ NULL ║ Test product 13 ║ 2,7049180328 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ a549b305-6a34-4d3a-b53c-63a93a2dea4a ║ NULL ║ Test product 96 ║ 0,0819672131 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ ba9d3fd6-2ed6-4eba-8f4e-4b550074b469 ║ NULL ║ Test product 120 ║ 1,0655737705 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ c23d03eb-dcf9-4757-bdad-161226753492 ║ NULL ║ Test product 5 ║ 1,8852459016 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ c30ceddf-2d89-492b-a5c3-defbe4999dd2 ║ NULL ║ Test product 4 ║ 12,2950819672 ║ 0,22 ║    1 ║ 
║ 15a2a62b-2a95-4d88-b0ad-d98001d730b4 ║ Test User ║  1 ║ Miza 1 ║ e60ed145-5bbd-40e5-84f0-0ad8e63515d3 ║ NULL ║ Test product 12 ║ 1,0655737705 ║ 0,22 ║    1 ║ 
╚══════════════════════════════════════╩═══════════╩══════════╩════════╩══════════════════════════════════════╩═══════╩═══════════════════╩═══════════════╩═══════╩══════════════════╝ 

Come possiamo vedere, SQL affermazione in sé non è un problema, dal momento che eseguito senza errori. Tuttavia, quando il flusso del programma immette il metodo QSqlQueryModel::data() suddiviso in sottoclassi, tutto ciò che ottengo sono stringhe vuote per ogni ruolo dannato. Ho una connessione al database triplecolata, la connessione è ok, la query viene eseguita senza problemi e ho più maledizione. Qualcuno può darmi qualche suggerimento? Ecco UeOrdersModel intestazione:

#ifndef UEORDERSMODEL_H 
#define UEORDERSMODEL_H 

#include <QObject> 
#include <QSqlQueryModel> 
#include <QQuickImageProvider> 
#include <QObject> 
#include <QSqlRecord> 
#include <QSqlQuery> 
#include <QList> 
#include <QDebug> 
#include <QSqlError> 
#include <QSqlField> 

#include "../settings/uedefaults.h" 
#include "../core/uedatabaseconnectionstatus.h" 
#include "../core/uetypes.h" 
#include "../database/ueuserrecord.h" 

class UeOrdersModel : public QSqlQueryModel, 
         public QQuickImageProvider 
{ 
    Q_OBJECT 

    friend class UeApplicationStatus; 

private: 
    QString m_ueUserId; 
    QString m_uePlaceId; 
    QString m_ueUserName; 
    QString m_uePlaceName; 
    QSqlDatabase m_ueDb; 

    QSqlDatabase ueDatabase() const 
     { return this->m_ueDb; } 
    void ueSetDatabase(const QSqlDatabase& database) 
     { this->m_ueDb=database; } 

    void queryChange(); 

public: 
    explicit UeOrdersModel(QObject *parent = 0, 
          const QString& userId="", 
          const QString& placeId="", 
          const QString &userName="", 
          const QString &placeName=""); 
    ~UeOrdersModel(); 

    inline QString ueUserId() const 
     { return this->m_ueUserId; } 
    inline QString uePlaceId() const 
     { return this->m_uePlaceId; } 
    inline QString ueUserName() const 
     { return this->m_ueUserName; } 
    inline QString uePlaceName() const 
     { return this->m_uePlaceName; } 

    inline void ueSetUserId(const QString& userId) 
     { this->m_ueUserId=userId; } 
    inline void ueSetPlaceId(const QString& placeId) 
     { this->m_uePlaceId=placeId; } 
    inline void ueSetUserName(const QString& userName) 
     { this->m_ueUserName=userName; } 
    inline void ueSetPlaceName(const QString& placeName) 
     { this->m_uePlaceName=placeName; } 

    QVariant data(const QModelIndex &index, 
        int role=Qt::DisplayRole) const Q_DECL_OVERRIDE; 
    QImage requestImage(const QString &id, 
         QSize *size, 
         const QSize &requestedSize); 
    UeTypeRoles roleNames() const; 
    int rowCount(const QModelIndex &parent) const; 
    int columnCount(const QModelIndex &parent) const; 
    Q_INVOKABLE QVariantMap get(int row); 
    void ueConnectToDatabase(const QString& userId, 
          const QString& placeId); 
    Q_INVOKABLE bool ueAddOrder(const QString& userId, 
             const QString& placeId, 
             const QString& productId, 
             const QString& quantity); 

public: 
    static const int ueRoleUserId=Qt::UserRole+1; 
    static const int ueRoleUserName=Qt::UserRole+2; 
    static const int ueRolePlaceId=Qt::UserRole+3; 
    static const int ueRolePlaceName=Qt::UserRole+4; 
    static const int ueRoleProductId=Qt::UserRole+5; 
    static const int ueRoleProductImage=Qt::UserRole+6; 
    static const int ueRoleProductName=Qt::UserRole+7; 
    static const int ueRoleProductPriceSell=Qt::UserRole+8; 
    static const int ueRoleProductVatRate=Qt::UserRole+9; 
    static const int ueRoleProductQuantity=Qt::UserRole+10; 
    static const int ueRoleOrderAmountWithoutVAT=Qt::UserRole+11; 
    static const int ueRoleOrderAmountWithVAT=Qt::UserRole+12; 

signals: 
    void ueSignalDatabaseConnectionChanged(const UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus& newStatus); 

public slots: 
    Q_INVOKABLE void ueSlotRefreshOrdersData(const QString& userId, 
              const QString& placeId); 
}; 

#endif // UEORDERSMODEL_H 

e la sua attuazione:

#include "ueordersmodel.h" 

UeOrdersModel::UeOrdersModel(QObject *parent, 
          const QString& userId, 
          const QString& placeId, 
          const QString& userName, 
          const QString& placeName) 
    : QSqlQueryModel(parent), 
     QQuickImageProvider(QQmlImageProviderBase::Image, 
          QQmlImageProviderBase::ForceAsynchronousImageLoading) 
{ 
    this->ueSetUserId(userId); 
    this->ueSetPlaceId(placeId); 
    this->ueSetUserName(userName); 
    this->ueSetPlaceName(placeName); 
} // constructor 

UeOrdersModel::~UeOrdersModel() 
{ 
} // destructor 

QVariant UeOrdersModel::data(const QModelIndex &index, 
          int role) const 
{ 
    qDebug() << "(UeOrdersModel::data) this->query().lastQuery(): " << this->query().lastQuery() 
      << "\n" 
      << "(UeOrdersModel::data) this->query().executedQuery(): " << this->query().executedQuery() 
      << "\n" 
      << "(UeOrdersModel::data) this->query().isValid(): " << this->query().isValid(); 

    bool result=false; 

    if(!this->query().isValid()) 
    { 
     if(this->query().isActive()) 
      if(this->query().isSelect()) 
        result=this->query().first(); 
    } 

    if(index.isValid()&&index.row()>=0&&index.column()>=0&&this->record().isEmpty()==false&&this->query().isValid()) 
    { 
     switch(role) 
     { 
      case ueRoleUserId: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_USERID).toString(); 
      } break; 

      case ueRoleUserName: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_USERNAME).toString(); 
      } break; 

      case ueRolePlaceId: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PLACEID).toString(); 
      } break; 

      case ueRolePlaceName: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PLACENAME).toString(); 
      } break; 

      case ueRoleProductId: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCTID).toString(); 
      } break; 

      case ueRoleProductImage: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCTIMAGE).toString(); 
      } break; 

      case ueRoleProductName: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCTNAME).toString(); 
      } break; 

      case ueRoleProductPriceSell: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble()); 
      } break; 

      case ueRoleProductVatRate: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_VATRATE).toDouble()); 
      } break; 

      case ueRoleProductQuantity: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_QUANTITY).toUInt()); 
      } break; 

      case ueRoleOrderAmountWithoutVAT: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_QUANTITY).toUInt()* 
             this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble()); 
      } break; 

      case ueRoleOrderAmountWithVAT: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_QUANTITY).toUInt()* 
             (this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble()+ 
             (this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble()* 
             this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_VATRATE).toDouble()))); 
      } break; 

      default: 
      { 
       return QVariant(); 
      } break; // default 
     } // switch 
    } // if 

    return QVariant(); 
} // data 

QImage UeOrdersModel::requestImage(const QString &id, 
            QSize *size, 
            const QSize &requestedSize) 
{ 
    Q_UNUSED(size) 
    Q_UNUSED(requestedSize); 

    QImage image=QImage::fromData(this->record(id.toInt()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCTIMAGE).toByteArray(), 
            "PNG"); 
    if(image.isNull()) 
    { 
     image=QImage(":/ueIcons/icons/ueGenericProduct.png"); 
    } 

    return image.scaled(UeDefaults::UeGraphics::UeProductImageSize::IMAGE_WIDTH, 
         UeDefaults::UeGraphics::UeProductImageSize::IMAGE_HEIGHT, 
         Qt::IgnoreAspectRatio, 
         Qt::SmoothTransformation);; 
} // requestImage 

UeTypeRoles UeOrdersModel::roleNames() const 
{ 
    UeTypeRoles roles; 

    const int iRoleUserId=UeOrdersModel::ueRoleUserId; 
    const int iRoleUserName=UeOrdersModel::ueRoleUserName; 
    const int iRolePlaceId=UeOrdersModel::ueRolePlaceId; 
    const int iRolePlaceName=UeOrdersModel::ueRolePlaceName; 
    const int iRoleProductId=UeOrdersModel::ueRoleProductId; 
    const int iRoleProductImage=UeOrdersModel::ueRoleProductImage; 
    const int iRoleProductName=UeOrdersModel::ueRoleProductName; 
    const int iRoleProductPriceSell=UeOrdersModel::ueRoleProductPriceSell; 
    const int iRoleProductVatRate=UeOrdersModel::ueRoleProductVatRate; 
    const int iRoleProductQuantity=UeOrdersModel::ueRoleProductQuantity; 
    const int iRoleOrderAmountWithoutVAT=UeOrdersModel::ueRoleOrderAmountWithoutVAT; 
    const int iRoleOrderAmountWithVAT=UeOrdersModel::ueRoleOrderAmountWithVAT; 

    roles.insert(iRoleUserId, 
       "ueRoleUserId"); 
    roles.insert(iRoleUserName, 
       "ueRoleUserName"); 

    roles.insert(iRolePlaceId, 
       "ueRolePlaceId"); 
    roles.insert(iRolePlaceName, 
       "ueRolePlaceName"); 

    roles.insert(iRoleProductId, 
       "ueRoleProductId"); 
    roles.insert(iRoleProductImage, 
       "ueRoleProductImage"); 
    roles.insert(iRoleProductName, 
       "ueRoleProductName"); 
    roles.insert(iRoleProductPriceSell, 
       "ueRoleProductPriceSell"); 
    roles.insert(iRoleProductVatRate, 
       "ueRoleProductVatRate"); 
    roles.insert(iRoleProductQuantity, 
       "ueRoleProductQuantity"); 

    roles.insert(iRoleOrderAmountWithoutVAT, 
       "ueRoleOrderAmountWithoutVAT"); 
    roles.insert(iRoleOrderAmountWithVAT, 
       "ueRoleOrderAmountWithVAT"); 

    return roles; 
} // roleNames 

int UeOrdersModel::columnCount(const QModelIndex &parent) const 
{ 
    Q_UNUSED(parent); 

// qDebug() << "UeOrdersModel::columnCount: " << this->record().count(); 

    return this->record().count(); 
} 

int UeOrdersModel::rowCount(const QModelIndex &parent) const 
{ 
    Q_UNUSED(parent); 

// qDebug() << "UeOrdersModel::rowCount: " << this->query().size(); 

    return this->query().size(); 
} // rowCount 

QVariantMap UeOrdersModel::get(int row) 
{ 
    QHash<int,QByteArray> names=this->roleNames(); 
    QHashIterator<int, QByteArray> i(names); 
    QVariantMap res; 

    while (i.hasNext()) 
    { 
     i.next(); 
     QModelIndex idx=this->index(row, 
            0); 
     QVariant data=idx.data(i.key()); 
     res[i.value()]=data; 
    } // while 

    return res; 
} // get 

void UeOrdersModel::ueConnectToDatabase(const QString& userId, 
             const QString& placeId) 
{ 
    if(!QSqlDatabase::connectionNames().contains(UePosDatabase::UeDatabaseConnectionNames::DATABASE_CONNECTION_NAME_ORDERS, 
               Qt::CaseInsensitive)) 
    { 
     this->ueSetDatabase(QSqlDatabase::addDatabase(UePosDatabase::DATABASE_DRIVER, 
                 UePosDatabase::UeDatabaseConnectionNames::DATABASE_CONNECTION_NAME_ORDERS)); 
    } // if 

    this->ueDatabase().setHostName(UePosDatabase::UeDatabaseConnectionParameters::DATABASE_HOSTNAME); 
    this->ueDatabase().setDatabaseName(UePosDatabase::UeDatabaseConnectionParameters::DATABASE_NAME); 
    this->ueDatabase().setUserName(UePosDatabase::UeDatabaseConnectionParameters::DATABASE_USERNAME); 
    this->ueDatabase().setPassword(UePosDatabase::UeDatabaseConnectionParameters::DATABASE_PASSWORD); 

    if(this->ueDatabase().open()) 
    { 
     this->setQuery(UePosDatabase::UeSqlQueries::UeTableOrders::SQL_QUERY_GET_ORDERS_FILTERED_BY_USERID_PLACEID.arg(userId) 
                                .arg(placeId), 
         this->ueDatabase()); 
     if(this->lastError().isValid()) 
     { 
      emit this->ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::NOT_CONNECTED); 

      qDebug() << this->lastError().text(); 
     } 
     else 
     { 
      emit this->ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::CONNECTED); 
     } // if 
    } 
    else 
    { 
     emit this->ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::NOT_CONNECTED); 
    } // if 
} // ueConnectToDatabase 

bool UeOrdersModel::ueAddOrder(const QString& userId, 
           const QString& placeId, 
           const QString& productId, 
           const QString& quantity) 
{ 
    QSqlQuery queryInsertOrder(this->ueDatabase()); 
    bool result=false; 

    queryInsertOrder.prepare(UePosDatabase::UeSqlQueries::UeTableOrders::SQL_QUERY_INSERT_NEW_RECORD); 
    queryInsertOrder.addBindValue(userId); 
    queryInsertOrder.addBindValue(placeId); 
    queryInsertOrder.addBindValue(productId); 
    queryInsertOrder.addBindValue(quantity.toUInt()); 

    if(queryInsertOrder.exec()) 
    { 
     result=true; 
    } 
    else 
    { 
     if(queryInsertOrder.lastError().nativeErrorCode().compare(UePosDatabase::UeMySQLErrors::SQL_ERROR_RECORD_ALREADY_EXISTS)==0) 
     { 
      QSqlQuery queryIncreaseProductQuantity(this->ueDatabase()); 

      queryIncreaseProductQuantity.prepare(UePosDatabase::UeSqlQueries::UeTableOrders::SQL_QUERY_INCREASE_PRODUCT_QUANTITY.arg(userId) 
                                   .arg(placeId) 
                                   .arg(productId)); 
      if(queryIncreaseProductQuantity.exec()) 
      { 
       result=true; 
      } 
      else 
      { 
       result=false; 
      } // if 
     } // if 
    } // if 

    if(result==true) 
    { 
     this->setQuery(UePosDatabase::UeSqlQueries::UeTableOrders::SQL_QUERY_GET_ORDERS_FILTERED_BY_USERID_PLACEID.arg(userId) 
                                .arg(placeId), 
         this->ueDatabase()); 

     if(this->lastError().isValid()) 
     { 
      qDebug() << this->lastError().text(); 
     } // if 
    } // if 

    return result; 
} // ueAddOrder 

void UeOrdersModel::ueSlotRefreshOrdersData(const QString& userId, 
              const QString& placeId) 
{ 
    this->ueSetUserId(userId); 
    this->ueSetPlaceId(placeId); 
    if(this->ueDatabase().isOpen()) 
    { 
     this->setQuery(UePosDatabase::UeSqlQueries::UeTableOrders::SQL_QUERY_GET_ORDERS_FILTERED_BY_USERID_PLACEID.arg(userId) 
                                .arg(placeId), 
         this->ueDatabase()); 
    } 
    else 
    { 
     this->ueConnectToDatabase(userId, 
            placeId); 
    } // if 

    bool result=this->query().first(); 

    int i=0; 
} // ueSlotRefreshOrdersData 

void UeOrdersModel::queryChange() 
{ 
    qDebug() << "UeOrdersModel::queryChange(): " << this->query().lastQuery(); 
} // queryChange 

Il UeOrdersModel viene creata un'istanza in main.cpp, si connette al database (come ho detto, 3x controllata):

UeOrdersModel* ueOrdersModel=new UeOrdersModel(qApp); 

Ho diversi modelli molto simili all'interno di questa app, tutti funzionano perfetto, questo no.

+0

Prova ritorno QSqlQueryModel :: dati (voce, ruolo); per il valore predefinito nel metodo dati. Inoltre, non ho usato qsqlquerymodel, ma mi chiedo se la definizione dei ruoli sia il modo standard per recuperare le colonne. –

+0

@johnelemans Ho definito ruoli in altri modelli che utilizzo e funzionano bene. Ho aggiunto 'QSqlQueryModel :: data (item, role);' nel metodo 'data()' in 'default:' parte della clausola 'switch', funziona ora! Puoi aggiornare il tuo suggerimento in risposta? – KernelPanic

+0

sì, si prega di aggiornare! –

risposta

3

Ho definito ruoli in altri modelli che utilizzo e funzionano bene. Ho aggiunto QSqlQueryModel::data(item, role); nel metodo data() nella sezione default: della clausola switch, ora funziona. Ecco codice finale:

QVariant UeOrdersModel::data(const QModelIndex &index, 
          int role) const 
{ 
    if(!this->query().isValid()) 
    { 
     if(this->query().isActive()) 
      if(this->query().isSelect()) 
        this->query().first(); 
    } 

    if(index.isValid()&&index.row()>=0&&index.column()>=0&&this->record().isEmpty()==false&&this->query().isValid()) 
    { 
     switch(role) 
     { 
      case ueRoleUserId: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_USERID).toString(); 
      } break; 

      case ueRoleUserName: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_USERNAME).toString(); 
      } break; 

      case ueRolePlaceId: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PLACEID).toString(); 
      } break; 

      case ueRolePlaceName: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PLACENAME).toString(); 
      } break; 

      case ueRoleProductId: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCTID).toString(); 
      } break; 

      case ueRoleProductImage: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCTIMAGE).toString(); 
      } break; 

      case ueRoleProductName: 
      { 
       return this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCTNAME).toString(); 
      } break; 

      case ueRoleProductPriceSell: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble(), 
             'f', 
             2); 
      } break; 

      case ueRoleProductVatRate: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_VATRATE).toDouble()*100, 
             'f', 
             2).append("%"); 
      } break; 

      case ueRoleProductQuantity: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_QUANTITY).toUInt()); 
      } break; 

      case ueRoleOrderAmountWithoutVAT: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_QUANTITY).toUInt()* 
             this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble(), 
             'f', 
             2); 
      } break; 

      case ueRoleOrderAmountWithVAT: 
      { 
       return QString::number(this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_QUANTITY).toUInt()* 
             (this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble()+ 
             (this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_PRICESELL).toDouble()* 
             this->record(index.row()).value(UePosDatabase::UeQueryIndexes::QUERY_GET_ORDERS_FILTERED_BY_USERNAME_PLACENAME::INDEX_PRODUCT_VATRATE).toDouble())), 
             'f', 
             2); 
      } break; 

      default: 
      { 
       return QSqlQueryModel::data(index, 
              role); 
      } break; // default 
     } // switch 
    } // if 

    return QVariant(); 
} // data 
Problemi correlati