チュートリアル:FireDAC を使用して SQLite データベースに接続する

提供: Appmethod Topics
移動先: 案内検索

データベースおよび LiveBinding のチュートリアル への移動


このチュートリアルでは、単純な Object Pascal マルチデバイス アプリケーションを使って、SQLite データベースへの接続を確立し簡単なクエリを実行する方法を説明します。

この例で使用しているデータベースは、C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\Employees.s3db にあり、Employee という 1 つのテーブルを含んでいます。

手順

  1. 次のいずれかを選択します。
  2. フォームに以下のコンポーネントを追加します。
    1. 2 つの TButton コントロール。
    2. executeButtonEnabled プロパティを False に設定します。

    3. 1 つの TFDConnection コンポーネント。
    4. 1 つの TMemo コントロール。
      • Name プロパティを「outputMemo」に設定します。
    5. 1 つの TFDPhysSQLiteDriverLink コンポーネント。SQLite ドライバをアプリケーションにリンクするためのものです。

    この時点で、フォームは次のようになっています。

    Design.png
  3. connectButtonOnClick イベント ハンドラに以下のコードを追加します。
    • Object Pascal の場合:
    procedure TForm3.connectButtonClick(Sender: TObject);
    begin
      outputMemo.Text := '';''
      // データベース ファイルのパスを設定する
      // 'C:\Users\Public\Documents\...\Employees.s3db' を 
      // 使用する SQLite データベース ファイルの絶対パスに書き換える
      FDConnection1.DriverName := 'SQLITE';
      FDConnection1.Params.Values['Database'] :=
        'C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\Employees.s3db';
      try
        // 接続を確立する
        FDConnection1.Open;
        executeButton.Enabled := True;
        outputMemo.Lines.Add('Connection established!');
      except
        on E: EDatabaseError do
          outputMemo.Lines.Add('Exception raised with message' + E.Message);
      end;
    end;
    
    • C++ の場合:
    void __fastcall TForm1::connectButtonClick(TObject *Sender) {
      outputMemo->Text = "";
      // データベース ファイルのパスを設定する
      // 'C:\Users\Public\Documents\...\Employees.s3db' を 
      // 使用する SQLite データベース ファイルの絶対パスに書き換える
      FDConnection1->DriverName = "SQLite";
      FDConnection1->Params->Values["DataBase"] = "C:\\Users\\Public\\Documents\\Embarcadero\\Studio\\14.0\\Samples\\Data\\Employees.s3db";
      try {
        // 接続を確立する
        FDConnection1->Open();
        executeButton->Enabled = true;
        outputMemo->Lines->Add("Connection established!");
      }
      catch (Exception& E) {
        outputMemo->Text = "Exception raised with message" + E.Message;
      }
    
    }
    
  4. executeButtonOnClick イベント ハンドラに以下のコードを追加します。
    • Object Pascal の場合:
    procedure TForm1.executeButtonClick(Sender: TObject);
    var
      query: TFDQuery;
    begin
    
      query := TFDQuery.Create(nil);
      
      try
        // SQL クエリを定義する
        query.Connection := FDConnection1;
        query.SQL.Text := 'SELECT * FROM Employee';
        query.Open();
        outputMemo.Text := '';''
        // テーブルのフィールド名を追加する
        outputMemo.Lines.Add(String.Format('|%8s|%25s|%25s|', [' ID ', ' NAME ',
          ' DEPARTMENT ']));
        // テーブル内の各レコードを 1 つの行としてメモに追加する
        while not query.Eof do
        begin
          outputMemo.Lines.Add(String.Format('|%8d|%-25|%-25s|',
            [query.FieldByName('ID').AsInteger, query.FieldByName('Name').AsString,
            query.FieldByName('Department').AsString]));
          query.Next;
        end;
    
      finally
        query.Close;
        query.DisposeOf;
      end;
    
    end;
    

    メモ: FireDAC.DApt ユニットを追加する必要があります。

    • C++ の場合:
    void __fastcall TForm1::executeButtonClick(TObject *Sender) {
      TFDQuery *query;
      query = new TFDQuery(NULL);
    
      __try {
        query->Connection = FDConnection1;
        // SQL クエリを定義する
        query->SQL->Text = "SELECT * FROM Employee";
        query->Open();
        outputMemo->Text = "";
        // テーブルのフィールド名を追加する
        TVarRec args[3] = {"ID", "NAME", "DEPARTMENT"};
        outputMemo->Lines->Add(System::UnicodeString::Format("|%8s |%25s |%25s |", args, ARRAYSIZE(args) - 1));
        // テーブル内の各レコードを 1 つの行としてメモに追加する   
        while (!query->Eof) {
          TVarRec arguments[3] = {query->FieldByName("ID")->AsInteger, query->FieldByName("Name")->AsString, query->FieldByName("Department")->AsString};
          outputMemo->Lines->Add(System::UnicodeString::Format("|%8d |%-25s |%-25s |", arguments, ARRAYSIZE(arguments) - 1));
          query->Next();
        }
      }
      __finally {
        query->Close();
        query->DisposeOf();
      }
    
    }
    

    メモ: #include <FireDAC.DApt.hpp> を追加する必要があります。

  5. 次のいずれかのコマンドを選択します。
    • [実行|実行]
    • [実行|デバッガを使わずに実行]
    Runtime.png

関連項目

サンプル