2014-02-10 44 views
0

失敗「大家好,SubmitAll()上QSqlRelationalTableModel

我有代表QSqlRelationalTableModel並鏈接到通過QDataWidgetMapper同型號小部件的tableview的形式。

這裏是表結構:

queryString = QString("CREATE TABLE t100000_Stations (" 
         "RecordID  INTEGER PRIMARY KEY AUTOINCREMENT," 
         "StationID TEXT UNIQUE, " 
         "ProjectID TEXT, " 
         "LocalName TEXT, " 
         "StationType TEXT REFERENCES t911000_StationTypes(StationType), " // We have to link station type to a table (maybe parameters) 
         "Easting  DOUBLE NOT NULL, " 
         "Northing  DOUBLE NOT NULL, " 
         "Latitude  DOUBLE, " 
         "Longitude DOUBLE, " 
         "LatLonDatum TEXT, " 
         "CoordinateSystem TEXT, " 
         "Elevation DOUBLE, " 
         "ElevationType INTEGER REFERENCES t908000_ParameterTypes(ParameterID), " // Same here 
         "ElevationDatum TEXT, " 
         "SurveyMethod TEXT, " 
         "Surveyor  TEXT, " 
         "SurveyDate DATETIME, " 
         "LandTenure TEXT, " 
         "Region  TEXT, " 
         "MiningLease TEXT, " 
         "Comments  TEXT," 
         "Source  TEXT NOT NULL, " 
         "SourceDate DATETIME NOT NULL, " 
         "EntryAuthor TEXT NOT NULL, " 
         "EntryDate DATETIME NOT NULL)" 
        ); 

的形式展示了記錄和完美的關係,包括組合框和表視圖代表們的關係領域。 我的問題是,表值中的任何編輯都不會傳回給數據庫。

經過多次嘗試後,我最終將setEditStrategy更改爲OnManualSubmit。 我加的形式析構submitAll()調用來更新數據庫,但它返回假,給我下面的錯誤消息:

「近」。」:語法錯誤無法執行語句」

我在某些頁面看到它可能與主鍵有關。我在調試模式下執行了以下命令:

QString tempString = tableModelStations->primaryKey().name(); 

但字符串是空的,這讓我相信問題的確在主鍵。

然後我創建了QSqlRelationalTableModel的子類,以便我可以實現setPrimaryKey()函數並手動執行,但沒有運氣。

任何人都可以揭示一些輕:

  1. 爲什麼submitAll()不工作

  2. 如何訪問)由submitAll(使用語句

謝謝事先,

問候

愛德華

回答

0
  1. 爲什麼submitAll()不工作 它不t work only in your way, it seems not so good making submit in destructor; 2.How to access the statement used by submitAll() you don噸需要這一點;

你應該嘗試:

  1. 不顯示主鍵在你看來,不允許更改它(這將發出上dublicate主鍵數據庫錯誤);
  2. 改變視圖使用SIGNAL dataChange(QModelIndex,QModelIndex)到ADRESS您SLOT在您使用submitAll之後;
  3. 論TableModel的使用插入行: yourModel->insertRow(yourModel->rowCount(QModelIndex()))
  4. 論RelationalTableModel插入行使用:

    QSqlRecord record; // prepare your record, not touching primary key, it's autoinc yourRelModel->insertRecord(yourRelModel->rowCount(QModelIndex()),record);

+0

嗨亞歷克斯,該感謝。這是我在SQL模型先走,現在我已經重寫了大部分,但最大的問題是,我的參考表沒有在當時的主鍵。一旦我改變了這一點,它就成爲一種魅力! – user3094309

+0

沒問題,做出好的應用程序。 – AlexBee

相關問題