㈠ Qt製作用戶登錄及注冊界面,要怎樣才能把注冊界面里注冊的信息保存到資料庫,再到登錄時調用資料庫,急急
基於qt的登錄,注冊界面,注冊信息直接寫入資料庫,然後根據資料庫用戶信息驗證是否能夠登錄-Qt-based login, registration interface, registration information directly into the database, and then verify that the database user information to log
㈡ 用Qt做軟體時,備份,導入資料庫時候,進度條怎麼弄
一、備份資料庫1、打開sql企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer
2、SQLServer組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄
3、選擇你的資料庫名稱(如論壇資料庫Forum)-->然後點上面菜單中的工具-->選擇備份資料庫
4、備份選項選擇完全備份,目的中的備份到如果原來有路徑和名稱則選中名稱點刪除,然後點添加,如果原來沒有路徑和名稱則直接選擇添加,接著指定路徑和文件名,指定後點確定返回備份窗口,接著點確定進行備份二、還原資料庫1、打開SQL企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer
2、SQLServer組-->雙擊打開你的伺服器-->點圖標欄的新建資料庫圖標,新建資料庫的名字自行取
3、點擊新建好的資料庫名稱(如論壇資料庫Forum)-->然後點上面菜單中的工具-->選擇恢復資料庫
4、在彈出來的窗口中的還原選項中選擇從設備-->點選擇設備-->點添加-->然後選擇你的備份文件名-->添加後點確定返回,這時候設備欄應該出現您剛才選擇的資料庫備份文件名,備份號默認為1(如果您對同一個文件做過多次備份,可以點擊備份號旁邊的查看內容,在復選框中選擇最新的一次備份後點確定)-->然後點擊上方常規旁邊的選項按鈕
5、在出現的窗口中選擇在現有資料庫上強制還原,以及在恢復完成狀態中選擇使資料庫可以繼續運行但無法還原其它事務日誌的選項。在窗口的中間部位的將資料庫文件還原為這里要按照你SQL的安裝進行設置(也可以指定自己的目錄),邏輯文件名不需要改動,移至物理文件名要根據你所恢復的機器情況做改動,如您的SQL資料庫裝在D:,那麼就按照您恢復機器的目錄進行相關改動改動,並且最後的文件名最好改成您當前的資料庫名(如原來是bbs_data.mdf,現在的資料庫是forum,就改成forum_data.mdf),日誌和數據文件都要按照這樣的方式做相關的改動(日誌的文件名是*_log.ldf結尾的),這里的恢復目錄您可以自由設置,前提是該目錄必須存在(如您可以指定d:sqldatabs_data.mdf或者d:sqldatabs_log.ldf),否則恢復將報錯
6、修改完成後,點擊下面的確定進行恢復,這時會出現一個進度條,提示恢復的進度,恢復完成後系統會自動提示成功,如中間提示報錯,請記錄下相關的錯誤內容並詢問對SQL操作比較熟悉的人員,一般的錯誤無非是目錄錯誤或者文件名重復或者文件名錯誤或者空間不夠或者資料庫正在使用中的錯誤,資料庫正在使用的錯誤您可以嘗試關閉所有關於SQL窗口然後重新打開進行恢復操作,如果還提示正在使用的錯誤可以將SQL服務停止然後重起看看,至於上述其它的錯誤一般都能按照錯誤內容做相應改動後即可恢復三、收縮資料庫一般情況下,SQL資料庫的收縮並不能很大程度上減小資料庫大小,其主要作用是收縮日誌大小,應當定期進行此操作以免資料庫日誌過大
1、設置資料庫模式為簡單模式:打開SQL企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer-->SQLServer組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄-->選擇你的資料庫名稱(如論壇資料庫Forum)-->然後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,然後按確定保存
2、在當前資料庫上點右鍵,看所有任務中的收縮資料庫,一般裡面的默認設置不用調整,直接點確定
3、收縮資料庫完成後,建議將您的資料庫屬性重新設置為標准模式,操作方法同第一點,因為日誌在一些異常情況下往往是恢復資料庫的重要依據四、設定每日自動備份資料庫強烈建議有條件的用戶進行此操作!
1、打開企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer-->SQLServer組-->雙擊打開你的伺服器
2、然後點上面菜單中的工具-->選擇資料庫維護計劃器
3、下一步選擇要進行自動備份的數據-->下一步更新數據優化信息,這里一般不用做選擇-->下一步檢查數據完整性,也一般不選擇
4、下一步指定資料庫維護計劃,默認的是1周備份一次,點擊更改選擇每天備份後點確定
5、下一步指定備份的磁碟目錄,選擇指定目錄,如您可以在D盤新建一個目錄如:d:databak,然後在這里選擇使用此目錄,如果您的資料庫比較多最好選擇為每個資料庫建立子目錄,然後選擇刪除早於多少天前的備份,一般設定4-7天,這看您的具體備份要求,備份文件擴展名一般都是bak就用默認的
6、下一步指定事務日誌備份計劃,看您的需要做選擇-->下一步要生成的報表,一般不做選擇-->下一步維護計劃歷史記錄,最好用默認的選項-->下一步完成
7、完成後系統很可能會提示SqlServerAgent服務未啟動,先點確定完成計劃設定,然後找到桌面最右邊狀態欄中的SQL綠色圖標,雙擊點開,在服務中選擇SqlServerAgent,然後點擊運行箭頭,選上下方的當啟動OS時自動啟動服務
8、這個時候資料庫計劃已經成功的運行了,他將按照您上面的設置進行自動備份
修改計劃:
1、打開企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer-->SQLServer組-->雙擊打開你的伺服器-->管理-->資料庫維護計劃-->打開後可看到你設定的計劃,可以進行修改或者刪除操作五、數據的轉移(新建資料庫或轉移伺服器)一般情況下,最好使用備份和還原操作來進行轉移數據,在特殊情況下,可以用導入導出的方式進行轉移,這里介紹的就是導入導出方式,導入導出方式轉移數據一個作用就是可以在收縮資料庫無效的情況下用來減小(收縮)資料庫的大小,本操作默認為您對SQL的操作有一定的了解,如果對其中的部分操作不理解,可以咨詢動網相關人員或者查詢網上資料
1、將原資料庫的所有表、存儲過程導出成一個SQL文件,導出的時候注意在選項中選擇編寫索引腳本和編寫主鍵、外鍵、默認值和檢查約束腳本選項
2、新建資料庫,對新建資料庫執行第一步中所建立的SQL文件
3、用SQL的導入導出方式,對新資料庫導入原資料庫中的所有表內容
㈢ QT中怎樣把ComboBox中的內容存入資料庫
#include <qapplication.h>
#include <qsqldatabase.h>
#include "../login.h "
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
QSqlDatabase *defaultDB = QSqlDatabase::addDatabase( DB_SALES_DRIVER );
if ( defaultDB ) {
defaultDB-> setDatabaseName( DB_SALES_DBNAME );
defaultDB-> setUserName( DB_SALES_USER );
defaultDB-> setPassword( DB_SALES_PASSWD );
defaultDB-> setHostName( DB_SALES_HOST );
if ( defaultDB-> open() ) {
// 資料庫被成功打開,我們現在可以運行SQL命令。
}
}
return 0;
}
㈣ 用qt怎麼備份Oracle資料庫
Qt 提供了 QtSql 模塊來提供平台獨立的基於 SQL 的資料庫操作。這里我們所說的「平台獨立」,既包括操作系統平台,有包括各個資料庫平台。另外,我們強調了「基於 SQL」,因為 NoSQL 資料庫至今沒有一個通用查詢方法,所以不可能提供一種通用的 NoSQL 資料庫的操作。Qt 的資料庫操作還可以很方便的與 model/view 架構進行整合。通常來說,我們對資料庫的操作更多地在於對資料庫表的操作,而這正是 model/view 架構的長項。
Qt 使用QSqlDatabase表示一個資料庫連接。更底層上,Qt 使用驅動(drivers)來與不同的資料庫 API 進行交互。Qt 桌面版本提供了如下幾種驅動:
驅動 資料庫
QDB2 IBM DB2 (7.1 或更新版本)
QIBASE Borland InterBase
QMYSQL MySQL
QOCI Oracle Call Interface Driver
QODBC Open Database Connectivity (ODBC) – Microsoft SQL Server 及其它兼容 ODBC 的資料庫
QPSQL PostgreSQL (7.3 或更新版本)
QSQLITE2 SQLite 2
QSQLITE SQLite 3
QSYMSQL 針對 Symbian 平台的SQLite 3
QTDS Sybase Adaptive Server (自 Qt 4.7 起廢除)
不過,由於受到協議的限制,Qt 開源版本並沒有提供上面所有驅動的二進製版本,而僅僅以源代碼的形式提供。通常,Qt 只默認搭載 QSqlite 驅動(這個驅動實際還包括 Sqlite 資料庫,也就是說,如果需要使用 Sqlite 的話,只需要該驅動即可)。我們可以選擇把這些驅動作為 Qt 的一部分進行編譯,也可以當作插件編譯。
如果習慣於使用 SQL 語句,我們可以選擇QSqlQuery類;如果只需要使用高層次的資料庫介面(不關心 SQL 語法),我們可以選擇QSqlTableModel和QSqlRelationalTableModel。我們只介紹QSqlQuery類的使用。
在使用時,我們可以通過
QSqlDatabase::drivers();
1
找到系統中所有可用的資料庫驅動的名字列表。我們只能使用出現在列表中的驅動。由於默認情況下,QtSql 是作為 Qt 的一個模塊提供的。為了使用有關資料庫的類,我們必須早 .pro 文件中添加這么一句:
QT += sql
1
這表示,我們的程序需要使用 Qt 的 core、gui 以及 sql 三個模塊。注意,如果需要同時使用 Qt4 和 Qt5 編譯程序,通常我們的 .pro 文件是這樣的:
QT += core gui sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
1
2
這兩句也很明確:Qt 需要載入 core、gui 和 sql 三個模塊,如果主板本大於 4,則再添加 widgets 模塊。
下面來看一個簡單的函數:
bool connect(const QString &dbName)
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// db.setHostName("host");
// db.setDatabaseName("dbname");
// db.setUserName("username");
// db.setPassword("password");
db.setDatabaseName(dbName);
if (!db.open()) {
QMessageBox::critical(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
我們使用connect()函數創建一個資料庫連接。我們使用QSqlDatabase::addDatabase()靜態函數完成這一請求,也就是創建了一個QSqlDatabase實例。注意,資料庫連接使用自己的名字進行區分,而不是資料庫的名字。例如,我們可以使用下面的語句:
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE", QString("con%1").arg(dbName));
1
此時,我們是使用addDatabase()函數的第二個參數來給這個資料庫連接一個名字。在這個例子中,用於區分這個資料庫連接的名字是QString(「conn%1」).arg(dbName),而不是 「QSQLITE」。這個參數是可選的,如果不指定,系統會給出一個默認的名字QSqlDatabase::defaultConnection,此時,Qt 會創建一個默認的連接。如果你給出的名字與已存在的名字相同,新的連接會替換掉已有的連接。通過這種設計,我們可以為一個資料庫建立多個連接。
我們這里使用的是 sqlite 資料庫,只需要指定資料庫名字即可。如果是資料庫伺服器,比如 MySQL,我們還需要指定主機名、埠號、用戶名和密碼,這些語句使用注釋進行了簡單的說明。
接下來我們調用了QSqlDatabase::open()函數,打開這個資料庫連接。通過檢查open()函數的返回值,我們可以判斷資料庫是不是正確打開。
QtSql 模塊中的類大多具有lastError()函數,用於檢查最新出現的錯誤。如果你發現資料庫操作有任何問題,應該使用這個函數進行錯誤的檢查。這一點我們也在上面的代碼中進行了體現。當然,這只是最簡單的實現,一般來說,更好的設計是,不要在資料庫操作中混雜界面代碼(並且將這個connect()函數放在一個專門的資料庫操作類中)。
接下來我們可以在main()函數中使用這個connect()函數:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (connect("demo.db")) {
QSqlQuery query;
if (!query.exec("CREATE TABLE student ("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"name VARCHAR,"
"age INT)")) {
QMessageBox::critical(0, QObject::tr("Database Error"),
query.lastError().text());
return 1;
}
} else {
return 1;
}
return a.exec();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
main()函數中,我們調用這個connect()函數打開資料庫。如果打開成功,我們通過一個QSqlQuery實例執行了 SQL 語句,就是query.exec();。同樣,我們使用其lastError()函數檢查了執行結果是否正確。
注意這里的QSqlQuery實例的創建。我們並沒有指定是為哪一個資料庫連接創建查詢對象,此時,系統會使用默認的連接,也就是使用沒有第二個參數的addDatabase()函數創建的那個連接(其實就是名字為QSqlDatabase::defaultConnection的默認連接)。如果沒有這么一個連接,系統就會報錯。也就是說,如果沒有默認連接,我們在創建QSqlQuery對象時必須指明是哪一個QSqlDatabase對象,也就是addDatabase()的返回值。
我們還可以通過使用QSqlQuery::isActive()函數檢查語句執行正確與否。如果QSqlQuery對象是活動的,該函數返回 true。所謂「活動」,就是指該對象成功執行了exec()函數,但是還沒有完成。如果需要設置為不活動的,可以使用finish()或者clear()函數,或者直接釋放掉這個QSqlQuery對象。這里需要注意的是,如果存在一個活動的 SELECT 語句,某些資料庫系統不能成功完成connect()或者rollback()函數的調用。此時,我們必須首先將活動的 SELECT 語句設置成不活動的。
創建過資料庫表 student 之後,我們開始插入數據,然後將其獨取出來:
if (connect("demo.db")) {
QSqlQuery query;
query.prepare("INSERT INTO student (name, age) VALUES (?, ?)");
QVariantList names;
names << "Tom" << "Jack" << "Jane" << "Jerry";
query.addBindValue(names);
QVariantList ages;
ages << 20 << 23 << 22 << 25;
query.addBindValue(ages);
if (!query.execBatch()) {
QMessageBox::critical(0, QObject::tr("Database Error"),
query.lastError().text());
}
query.finish();
query.exec("SELECT name, age FROM student");
while (query.next()) {
QString name = query.value(0).toString();
int age = query.value(1).toInt();
qDebug() << name << ": " << age;
}
} else {
return 1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
依舊連接到我們創建的 demo.db 資料庫。我們需要插入多條數據,此時可以使用QSqlQuery::exec()函數一條一條插入數據,但是這里我們選擇了另外一種方法:批量執行。首先,我們使用QSqlQuery::prepare()函數對這條 SQL 語句進行預處理,問號 ? 相當於佔位符,預示著以後我們可以使用實際數據替換這些位置。簡單說明一下,預處理是資料庫提供的一種特性,它會將 SQL 語句進行編譯,性能和安全性都要優於普通的 SQL 處理。在上面的代碼中,我們使用一個字元串列表 names 替換掉第一個問號的位置,一個整型列表 ages 替換掉第二個問號的位置,利用QSqlQuery::addBindValue()我們將實際數據綁定到這個預處理的 SQL 語句上。需要注意的是,names 和 ages 這兩個列表裡面的數據需要一一對應。然後我們調用QSqlQuery::execBatch()批量執行 SQL,之後結束該對象。這樣,插入操作便完成了。
另外說明一點,我們這里使用了 ODBC 風格的 ? 佔位符,同樣,我們也可以使用 Oracle 風格的佔位符:
query.prepare("INSERT INTO student (name, age) VALUES (:name, :age)");
1
此時,我們就需要使用
query.bindValue(":name", names);
query.bindValue(":age", ages);
1
2
進行綁定。Oracle 風格的綁定最大的好處是,綁定的名字和值很清晰,與順序無關。但是這里需要注意,bindValue()函數只能綁定一個位置。比如
query.prepare("INSERT INTO test (name1, name2) VALUES (:name, :name)");
// ...
query.bindValue(":name", name);
1
2
3
只能綁定第一個 :name 佔位符,不能綁定到第二個。
接下來我們依舊使用同一個查詢對象執行一個 SELECT 語句。如果存在查詢結果,QSqlQuery::next()會返回 true,直到到達結果最末,返回 false,說明遍歷結束。我們利用這一點,使用 while 循環即可遍歷查詢結果。使用QSqlQuery::value()函數即可按照 SELECT 語句的欄位順序獲取到對應的資料庫存儲的數據。
對於資料庫事務的操作,我們可以使用 QSqlDatabase::transaction() 開啟事務,QSqlDatabase::commit() 或者QSqlDatabase::rollback() 結束事務。使用QSqlDatabase::database()函數則可以根據名字獲取所需要的資料庫連接。
㈤ Qt中的資料庫文件放在哪個文件夾下
pannels放到我的文檔\sports
interactive\football
manager
2015\games,然後開檔時有個選資料庫大小的,就可以選巨大的資料庫了