Results 1 to 8 of 8

Thread: still some problems on update databases using QDataWidgetMapper

  1. #1
    Join Date
    May 2010
    Location
    China
    Posts
    66
    Thanks
    8
    Qt products
    Qt4
    Platforms
    Windows

    Default still some problems on update databases using QDataWidgetMapper

    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 

  2. #2
    Join Date
    May 2010
    Location
    China
    Posts
    66
    Thanks
    8
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: still some problems on update databases using QDataWidgetMapper

    someone help me ,plz

  3. #3
    Join Date
    Jun 2010
    Location
    Salatiga, Indonesia
    Posts
    160
    Thanks
    11
    Thanked 32 Times in 29 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Wiki edits
    1

    Default Re: still some problems on update databases using QDataWidgetMapper

    can you show your database structure?

  4. #4
    Join Date
    May 2010
    Location
    China
    Posts
    66
    Thanks
    8
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: still some problems on update databases using QDataWidgetMapper

    the sql script of create databases like this:
    Qt Code:
    1. CREATE TABLE [wells] ([id] INTEGER PRIMARY KEY,[wellnames] NVARCHAR, [wellgroup] NVARCHAR,[XPosition] DOUBLE, [YPosition] DOUBLE,[welltype] CHAR, [production(m3)] DOUBLE,[depth] DOUBLE, [beginDetpth] DOUBLE, [endDepth] CHAR,[altitude] DOUBLE);
    To copy to clipboard, switch view to plain text mode 

  5. #5
    Join Date
    Jun 2010
    Location
    Salatiga, Indonesia
    Posts
    160
    Thanks
    11
    Thanked 32 Times in 29 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Wiki edits
    1

    Default Re: still some problems on update databases using QDataWidgetMapper

    In your void WellManage::loadWellData(QString projectAddress) function, why do you remove the first column?
    Qt Code:
    1. welldatamodel->removeColumn(0);
    To copy to clipboard, switch view to plain text mode 

    Then, how do you set the first column data?

  6. #6
    Join Date
    May 2010
    Location
    China
    Posts
    66
    Thanks
    8
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: still some problems on update databases using QDataWidgetMapper

    because i don't want to show this colum to the user,

  7. #7
    Join Date
    May 2010
    Location
    China
    Posts
    66
    Thanks
    8
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: still some problems on update databases using QDataWidgetMapper

    anyone can help me ? i have confessed by this proble for one month!

  8. #8
    Join Date
    Jun 2010
    Location
    Salatiga, Indonesia
    Posts
    160
    Thanks
    11
    Thanked 32 Times in 29 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Wiki edits
    1

    Default Re: still some problems on update databases using QDataWidgetMapper

    If you want to hide a specific column, use
    Qt Code:
    1. tableView->setColumnHidden(column_num, true);
    To copy to clipboard, switch view to plain text mode 
    .

    When i remove the first column using
    Qt Code:
    1. model->removeColumn(0);
    To copy to clipboard, switch view to plain text mode 
    ,
    i can't update or delete the record and this error occurs
    Qt Code:
    1. QSqlQuery::value: not positioned on a valid record
    To copy to clipboard, switch view to plain text mode 
    .

Similar Threads

  1. Switching between two databases
    By codeman in forum Qt Programming
    Replies: 20
    Last Post: 13th May 2009, 14:33
  2. Qt and databases
    By gt.beta2 in forum Newbie
    Replies: 6
    Last Post: 18th February 2009, 08:39
  3. dictionary databases
    By rishiraj in forum Newbie
    Replies: 1
    Last Post: 5th January 2009, 08:30
  4. Problems with QSqlQuery update
    By whoops.slo in forum Qt Programming
    Replies: 4
    Last Post: 28th August 2006, 07:17
  5. Qt, Databases & the DAO Pattern
    By Paul Drummond in forum Qt Programming
    Replies: 1
    Last Post: 22nd February 2006, 16:13

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.