サーチ…


基本的な接続とクエリ

QSqlDatabaseクラスは、接続を介してデータベースにアクセスするためのインターフェイスを提供します。 QSqlDatabaseのインスタンスは接続を表します。この接続により、サポートされているデータベースドライバの1つを介してデータベースにアクセスできます。追加することを確認してください

QT += SQL 

.proファイルに保存します。 testDBという名前のSQL DBを、次の列を継承するcountryTableと仮定します。

| country |
-----------
| USA     |

クエリを実行し、TestDBからSQLデータを取得するには:

#include <QtGui>
#include <QtSql>
 
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); // Will use the driver referred to by "QPSQL" (PostgreSQL Driver) 
    db.setHostName("TestHost");
    db.setDatabaseName("TestDB");
    db.setUserName("Foo");
    db.setPassword("FooPass");
    
    bool ok = db.open();
    if(ok)
    {
        QSqlQuery query("SELECT country FROM countryTable");
        while (query.next())
        {
          QString country = query.value(0).toString();
          qWarning() << country; // Prints "USA"
        }
    }

    return app.exec();
}

Qt SQLクエリパラメータ

実際の値からSQLクエリを分離するのが便利なことがよくあります。プレースホルダを使用してこれを行うことができます。 Qtは、名前付きバインディングと位置バインディングという2つのプレースホルダ構文をサポートしています。

名前付きバインディング:

QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) VALUES (:id, :name, :salary)");
query.bindValue(":id", 1001);
query.bindValue(":name", "Thad Beaumont");
query.bindValue(":salary", 65000);
query.exec();

位置結合:

QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Thad Beaumont");
query.addBindValue(65000);
query.exec();

bindValue()またはaddBindValue()を呼び出す前に、QSqlQuery :: prepare()を一度呼び出す必要があることに注意してください。

QODBCを使用したMS SQL Serverデータベース接続

QODBCでデータベース接続を開こうとするときは、必ず

  • QODBCドライバが利用可能です
  • サーバーにODBCインターフェイスがあり、これを有効にしています(ODBCドライバのインストールによって異なります)
  • 共有メモリアクセス、TCP / IP接続、または名前付きパイプ接続を使用します。

すべての接続では、 QSqlDatabase :: setDatabaseNameを呼び出してDatabaseNameを設定する必要があります。


共有メモリアクセスを使用したオープン接続

このオプションを使用するには、マシンのメモリにアクセスする必要があり、共有メモリにアクセスするためのアクセス権が必要です。共有メモリー接続を使用するには、サーバー文字列の前にlpc:を設定する必要があります。 SQL Server Native Client 11を使用した接続は、次の手順で行います。

QString connectString = "Driver={SQL Server Native Client 11.0};";                     // Driver is now {SQL Server Native Client 11.0}
connectString.append("Server=lpc:"+QHostInfo::localHostName()+"\\SQLINSTANCENAME;");   // Hostname,SQL-Server Instance
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);

if(db.open())
{
    ui->statusBar->showMessage("Connected");
}
else
{
    ui->statusBar->showMessage("Not Connected");
}

名前付きパイプを使用したオープン接続

このオプションを使用するには、ODBC接続で完全なDSNが必要です。サーバー文字列は、Windows ComputernameとSQL ServerのInstancenameを使用して設定します。 SQL Server Native Client 10.0を使用して接続例を開きます

QString connectString = "Driver={SQL Server Native Client 10.0};"; // Driver can also be {SQL Server Native Client 11.0}
connectString.append("Server=SERVERHOSTNAME\\SQLINSTANCENAME;");   // Hostname,SQL-Server Instance
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);

if(db.open())
{
    ui->statusBar->showMessage("Connected");
}
else
{
    ui->statusBar->showMessage("Not Connected");
}

TCP / IPを使用したオープン接続

TCP / IP接続を開くには、固定ポートで接続できるようにサーバーを設定する必要があります。そうしないと、現在アクティブなポートを照会する必要があります。この例では、5171に固定ポートがあります。固定ポートの接続を1にするようにサーバーを設定する例があります。 TCP / IPを使用した接続を開くには、サーバーとポートのタプルを使用します。

QString connectString = "Driver={SQL Server};"; // Driver is now {SQL Server}
connectString.append("Server=10.1.1.15,5171;"); // IP,Port
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);

if(db.open())
{
    ui->statusBar->showMessage("Connected");
}
else
{
    ui->statusBar->showMessage("Not Connected");
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow