i am using the Qt 4.6.2 and i can't update the databases,but after i inserted ,i can update the new row into the dabasese;
i have asked the question before,but nobody would liket to help me, i am confused by this question for a long time ,anyone can help me ?plz!
Qt Code:
  1. void WellDataManage::loadWellData(QString projectAddress)
  2. {
  3. QString address=projectAddress;
  4. address+="//";
  5. address+="Data";
  6. address+="//";
  7. address+="SystemData";
  8. address+=".db3";
  9.  
  10. if (!QFile::exists(address))
  11. {
  12. QMessageBox::information(this,tr("Information"),tr("There is something wrong with the wells databases"),QMessageBox::Ok,QMessageBox::Ok);
  13. }
  14.  
  15. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  16. db.setDatabaseName(address);
  17. db.open();
  18.  
  19.  
  20.  
  21.  
  22. welldatamodel = new QSqlTableModel;
  23.  
  24. welldatamodel->setEditStrategy(QSqlTableModel::OnManualSubmit);
  25. welldatamodel->setTable("wells");
  26. welldatamodel->setSort(0,Qt::AscendingOrder);
  27. welldatamodel->select();
  28.  
  29. //set Comobox model
  30.  
  31.  
  32. //wellTypeComoBox->setModel(welldatamodel);
  33. //wellTypeComoBox->setModelColumn(welldatamodel->fieldIndex("welltype"));
  34.  
  35. //set header name
  36. welldatamodel->setHeaderData(0,Qt::Horizontal,tr("Name"));
  37. welldatamodel->setHeaderData(1,Qt::Horizontal,tr("Group"));
  38. welldatamodel->setHeaderData(2,Qt::Horizontal,tr("X"));
  39. welldatamodel->setHeaderData(3,Qt::Horizontal,tr("Y"));
  40. welldatamodel->setHeaderData(4,Qt::Horizontal,tr("Type"));
  41. welldatamodel->setHeaderData(5,Qt::Horizontal,tr("Production"));
  42. welldatamodel->setHeaderData(6,Qt::Horizontal,tr("Depth"));
  43. welldatamodel->setHeaderData(7,Qt::Horizontal,tr("BeginDepth"));
  44. welldatamodel->setHeaderData(8,Qt::Horizontal,tr("EndDepth"));
  45. welldatamodel->setHeaderData(9,Qt::Horizontal,tr("Altitude"));
  46.  
  47.  
  48.  
  49. welldatamodel->removeColumn(0);
  50.  
  51. wellTableView->setModel(welldatamodel);
  52. wellTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  53. wellTableView->resizeRowsToContents();
  54.  
  55.  
  56. welldatamapper=new QDataWidgetMapper(this);
  57.  
  58. welldatamapper->setModel(welldatamodel);
  59. welldatamapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
  60. //welldatamapper->setItemDelegate(new QSqlRelationalDelegate(welldatamapper));
  61.  
  62.  
  63. welldatamapper->addMapping(wellNameEdit,0);
  64. welldatamapper->addMapping(wellGroupEdit,1);
  65. welldatamapper->addMapping(wellXPositionEdit,2);
  66. welldatamapper->addMapping(wellYPositionEdit,3);
  67. welldatamapper->addMapping(wellTypeComoBox,4);
  68. welldatamapper->addMapping(wellProductionEdit,5);
  69.  
  70. welldatamapper->addMapping(wellBeginDepthEdit,7);
  71. welldatamapper->addMapping(wellEndDepthEdit,8);
  72. welldatamapper->addMapping(wellAltitudeEdit,9);
  73.  
  74.  
  75.  
  76. //create connect of the buttons
  77. welldatamapper->toFirst();//初始化时选择选择第一行
  78. connect(wellTableView->selectionModel(),SIGNAL(currentRowChanged(QModelIndex, QModelIndex)),welldatamapper,SLOT(setCurrentModelIndex(QModelIndex) ));
  79. connect(welldatamapper,SIGNAL(currentIndexChanged(int)),wellTableView,SLOT(selectRow (int)));
  80.  
  81.  
  82.  
  83. connect(firstAction,SIGNAL(triggered()),welldatamapper,SLOT(toFirst()));
  84. connect(lastAction,SIGNAL(triggered()),welldatamapper,SLOT(toLast()));
  85. connect(previousAction,SIGNAL(triggered()),welldatamapper,SLOT(toPrevious()));
  86. connect(nextAction,SIGNAL(triggered()),welldatamapper,SLOT(toNext()));
  87. connect(newAction,SIGNAL(triggered()),this,SLOT(addWellRecord()));
  88. connect(deleteAction,SIGNAL(triggered()),this,SLOT(deleteWellRecord()));
  89. connect(updateAction,SIGNAL(triggered()),this,SLOT(updateWellRecord()));
  90.  
  91.  
  92. }
  93.  
  94. void WellDataManage::addWellRecord()
  95. {
  96.  
  97. int row=welldatamapper->currentIndex();
  98. if (row==-1)
  99. {
  100. row=0;
  101. }
  102. welldatamapper->submit();
  103. welldatamodel->insertRow(row);
  104. welldatamapper->setCurrentIndex(row);
  105.  
  106.  
  107. wellNameEdit->clear();
  108. wellGroupEdit->clear();
  109. wellXPositionEdit->clear();
  110. wellYPositionEdit->clear();
  111. wellBeginDepthEdit->clear();
  112. wellEndDepthEdit->clear();
  113. wellProductionEdit->clear();
  114. wellTypeComoBox->clear();
  115. wellNameEdit->setFocus();
  116. }
  117.  
  118.  
  119.  
  120.  
  121. void WellDataManage::deleteWellRecord()
  122. {
  123. int row=welldatamapper->currentIndex();
  124. welldatamodel->removeRow(row);
  125. welldatamapper->submit();
  126. welldatamodel->submit();
  127. welldatamodel->submitAll();
  128.  
  129. //welldatamapper->setCurrentIndex(QMIN(row,welldatamodel->rowCount()-1));
  130. }
  131.  
  132. void WellDataManage::updateWellRecord()
  133. {
  134. welldatamapper->submit();
  135. welldatamodel->submit();
  136. welldatamodel->submitAll();
  137.  
  138. }
To copy to clipboard, switch view to plain text mode