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;
}
}