データベースに関して言えば、まずアムウェイには Navicat Premium というソフトウェアがあり、データベースをクエリするのに非常に便利です。
QMysql ドライバーは、Qt SQL モジュールが MySQL データベースと通信するために使用するプラグインです。QMysql ドライバーをコンパイルするには、次の条件を満たす必要があります。
- MySQL クライアント ライブラリと開発ヘッダー ファイルをインストールする必要があります。これらは通常、MySQL インストール プログラムで提供されるか、MySQL 公式 Web サイトからダウンロードできます。Qt アーキテクチャ (32 ビットまたは 64 ビット) に従って正しいデータベース ライブラリ ファイルを選択する必要があることに注意してください。
- Qt ソース コードを入手する必要があります。このコードはQt 公式 Web サイトからダウンロードできます。Qt バージョンに一致するソース コードを選択することも、最新のソース コードを選択することもできます。
- QMysql ドライバーをコンパイルするには、qmake と make ツールを使用する必要があります。これらのツールは通常、Qt インストール プログラムに付属するか、 Qt 公式 Web サイトからダウンロードできます。オペレーティング システムとコンパイラに適したツールを選択する必要があることに注意してください。
QT の Qmysql の現在のバージョンはインストール中にインストールされないため、この DLL ファイルを自分でコンパイルする必要があります。
QMysql の関連 DLL ファイルをコンパイルする手順は次のとおりです。
- Qt コマンド プロンプトを開き、Qt ソース コード ディレクトリの qt/src/plugins/sqldrivers/mysql フォルダーを入力します。次に例を示します。
F:\QT\5.12.9\Src\qtbase\src\plugins\sqldrivers\mysql
次に、次のコード行をコメント アウトし、次に示すように mysql のアドレスを構成します。
コピー
- MySQL ヘッダー ファイルとライブラリ ファイルのパスを指定して、qmake コマンドを実行します。例:
INCLUDEPATH += "E:/mysql/mysql-5.7.27-winx64/include"
DEPENDPATH += "E:/mysql/mysql-5.7.27-winx64/include"
LIBS += "E:/mysql/mysql-5.7.27-winx64/lib/libmysql.lib"
DESTDIR = ../mysql/mylib
コピー
- make または mingw32-make コマンドを実行し、コンパイラの種類に応じて適切なコマンドを選択します (VS 環境で SQL を使用する場合は、VS コンパイラでコンパイルするだけで済みます)。次に例を示します。
mingw32-make
コピー
- コンパイルが成功すると、現在のディレクトリに qsqlmysql.dll という名前のファイルが表示されます。これが QMysql プラグインです。このファイルを、Qt アプリケーションを実行する Qt ディレクトリの下の qt/plugins/sqldrivers フォルダーにコピーする必要があります。次に例を示します。
F:\QT\5.12.9\msvc2017_64\plugins\sqldrivers
以上が準備作業です。
次に、QT で Qmysql 関数を使用する方法ですが、まずヘッダー ファイルをインポートする必要があります。ファイルは次のとおりです。
#include <QtSql/QSqlDatabase> // 连接数据库
#include <QtSql/QSqlError> // 数据库连接失败打印报错语句
#include <QtSql/QSqlQuery> // 数据库操作(增删改查)
#include <QSqlQueryModel>
cpp ファイルに書き込む関数名を定義しました。
Q_OBJECT
public:
mysql(QWidget *parent);
~mysql();
void insert(QString InserName,int id,QString symbol,QString value);
void insert_line(QString InserName,QString id,QString symbol,QString value,QString v,QString despoitory);
void data_connect(bool,bool);//连接数据库
void data_test_connect(QStringList);//测试能否成功连接数据库
void close_data();
void creat_table(QString TableName);//创建一个表
void update_table(QString InserName,QString id,QString key,QString value);//更新数据库
void delete_table(QString TableName,QString id);//删除数据库
void find_alltable(QString datebase);//查找所有数据路表格
void find_table_inf(QString TableName);//查询某个表中的数据
void find_table_row(QString TableName,QString row_name,QString col_name);//查询表中某一行的数据
void find_table_col(QString TableName,QString col_name);//表名,列名
void find_table_desposite(QString TableName,QString col_name);//表名,列名查询储位名
対応する関数名において、実装される関数は以下のとおりです。
1 つ目は、関数のデータベース部分に接続することです。
QSettings *myini=new QSettings("info.ini", QSettings::IniFormat);//构造QSettings对象,访问ini文件
QStringList info_digitial={"digitial_type","hostname","port","database_name","user_name","password"};
QStringList s;
//设置键值对
s.clear();
myini->beginGroup("digital");
for(int i=0;i<info_digitial.size();i++)
{
s.append(myini->value(info_digitial[i]).toString());
}
myini->endGroup();
delete myini;
//输出可用数据库
qDebug()<<"available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug()<<driver;//输出中含有MySQL,那么恭喜你说明你的qt有MySQL驱动了
QSqlDatabase db = QSqlDatabase::addDatabase(s[0]);
db.setHostName(s[1]);
db.setPort(s[2].toInt());
db.setDatabaseName(s[3]);//数据库名
db.setUserName(s[4]);//用户名
db.setPassword(s[5]);//密码
bool ok = db.open();//打开并连接数据库
if(message_prompt)
{
if (ok){
QMessageBox::information(this, "infor", "success connect");
}
else {
QMessageBox::information(this, "infor", "open failed");
qDebug()<<"error open database because"<<db.lastError().text();
}
}
ここでは、ini ファイルに保存されている情報を読み取ることでデータベース設定を取得します。主に次の情報が含まれます。
QSqlDatabase オブジェクト データベースを定義し、インスタンス化します。接続に成功するとブール値が返されます。ここでは、このブール値を使用してデータベースに正常に接続されたかどうかを判断します。
次に、データベースにテーブルを作成し、そこに値を挿入します。
QSqlQuery query;
QString sql=QString("create table %1(订单号 text, 料号 text, 品名 text, 数量 text,储位 text);").arg(TableName);//"订单号","料号","品名","数量"
qDebug()<<"SQL"<<sql;
//创建表是否成功
if (!query.exec(sql))//.exec(),作用是开启一个循环,执行一个事件,相当于while(1)
{
qDebug() << QString::fromLocal8Bit("creat table failed:") << query.lastError();
}
else
{
qDebug() << QString::fromLocal8Bit("creat table success!");
}
テーブル table にデータを挿入する機能は次のように実装されます。
QSqlQuery query;
QString str=QString("insert into %4(序号,标签,value) values(%1,'%2','%3')").arg(id).arg(symbol).arg(value).arg(InserName);
if(query.exec(str)==false)
{
qDebug() << "insert failed";
QMessageBox::warning(this,u8"数据插入错误",u8"请检查数据是否正确");
}
else
{
QMessageBox::information(this, "insert", "insert connect");
qDebug() <<"insert success";
}
データを更新する機能を実現しており、コード部分は以下の通りです。
QSqlQuery query;
QString updata = QString("update %1 set %2='%3' where 订单号='%4'").arg(InserName).arg(column).arg(value).arg(row);
qDebug()<<"--update--"<<updata;
if (!query.exec(updata))
{
qDebug() << QString::fromLocal8Bit("updata failed!") << query.lastError();
}
else
{
qDebug() << QString::fromLocal8Bit("updata success!");
}
先ほどデータベーステーブルの作成とデータ挿入機能の実装について説明しましたが、次にデータベースの削除機能について説明します。コード部分は次のとおりです。
QSqlQuery query;
QString sql = QString("delete from %1 where 订单号 = '%2'").arg(TableName).arg(id);
if(query.exec(sql))
{
qDebug()<<"delete success!";
}
else
{
qDebug()<<"delete failed!";
}