0

私はQtの初心者なので、私の質問は少し基本的なものかもしれません。

私の意図は、ハードドライブにあるODBCデータベースを操作することです。私はこのコードでそれを開こうとしました:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("");
db.setDatabaseName("c:\\database.mdb");
bool ok = db.open();
QSqlQuery query;
query.exec("SELECT name FROM results WHERE tag>10");
while (query.next()) {
    QString name1 = query.value(0).toString();
    qDebug() << name1;
}

ここで問題となるのは、プログラムがデータベースを見つけることができず、db.open()行で失敗することです。Qtはデータベースを直接開くことはできないと思いますが、代わりにSQLサーバーを処理する必要があります。これはそうですか?その場合、特にホスト名(ローカルホストですか?)に関して、先に進む方法についていくつかの手がかりを教えていただければ幸いです。

また、ファイルへのパスをDatabaseNameに含める必要があるかどうかもわかりません。

PS:MySQLなどの別の種類のデータベース/サーバーに移行しても問題ありません。したがって、ソリューションでこれが必要な場合は、満足しています。

前もって感謝します

D

4

3 に答える 3

1

他の何かのためにJet/MS Access形式のデータベースが特に必要でない限り、SQLiteを使用したほうがよいでしょう。QtにはSQLiteサポートが組み込まれています(QSQLITEドライバー)-データベースファイルをポイントするだけです。ODBCデータソースなどを設定する必要はありません。

于 2012-10-17T20:02:11.710 に答える
0

ドキュメントによると、setDatabaseNameをODBCデータソースに設定する必要があります。次に、適切なファイルを指すようにODBCデータソースを構成します。

于 2012-10-17T16:55:16.827 に答える
0

将来の参考のために:

Werne Strydomが言ったように、setDatabaseNameの引数はデータベースファイル名ではなく、データベースを指すODBCデータソースの名前です。したがって、データベースを指すODBCを作成する必要があります。

これを行う通常の方法(Windowsの場合)は、コントロールパネル\システムとセキュリティ\管理ツール\データソース(ODBC)に移動することです。ただし、64ビットマシンを使用していて32ビットドライバーを使用する場合は、代わりにC:\ windows \ SysWOW64に移動して、odbcad32.exeを実行します。

これを行うと、ダイアログが開きます(64/32ビットに関係なく同じダイアログ)。ここで、ODBCを作成し、名前を付けて、実際のデータベースにリンクします。私の場合、ローカルデータベースで作業しているので、[ユーザーDNS]タブを使用しました。

次に、Qtに戻り、そのODBC名をsetDatabaseNameの引数として配置します。そしてそれは動作します!(またはそれは私のためにした...)

コードの新しいビットは次のようになります。

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("localhost");
db.setDatabaseName("MyDataSource");
bool ok = db.open();
QSqlQuery query;
query.exec("SELECT name FROM results WHERE tag>10");
while (query.next()) {
    QString name1 = query.value(0).toString();
    qDebug() << name1;
}

ここで、「MyDataSource」は私がODCBに付けた名前です。

于 2012-10-18T07:04:20.090 に答える