2012-08-28 2 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 ation (...) "트랜잭션, 추가, 삭제, 커밋 또는 롤백은 모두 잘 작동합니다. 아무것도 주석 처리를 없애고 모든 것을 올바르게 표시하면 (ID가 카테고리 이름으로 바뀜) "insertRecord"를 사용하여 새 행을 삽입 할 수 없습니다. 시도했지만 성공하지 못했습니다. this 제안.

의견이 있으십니까?

답변

3

문제가 열 이름에있었습니다. setRelation 열 이름이 category_of_customer_id에서 category_of_customers_name_2으로 변경됩니다.

void setValue(const QString & name, const QVariant &val) 대신 void setValue(int index, 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+ 이상의 평판을 얻지는 못했습니다.

관련 문제