2012-08-28 24 views
2

editlistofcustomers.hQSqlRelationalTableModel insertRecord不一样,如果工作呼叫setRelation

QSqlRelationalTableModel *RelationalModel; 
TreeModel *CategoriesModel; 
QSqlRecord Record; 

editlistofcustomers.cpp EditListOfCustomers :: EditListOfCustomers //构造

RelationalModel = new QSqlRelationalTableModel(this, *SupportObj->GetDataBase()); 
RelationalModel->setTable(SupportObj->GetCustomersTableName()); 
RelationalModel->setEditStrategy(QSqlTableModel::OnManualSubmit); 
RelationalModel->select(); 
RelationalModel->setHeaderData(1, Qt::Horizontal, QObject::tr("Название/имя покупателя")); 
Record = RelationalModel->record(); 
RelationalModel->setRelation(2, QSqlRelation(SupportObj->GetCategoriesOfCustomersTableName(), 
         SupportObj->GetCategoriesOfCustomersPattern()[0].GetName(), // ID. 
         SupportObj->GetCategoriesOfCustomersPattern()[2].GetName())); // Name. 
CategoriesModel = new TreeModel(QObject::tr("Категории"), 
       SupportObj->GetCategoriesOfCustomersTableName(), 
       SupportObj, this); 


//Setup model view delegate. 
ui->TV_ListOfCustomers->setModel(RelationalModel); 
ui->TV_ListOfCustomers->setItemDelegate(new QSqlRelationalDelegate(ui->TV_ListOfCustomers)); 
ui->TV_ListOfCustomers->setSelectionBehavior(QAbstractItemView::SelectRows); 
ui->TV_ListOfCustomers->setSortingEnabled(true); 

ui->TV_CategoryOfCustomer->setModel(CategoriesModel); 
SupportObj->GetDataBase()->transaction() 

EditListOfCustomers :: AddCustomer

QString customerName = ui->LE_CustomerName->text(); 
if(!customerName.isEmpty()) 
{ 
    Record.setValue(SupportObj->GetCustomersPattern()[1].GetName(), QVariant(customerName)); // Name. 
    int categoryID = CategoriesModel->GetItemID(ui->TV_CategoryOfCustomer->currentIndex()); 
    Record.setValue(SupportObj->GetCustomersPattern()[2].GetName(), QVariant(categoryID)); // Category ID. 
    Record.setValue(SupportObj->GetCustomersPattern()[3].GetName(), QVariant(ui->LE_CustomerTelephoneNumbers->text())); // Telephone numbers. 
    Record.setValue(SupportObj->GetCustomersPattern()[4].GetName(), QVariant(ui->LE_CustomerAddress->text())); // Address. 
    Record.setValue(SupportObj->GetCustomersPattern()[5].GetName(), QVariant(ui->TE_CustomerComment->toPlainText())); // Comment. 
    RelationalModel->insertRecord(-1, Record); 
    if(!RelationalModel->submitAll()) 
    { 
     QMessageBox::warning(this, "CategoriesEditor::CategoriesEditor", SupportObj->GetDataBase()->lastError().text()); 
    } 

    // Clear fields 
    ui->LE_CustomerName->clear(); 
    ui->TV_CategoryOfCustomer->setCurrentIndex(QModelIndex()); 
    ui->LE_CustomerTelephoneNumbers->clear(); 
    ui->LE_CustomerAddress->clear(); 
    ui->TE_CustomerComment->clear(); 

    ui->LE_CustomerName->setFocus(); 
    ui->TV_ListOfCustomers->sortByColumn(0, Qt::AscendingOrder); 
} 

如果评论“RelationalModel-> setRel (...)“一切工作正常:事务,添加,删除,提交或回滚。如果取消注释没有任何工作,但显示一切正确(ID由类别名称替换),但我不能使用“insertRecord”插入新行。我尝试this 建议,但未成功。

有什么建议吗?

回答

3

问题在于列名。 setRelation将列名category_of_customer_id更改为category_of_customers_name_2

该解决方案使用void setValue(int index, const QVariant &val)而不是void setValue(const QString & name, const QVariant &val)

QSqlRecord record = RelationalModel->record(); 
record.setValue(1, QVariant(customerName)); // Name. 
int categoryID = CategoriesModel->GetItemID(ui->TV_CategoryOfCustomer->currentIndex()); 
record.setValue(2, QVariant(categoryID)); // Category ID. 
record.setValue(3, QVariant(ui->LE_CustomerTelephoneNumbers->text())); // Telephone numbers. 
record.setValue(4, QVariant(ui->LE_CustomerAddress->text())); // Address. 
record.setValue(5, QVariant(ui->TE_CustomerComment->toPlainText())); // Comment. 
RelationalModel->insertRecord(-1, record); 
if(!RelationalModel->submitAll()) 
{ 
    QMessageBox::warning(this, "CategoriesEditor::CategoriesEditor", SupportObj->GetDataBase()->lastError().text()); 
} 
2

有同样的问题。这只需要发生在具有setRelation的字段中。这里是PyQt的解决方案:

def insertRow(self):  
    rec = self.record() 
    rec.setValue("id", "new id") 
    rec.setValue("type", 1) 
    rec.setValue("title", "new title") 
    return self.insertRecord(-1, rec) 
    self.submit() 

道歉。想要评论,但还没有50+的声望。