チュートリアル:VCL アプリケーションから SQLite データベースに接続する
データベースおよび LiveBinding のチュートリアル への移動
このチュートリアルでは、単純な VCL フォーム アプリケーションを使って、SQLite データベースへの接続を確立し簡単なクエリを実行する方法を説明します。
この例では Embarcadero から提供しているデータベースを使用していますが、どのような SQLite データベースでも使用できます。この例で使用するデータベースは次の場所にあります。
- Windows の場合:
C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\Data\Employees.s3db
このデータベースには、Employee という名前の 1 つのテーブルと、フィールドを持ついくつかのタプルが含まれています。ここでは、データベースに接続し、Employee テーブル内のすべてのタプルを表示します。
手順
- [ファイル|新規作成|VCL フォーム アプリケーション - Delphi]、または [VCL フォーム アプリケーション - C++Builder]を選択します。
- フォームに以下のコンポーネントを追加します。
- 2 つの TButton コントロール。[オブジェクト インスペクタ]で、ボタンの Name プロパティを「
executeButton
」と「connectButton
」に、Caption プロパティを「Execute
」と「Connect
」に、それぞれ設定します。 - 1 つの TSQLConnection コントロール。[オブジェクト インスペクタ]で、Driver プロパティを
[Sqlite]
に設定します。 - 1 つの TMemo コントロール。[オブジェクト インスペクタ]で、Name を「
outputMemo
」に設定します。 - 1 つの TSQLQuery コントロール。[オブジェクト インスペクタ]で、SQLConnection プロパティを
SQLConnection1
に設定します。
- 2 つの TButton コントロール。[オブジェクト インスペクタ]で、ボタンの Name プロパティを「
- 4.
connectButton
の OnClick イベント ハンドラに以下のコードを追加します。 - メモ: "full_path_to_your_database_file" は使用するデータベース ファイルの絶対パスに置き換えてください。
- Delphi の場合:
procedure TDemonstration.connectButtonClick(Sender: TObject);
begin
SQLConnection1.Params.Add('Database=full_path_to_your_database_file');
try
// Establish the connection.
SQLConnection1.Connected := true;
executeButton.Enabled := true;
outputMemo.Text := 'Connection established!';
except
on E: EDatabaseError do
ShowMessage('Exception raised with message' + E.Message);
end;
end;
-
- C++ の場合:
void __fastcall TDemonstration::connectButtonClick(TObject *Sender)
{
// Use double backslash in Windows Paths as the backslash character (\) must be escaped with another one to be treated literally.
SQLConnection1->Params->Add("Database=full_path_to_your_database_file");
try
{
// Establish the connection.
SQLConnection1->Connected = true;
executeButton->Enabled = true;
outputMemo->Text = "Connection established!";
}
catch (EDatabaseError& E)
{
ShowMessage("Exception raised with message" + E.Message);
}
}
- 5.
executeButton
の OnClick イベント ハンドラに以下のコードを追加します。- Delphi の場合:
procedure TDemonstration.executeButtonClick(Sender: TObject);
var
query: String;
begin
outputMemo.ClearSelection;
// A random query
query := 'SELECT * FROM Employee;';
try
// Assign the query to the object SQLQuery1.
SQLQuery1.SQL.Text := query;
SQLQuery1.Active := true;
except
on E: Exception do
outputMemo.Text := 'Exception raised with message: ' + E.Message;
end;
// Show the results of the query in a TMemo control.
ShowSelectResults();
end;
-
- C++ の場合:
void __fastcall TDemonstration::executeButtonClick(TObject *Sender)
{
String query;
outputMemo->ClearSelection();
// A random query
query = "SELECT * FROM Employee;";
try
{
// Assign the query to the object SQLQuery1.
SQLQuery1->SQL->Text = query;
SQLQuery1->Active = true;
}
catch (Exception& E)
{
outputMemo->Text = "Exception raised with message" + E.Message;
}
// Show the results of the query in a TMemo control.
ShowSelectResults();
}
- 以下は
ShowSelectResults
手続きのコードです。- Delphi の場合:
procedure TDemonstration.ShowSelectResults();
var
names: TStringList;
i: Integer;
currentField: TField;
currentLine: string;
begin
if not SQLQuery1.IsEmpty then
begin
SQLQuery1.First;
names := TStringList.Create;
try
SQLQuery1.GetFieldNames(names);
while not SQLQuery1.Eof do
begin
currentLine := '';
for i := 0 to names.Count - 1 do
begin
currentField := SQLQuery1.FieldByName(names[i]);
currentLine := currentLine + ' ' + currentField.AsString;
end;
outputMemo.Lines.Add(currentLine);
SQLQuery1.Next;
end;
finally
names.Free;
end;
end;
end;
-
-
- メモ:
procedure ShowSelectResults();
を宣言するのを忘れないでください。
- メモ:
-
-
- C++ の場合:
void __fastcall TDemonstration::ShowSelectResults()
{
TStringList* names;
TField* currentField;
String currentLine;
if (!SQLQuery1->IsEmpty()) {
SQLQuery1->First();
names = new TStringList
__try{
SQLQuery1->GetFieldNames(names);
while (!SQLQuery1->Eof) {
currentLine = "";
for (int i = 0; i < names->Count; ++i) {
currentField = SQLQuery1->FieldByName(names->Strings[i]);
currentLine = currentLine + " " + currentField->AsString;
}
outputMemo->Lines->Add(currentLine);
SQLQuery1->Next();
}
}
}
__finally {
names->Free();
}
}
-
-
- メモ: プロジェクトの Unit.h で、
void __fastcall TDemonstration::ShowSelectResults();
と宣言するのを忘れないでください。
- メモ: プロジェクトの Unit.h で、
-
- 6. アプリケーションを実行し、まず[Connect]ボタンを、それから[Execute]ボタンをクリックすると、アプリケーションは次のように表示されます。
メモ: Windows で SQLite データベースに接続するためには、ライブラリ sqlite3.dll を以下のシステム パスに置いて、アプリケーションから sqlite3.dll を見つけられるようにしてください。
- 32 ビット版 Windows の場合: C:\Windows\System32
- 64 ビット版 Windows の場合: C:\Windows\SysWOW64
使用する API
- Data.DB.TDataSet
- Data.DB.TField
- System.Classes.TStringList
- Data.SqlExpr.TSQLConnection
- Vcl.StdCtrls.TButton
- Vcl.StdCtrls.TMemo
- Vcl.Controls.TControl.OnClick