freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

qt數(shù)據(jù)庫操作-資料下載頁

2025-08-04 22:50本頁面
  

【正文】 。 .arg(modellastError().text()))。 }} 這里用到了事務(wù)操作,真正起提交操作的是modelsubmitAll()一句,它提交所有更改。“撤銷修改”按鈕單擊事件槽函數(shù),并更改如下:void Widget::on_pushButton_2_clicked() //撤銷修改{ modelrevertAll()。}它只有簡單的一行代碼。:include QMessageBoxinclude QSqlError此時(shí)運(yùn)行程序,效果如下:我們將“陳剛”改為“李強(qiáng)”,如果我們點(diǎn)擊“撤銷修改”,那么它就會重新改為“陳剛”,而當(dāng)我們點(diǎn)擊“提交修改”后它就會保存到數(shù)據(jù)庫,此時(shí)再點(diǎn)擊“撤銷修改”就修改不回來了。可以看到,這個(gè)模型可以將所有修改先保存到model中,只有當(dāng)我們執(zhí)行提交修改后,才會真正寫入數(shù)據(jù)庫。當(dāng)然這也是因?yàn)槲覀冊谧铋_始設(shè)置了它的保存策略:modelsetEditStrategy(QSqlTableModel::OnManualSubmit)。OnManualSubmit表明我們要提交修改才能使其生效。第二,查詢操作。“查詢”按鈕的單擊事件槽函數(shù),更改如下:void Widget::on_pushButton_7_clicked() //查詢{ QString name = uilineEdittext()。 modelsetFilter(QObject::tr(name = 39。%139。).arg(name))。 //根據(jù)姓名進(jìn)行篩選 modelselect()。 //顯示結(jié)果}我們使用setFilter()函數(shù)進(jìn)行關(guān)鍵字篩選,這個(gè)函數(shù)是對整個(gè)結(jié)果集進(jìn)行查詢。為了使用變量,我們使用了QObject類的tr()函數(shù)?!胺祷厝怼卑粹o的單擊事件槽函數(shù),更改如下:void Widget::on_pushButton_8_clicked() //返回全表{ modelsetTable(student)。 //重新關(guān)聯(lián)表 modelselect()。 //這樣才能再次顯示整個(gè)表的內(nèi)容}為了再次顯示整個(gè)表的內(nèi)容,我們需要再次關(guān)聯(lián)這個(gè)表。運(yùn)行效果如下:我們輸入一個(gè)姓名,點(diǎn)擊“查詢”按鈕后,就可以顯示該記錄了。再點(diǎn)擊“返回全表”按鈕則返回。第三,排序操作。我們分別進(jìn)入“按id升序排列”和“按id降序排列”按鈕的單擊事件槽函數(shù),更改如下:void Widget::on_pushButton_5_clicked() //升序{ modelsetSort(0,Qt::AscendingOrder)。 //id屬性,即第0列,升序排列 modelselect()。}void Widget::on_pushButton_6_clicked() //降序{ modelsetSort(0,Qt::DescendingOrder)。 modelselect()。}我們這里使用了setSort()函數(shù)進(jìn)行排序,它有兩個(gè)參數(shù),第一個(gè)參數(shù)表示按第幾個(gè)屬性排序,表頭從左向右,最左邊是第0個(gè)屬性,這里就是id屬性。第二個(gè)參數(shù)是排序方法,有升序和降序兩種。運(yùn)行程序,效果如下:這是按下“按id降序排列”按鈕后的效果。第四,刪除操作。我們進(jìn)入“刪除選中行”按鈕單擊事件槽函數(shù),進(jìn)行如下更改:void Widget::on_pushButton_4_clicked() //刪除當(dāng)前行{ int curRow = uitableViewcurrentIndex().row()。 //獲取選中的行 modelremoveRow(curRow)。 //刪除該行 int ok = QMessageBox::warning(this,tr(刪除當(dāng)前行!),tr(你確定 刪除當(dāng)前行嗎?), QMessageBox::Yes,QMessageBox::No)。 if(ok == QMessageBox::No) { modelrevertAll()。 //如果不刪除,則撤銷 } else modelsubmitAll()。 //否則提交,在數(shù)據(jù)庫中刪除該行}這里刪除行的操作會先保存在model中,當(dāng)我們執(zhí)行了submitAll()函數(shù)后才會真正的在數(shù)據(jù)庫中刪除該行。這里我們使用了一個(gè)警告框來讓用戶選擇是否真得要?jiǎng)h除該行。運(yùn)行效果如下:我們點(diǎn)擊第二行,然后單擊“刪除選中行”按鈕,出現(xiàn)了警告框。這時(shí)你會發(fā)現(xiàn),表中的第二行前面出現(xiàn)了一個(gè)小感嘆號,表明該行已經(jīng)被修改了,但是還沒有真正的在數(shù)據(jù)庫中修改,這時(shí)的數(shù)據(jù)有個(gè)學(xué)名叫臟數(shù)據(jù)(Dirty Data)。當(dāng)我們按鈕“Yes”按鈕后數(shù)據(jù)庫中的數(shù)據(jù)就會被刪除,如果按下“No”,那么更改就會取消。第五,插入操作。我們進(jìn)入“添加記錄”按鈕的單擊事件槽函數(shù),更改如下:void Widget::on_pushButton_3_clicked() //插入記錄{ int rowNum = modelrowCount()。 //獲得表的行數(shù) int id = 10。 modelinsertRow(rowNum)。 //添加一行 modelsetData(modelindex(rowNum,0),id)。 //modelsubmitAll()。 //可以直接提交} 我們在表的最后添加一行,因?yàn)樵趕tudent表中我們設(shè)置了id號是主鍵,所以這里必須使用setData函數(shù)給新加的行添加id屬性的值,不然添加行就不會成功。這里可以直接調(diào)用submitAll()函數(shù)進(jìn)行提交,也可以利用“提交修改”按鈕進(jìn)行提交。運(yùn)行程序,效果如下:按下“添加記錄”按鈕后,就添加了一行,不過在該行的前面有個(gè)星號,如果我們按下“提交修改”按鈕,這個(gè)星號就會消失。當(dāng)然,如果我們將上面代碼里的提交函數(shù)的注釋去掉,也就不會有這個(gè)星號了。 可以看到這個(gè)模型很強(qiáng)大,而且完全脫離了SQL語句,就算你不怎么懂?dāng)?shù)據(jù)庫,也可以利用它進(jìn)行大部分常用的操作。我們也看到了,這個(gè)模型提供了緩沖區(qū),可以先將修改保存起來,當(dāng)我們執(zhí)行提交函數(shù)時(shí),再去真正地修改數(shù)據(jù)庫。當(dāng)然,這個(gè)模型比前面的模型更高級,前面講的所有操作,在這里都能執(zhí)行。講完QSqlTableModel了,我們這次講這個(gè)類的擴(kuò)展類QSqlRelationalTableModel,它們沒有太大的不同,唯一的就是后者在前者的基礎(chǔ)之上添加了外鍵(或者叫外碼)的支持。QSqlRelationalTableModel,該類為單張的數(shù)據(jù)庫表提供了一個(gè)可編輯的數(shù)據(jù)模型,它支持外鍵。我們還是新建Qt4 Gui Application工程,我這里工程名為relationalTableModel ,然后選中QtSql模塊,Base class選QWidget。工程建好后,添加C++ Header File ,更改其內(nèi)容如下:ifndef DATABASE_Hdefine DATABASE_Hinclude QSqlDatabaseinclude QSqlQuerystatic bool createConnection(){ QSqlDatabase db = QSqlDatabase::addDatabase(QSQLITE)。 ()。 if(!()) return false。 QSqlQuery query。 (create table student (id int primary key, name vchar,course int))。 (insert into student values (1,39。yafei039。,1))。 (insert into student values (2,39。yafei139。,1))。 (insert into student values (3,39。yafei239。,2))。 (create table course (id int primary key, name vchar, teacher vchar))。 (insert into course values (1,39。Math39。,39。yafeilinux139。))。 (insert into course values (2,39。English39。,39。yafeilinux239。))。 (insert into course values (3,39。Computer39。,39。yafeilinux339。))。 return true。}endif // DATABASE_H我們在這里建立了兩個(gè)表,student表中有一項(xiàng)是course,它是int型的,而course表的主鍵也是int型的。如果要將course項(xiàng)和course表進(jìn)行關(guān)聯(lián),它們的類型就必須相同,一定要注意這一點(diǎn)。:include QtGui/QApplicationinclude include int main(int argc, char *argv[]){ QApplication a(argc, argv)。 if(!createConnection()) return 1。 Widget w。 ()。 return ()。}: include QSqlRelationalTableModel然后在private中聲明對象: QSqlRelationalTableModel *model。 View部件到窗體上,: model = new QSqlRelationalTableModel(this)。 modelsetEditStrategy(QSqlTableModel::OnFieldChange)。 //屬性變化時(shí)寫入數(shù)據(jù)庫 modelsetTable(student)。 modelsetRelation(2,QSqlRelation(course,id,name))。 //將student表的第三個(gè)屬性設(shè)為course表的id屬性的外鍵,并將其顯示為course表的name屬性的值 modelsetHeaderData(0, Qt::Horizontal, QObject::tr(ID))。 modelsetHeaderData(1, Qt::Horizontal, QObject::tr(Name))。 modelsetHeaderData(2, Qt::Horizontal, QObject::tr(Course))。 modelselect()。 uitableViewsetModel(model)。我們修改了model的提交策略,OnFieldChange表示只要屬性被改動就馬上寫入數(shù)據(jù)庫,這樣就不需要我們再執(zhí)行提交函數(shù)了。setRelation()函數(shù)實(shí)現(xiàn)了創(chuàng)建外鍵,注意它的格式就行了。運(yùn)行效果如下:可以看到Course屬性已經(jīng)不再是編號,而是具體的課程了。關(guān)于外鍵,你也應(yīng)該有一定的認(rèn)識了吧,說簡單點(diǎn)就是將兩個(gè)相關(guān)的表建立一個(gè)橋梁,讓它們關(guān)聯(lián)起來。那么我們也希望,如果用戶更改課程屬性,那么他只能在課程表中有的課程中進(jìn)行選擇,而不能隨意填寫課程。在Qt中的QSqlRelationalDelegate委托類就能實(shí)現(xiàn)這個(gè)功能。我們只需在上面的構(gòu)造函數(shù)的最后添加一行代碼:uitableViewsetItemDelegate(new QSqlRelationalDelegate(uitableView))。添加代理(委托),在我這里不知為什么會出現(xiàn)SqlRelationalDelegate is not a type name的提示,不過可以編譯通過。: include QSqlRelationalDelegate運(yùn)行效果如下:可以看到這時(shí)修改Course屬性時(shí),就會出現(xiàn)一個(gè)下拉框,只能選擇course表中的幾個(gè)值。而利用這個(gè)類來操作數(shù)據(jù)庫,與前面講到的QSqlTableModel沒有區(qū)別,這里就不再重復(fù)。這幾篇文章一共講了好幾種操作數(shù)據(jù)庫的方法,到底應(yīng)該使用哪個(gè)呢?那就看你的需求了,根據(jù)這幾種方法的特點(diǎn)進(jìn)行選擇吧。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1