C++Builder XE3でSQLiteを使ってみた。

RAD Studio XE3 Hotfix 3によってProfessional editionでSQLiteが使えるようになったので、試してみました。

Pythonでサンプルのデータベースファイルを作成します。
作成したデータベースファイルは「C:\test\test.db」に配置しました。

#!python2.7
# -*- coding: utf-8 -*-
import sqlite3

con = sqlite3.connect(u"test.db", isolation_level=None)
con.execute(u"create table example (id integer, name varchar(20))")
con.executemany(u"insert into example values (?, ?)",
        [(1, u"Delphi XE3"), (2, u"C++Builder XE3"), (3,u"HTML5 Builder"),
         (4, u"デルファイ"), (5, u"シープラスプラス")])

c = con.cursor()
c.execute(u"select* from example")
for row in c:
    print row[0], row[1]
con.close()

チュートリアル:SQLite データベースに接続する(Delphi)の手順にしたがって操作します。

SQLConnection1のDriverプロパティを編集するときに「Driver/Connection レジストリ
ファイル ‘C:\~\dbxconnections.ini’ が見つかりません。」というエラーメッセー
ジが表示される場合は、指定された場所に空のdbxconnections.iniを作成するといいようです。

実行時に「sqlite3.dllが見つかりません。」というエラーメッセージが表示される場
合は、SQLiteのページからsqlite3.dllをダウンロードして、パスの通った場所に配置します。

実行時の画面

C++Builder XE3で記述したソースコード

void __fastcall TForm1::connectButtonClick(TObject *Sender)
{
  SQLConnection1->ConnectionName = "C:\\test\\test.db";
  SQLConnection1->Params->Add("Database=C:\\test\\test.db");
  try {
    SQLConnection1->Connected = true;
    executeButton->Enabled = true;
    outputMemo->Text = "Connection established!";
  } catch (EDatabaseError& E) {
    ShowMessage("Exception raised with message: " + E.Message);
  }
}
void __fastcall TForm1::executeButtonClick(TObject *Sender)
{
  outputMemo->Clear();
  UnicodeString query = "SELECT * FROM example;";
  TDataSet* results;
  try {
    SQLConnection1->Execute(query, NULL, results);
  } catch (Exception& E) {
    outputMemo->Text = "Exception raised with message: " + E.Message;
  }
  ShowSelectResults(results);
}
void TForm1::ShowSelectResults(TDataSet* results)
{
  if (!results->IsEmpty()) {
    TStringList* names = new TStringList();
    results->GetFieldNames(names);
    for (results->First(); !results->Eof; results->Next()) {
      UnicodeString currentLine;
      for (int i = 0; i < names->Count; ++i) {
        TField* currentField = results->FieldByName(names->Strings[i]);
        currentLine = currentLine + " " + currentField->AsString;
      }
      outputMemo->Lines->Add(currentLine);
    }
    delete names;
  }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です