QT接続access
1, ドライバのインストール
2, 接続、操作、表示
3, 中国語サポート
1-----------
まず自分でQTを取り付けて必要なDB Driverがあるかどうか確認します。
通常QTをインストールするとSqliteをデフォルトでインストールするDriverがあります。以下のコードでテストできます。
QSql Database m_db=QSql Database:addDatabase(「QSQLITE」);
1. m_db.set DatabaseName(「test.db」);
2. if(!mudb.open()
3. {
4. qDebug()<「DB openerror!」
5. }
6. else
7. {
8. qDebug()<「DB open Sucess!」
9. }
テストODBC接続は簡単に真似できません。set DatabaseNameは簡単にデータベース名を入力するのではなく、DNS名です。DSN接続文字列を使ってODBCデータベースに直接接続することもできます。直接DNSを設定することもできます。
データベースドライバのテスト方法
(開く.proファイルはwin 32に追加する:CONFIG+=consolie
QT+=SQL
これでデバッグ情報が表示されます。
最初の文書で使うべきです。
)
QTをインストールする時に何も配置していないと、通常はQSQLITEしか現れません。QODBC 4をインストールする必要があります。
ODBCプラグインをコンパイルします。configure-plugin-sql-odbcで保証できます。単独でコンパイルもできます。\src\plugins\sqldrivers\odbc
qmake-tvclib odbc.pro
qmake
メーク
コンパイル後、「\plugins\sqldrivers」の下にQsqlodbddlやQsqlodbc.dlがあるべきです。
この方法は以前は気づかなかったです。つまりQTのソースコードをコンパイルする時、一部のプラグインや機能がコンパイルされていない場合、単独で上記の方法でコンパイルすることができます。
上記の手順でODBCのQTdriverを保有しています。
それでプログラムを書くことができます。
2--------------
簡単に言えば、データベース名はこう書くべきです。 「Driver={microsoff accessdriver(*.mdb)];dbq=*.mdb;uid=admin;pwd=pass;
1. QSql Database mudb=QSql Database:addDatabase("QODBC")
2. mudb.set DatabaseName(DRIVER={Microsoft Access Driver];FIL={MS Access};DBQ=db.mdb;UID=;PWD=>
3. ブック ok=mudb.open();
4. if(ok)
5. {
6. QDebug()<<データベースのオープンに成功しました。
7. }
8. else
9. {
10. QDebug()<<データベースのオープンに失敗しました;;
11. }
QSql Databaseに設定してから通過します。
QSqlQuery*mugQuery=new QSqlQuery(mudb)
mupQuery->exec(「select*FROM Table 1」)という従来のsql文で操作できます。
プログラムを書き終えたら、対応するライブラリファイルを一緒に置く必要があります。通常のQtCore.dl QtSql.4.dllを除いて、windows下開発のQtで、mingwm 10.dlを加えます。最初は直接にQtsqlodlをプログラムの同じクラスのディレクトリの下に置いています。データベースファイルを開けられないことに気づきました。最後にフォルダを作成する必要があります。そしてqsqlodbc 4 dlを入れてもいいです。
その他の関連知識の参考
http://v.tampacrave.com/html/sejishikongxiangguanwenzhang/20090429/122.html
http://www.cnblogs.com/buffer/archive/2009/05/25/1488613.html
来た:http://hi.baidu.com/leonkuo1984/blog/item/0df9cdd063a81784a1ec9cf2.html
本論文ではQTとaccessを紹介します。まず駆動db=QSql Databaseをロードします。
データベースの接続に必要なヘッダファイル:
#include
#include
マイクロソフトを結ぶAccess
1. QSql Database ldb=QSql Database::addDatabase("QODBC")
2. ldb.set DatabaseName(“DRIVER=”Microsoft Access Driver(*.mdb);FIL={MSAccess}、DBQ=system.mdb;UID=;PWD=xiazhset”);
3. book=ldb.open()
4. //新しいクエリーセットを定義し、リンクキーを指定します。複数の接続があれば、必要なものを任意に指定できます。
5. QSqlQuery mquery=QSqlQuery:QSqlQuery(ldb)
6. if(ok)
7. {
8. book=mquery.exec(select*from sqlguset);
9. if(!isok)
10. {
11. ldb.close()
12. return-1;
13. }
14. //これは必要です。検問の結果集は現在位置が第一条記録にないからです。
15. mquery.next()
16. QStrigs HostName=mquery.value(1).toString()
17. QStrigs DatabaseName=mquery.value(2).toString()
18. QStrigs UserName=mquery.value(3).toString()
19. QStrigs Password=mquery.value(4).toString()
20. //結果セットをクリア
21. mquery.clear()
22. // この接続が使われなくなったら、閉じることができます。
23. ldb.close()
24. //ここでは、データベースから読み出したデータをリストコントロールに書き込みます。
25. イ.listuout->insertItem;
26. イ.listuout->insertItem;
27. }
28. else
29. {
30. // ローカルデータベースを開けませんでした。
31. QMessageBox::critical(0,QObject::tr(Accessデータベース読み取りエラー),db.lastErr().text();
32. return-1;
33. }
sql常用のヘッダファイル
璣include
►static book sql Connection(const QString&HostName)
► const QString&DatabaseName、
► const QString&UserName、
► const QString&Password)
►►
► QSql Database db=QSql Database::addDatabase("QODBC")
► db.set HostName;
► db.set DatabaseName;
► db.setUserName;
► db.setPassword;
► if(!db.open()
► {
► QMessageBox:critical(0,QObject:tr(Error)
► QObject::tr(The database reported an error:%1).arg(db.lastErr().text())
► return false;
► }
► //Qtデータベース接続後、「SET NAMES'UTF 8'」文または「SET NAMES'GBK」を実行します。
► //db.exec("SET NAMES'UTF 8')
► return true;
►
表示(3つのレイヤーに分割)
最下部 》》》》データベース(access、sql 2008、mysql、oracle)
中間層」
QSQlQuery
►QSqlQueryModel:読み取り専用のデータベースデータのモデル。
►QSql Table Model:読み書きができる単一の表のモデルで、SQL文を書かなくてもいいです。
►QSql Relational Table Model:QSql Table Modelのサブクラスは、複数のテーブルが連結されています。
►これらのクラスはQbstractTable Modelに継承されていますが、それらはQbstractItemModelに継承されています。
表示層」」」
QListView、QTablew、QTreeView QTable Widget
3-------------
標準のqtプログラムでは中国語の言語がサポートされていません。下記の二つの状況があります。コードに下記の内容を加えるだけでいいです。
1、中国語の言語を使うと文字化けが発生します。
2、データベース検索の時に結果が確認できません。
1. 要点 メール(int argc char *argv[]
2. {
3. Qiplication アプリ(argc) argv;
4. QText Codec:set Codec ForLocale(QText Codec:codecForName);
5. QText Codec:set Codec ForTr(QText Codec:codecForName);
6. QText Codec:set Codec ForCStrings(QText Codec:codecForName(「GBK」);
7. MainWindow w;
8. w.show();
9. return app.exec()
10. }
2, 接続、操作、表示
3, 中国語サポート
1-----------
まず自分でQTを取り付けて必要なDB Driverがあるかどうか確認します。
通常QTをインストールするとSqliteをデフォルトでインストールするDriverがあります。以下のコードでテストできます。
QSql Database m_db=QSql Database:addDatabase(「QSQLITE」);
1. m_db.set DatabaseName(「test.db」);
2. if(!mudb.open()
3. {
4. qDebug()<「DB openerror!」
5. }
6. else
7. {
8. qDebug()<「DB open Sucess!」
9. }
テストODBC接続は簡単に真似できません。set DatabaseNameは簡単にデータベース名を入力するのではなく、DNS名です。DSN接続文字列を使ってODBCデータベースに直接接続することもできます。直接DNSを設定することもできます。
データベースドライバのテスト方法
(開く.proファイルはwin 32に追加する:CONFIG+=consolie
QT+=SQL
これでデバッグ情報が表示されます。
最初の文書で使うべきです。
)
#include <QtGui/QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
//w.show();
qDebug()<< QSqlDatabase::drivers();
return a.exec();
}
QTをインストールする時に何も配置していないと、通常はQSQLITEしか現れません。QODBC 4をインストールする必要があります。
ODBCプラグインをコンパイルします。configure-plugin-sql-odbcで保証できます。単独でコンパイルもできます。\src\plugins\sqldrivers\odbc
qmake-tvclib odbc.pro
qmake
メーク
コンパイル後、「\plugins\sqldrivers」の下にQsqlodbddlやQsqlodbc.dlがあるべきです。
この方法は以前は気づかなかったです。つまりQTのソースコードをコンパイルする時、一部のプラグインや機能がコンパイルされていない場合、単独で上記の方法でコンパイルすることができます。
上記の手順でODBCのQTdriverを保有しています。
それでプログラムを書くことができます。
2--------------
簡単に言えば、データベース名はこう書くべきです。 「Driver={microsoff accessdriver(*.mdb)];dbq=*.mdb;uid=admin;pwd=pass;
1. QSql Database mudb=QSql Database:addDatabase("QODBC")
2. mudb.set DatabaseName(DRIVER={Microsoft Access Driver];FIL={MS Access};DBQ=db.mdb;UID=;PWD=>
3. ブック ok=mudb.open();
4. if(ok)
5. {
6. QDebug()<<データベースのオープンに成功しました。
7. }
8. else
9. {
10. QDebug()<<データベースのオープンに失敗しました;;
11. }
QSql Databaseに設定してから通過します。
QSqlQuery*mugQuery=new QSqlQuery(mudb)
mupQuery->exec(「select*FROM Table 1」)という従来のsql文で操作できます。
プログラムを書き終えたら、対応するライブラリファイルを一緒に置く必要があります。通常のQtCore.dl QtSql.4.dllを除いて、windows下開発のQtで、mingwm 10.dlを加えます。最初は直接にQtsqlodlをプログラムの同じクラスのディレクトリの下に置いています。データベースファイルを開けられないことに気づきました。最後にフォルダを作成する必要があります。そしてqsqlodbc 4 dlを入れてもいいです。
その他の関連知識の参考
http://v.tampacrave.com/html/sejishikongxiangguanwenzhang/20090429/122.html
http://www.cnblogs.com/buffer/archive/2009/05/25/1488613.html
来た:http://hi.baidu.com/leonkuo1984/blog/item/0df9cdd063a81784a1ec9cf2.html
本論文ではQTとaccessを紹介します。まず駆動db=QSql Databaseをロードします。
データベースの接続に必要なヘッダファイル:
#include
#include
マイクロソフトを結ぶAccess
1. QSql Database ldb=QSql Database::addDatabase("QODBC")
2. ldb.set DatabaseName(“DRIVER=”Microsoft Access Driver(*.mdb);FIL={MSAccess}、DBQ=system.mdb;UID=;PWD=xiazhset”);
3. book=ldb.open()
4. //新しいクエリーセットを定義し、リンクキーを指定します。複数の接続があれば、必要なものを任意に指定できます。
5. QSqlQuery mquery=QSqlQuery:QSqlQuery(ldb)
6. if(ok)
7. {
8. book=mquery.exec(select*from sqlguset);
9. if(!isok)
10. {
11. ldb.close()
12. return-1;
13. }
14. //これは必要です。検問の結果集は現在位置が第一条記録にないからです。
15. mquery.next()
16. QStrigs HostName=mquery.value(1).toString()
17. QStrigs DatabaseName=mquery.value(2).toString()
18. QStrigs UserName=mquery.value(3).toString()
19. QStrigs Password=mquery.value(4).toString()
20. //結果セットをクリア
21. mquery.clear()
22. // この接続が使われなくなったら、閉じることができます。
23. ldb.close()
24. //ここでは、データベースから読み出したデータをリストコントロールに書き込みます。
25. イ.listuout->insertItem;
26. イ.listuout->insertItem;
27. }
28. else
29. {
30. // ローカルデータベースを開けませんでした。
31. QMessageBox::critical(0,QObject::tr(Accessデータベース読み取りエラー),db.lastErr().text();
32. return-1;
33. }
sql常用のヘッダファイル
璣include
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QVariant>
#include <QString>
►単一データベース接続:►static book sql Connection(const QString&HostName)
► const QString&DatabaseName、
► const QString&UserName、
► const QString&Password)
►►
► QSql Database db=QSql Database::addDatabase("QODBC")
► db.set HostName;
► db.set DatabaseName;
► db.setUserName;
► db.setPassword;
► if(!db.open()
► {
► QMessageBox:critical(0,QObject:tr(Error)
► QObject::tr(The database reported an error:%1).arg(db.lastErr().text())
► return false;
► }
► //Qtデータベース接続後、「SET NAMES'UTF 8'」文または「SET NAMES'GBK」を実行します。
► //db.exec("SET NAMES'UTF 8')
► return true;
►
表示(3つのレイヤーに分割)
最下部 》》》》データベース(access、sql 2008、mysql、oracle)
中間層」
QSQlQuery
►QSqlQueryModel:読み取り専用のデータベースデータのモデル。
►QSql Table Model:読み書きができる単一の表のモデルで、SQL文を書かなくてもいいです。
►QSql Relational Table Model:QSql Table Modelのサブクラスは、複数のテーブルが連結されています。
►これらのクラスはQbstractTable Modelに継承されていますが、それらはQbstractItemModelに継承されています。
表示層」」」
QListView、QTablew、QTreeView QTable Widget
3-------------
標準のqtプログラムでは中国語の言語がサポートされていません。下記の二つの状況があります。コードに下記の内容を加えるだけでいいです。
1、中国語の言語を使うと文字化けが発生します。
2、データベース検索の時に結果が確認できません。
1. 要点 メール(int argc char *argv[]
2. {
3. Qiplication アプリ(argc) argv;
4. QText Codec:set Codec ForLocale(QText Codec:codecForName);
5. QText Codec:set Codec ForTr(QText Codec:codecForName);
6. QText Codec:set Codec ForCStrings(QText Codec:codecForName(「GBK」);
7. MainWindow w;
8. w.show();
9. return app.exec()
10. }