Sign in Join
Wiki copytemporary

Revision 3 of 3, by WikiArchive on 11-10-2026. The page as it is now.

SQLdb Tutorial1/ja


データベースのポータル
参照: · Databases 概要 · ライブラリ · フィールドの型 · コントロール · FAQ · SqlDBHowto/ja · TSQLQuery の利用 · メモリ上で動作するデータベースの作り方 · チュートリアル/練習となる記事: · 概要 · 0 - データベースのセットアップ · 1 - 開始 · 2 - 編集 · 3 - クエリ · 4 - データモジュール · SQLdb Programming Reference/ja · 各種データベース · Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

DBGrid のプロパティ「Options」→「dgDisplayMemoText」を「(True)」に変更する。 それ以外の場合は、すべてのデータ フィールドに (MEMO) が表示される。

表示するデータの選択

接続は成功したが、データが表示されなかった。 理由は簡単である。 どのデータを返すかをデータベース サーバに伝えていない。employee.fdb データベースにはいくつかのテーブルが含まれており、確認したいテーブルを Firebird に伝えていない。 データベースの構造がわからない場合は、FlameRobin などのツールを使用して内容を表示できる。 Lazarus はそのようなツール、DataDesktop も提供する。 これは、Lazarus の /tools/lazdatadesktop/ サブディレクトリにある。 プロジェクトを保存し、プロジェクト lazdatadesktop.lpi を開いてコンパイルする。

DataDesktopが起動したときの様子

例に戻る。

テーブル「CUSTOMER」のすべてのデータを表示したいと考えている。 そのための SQL 命令は次のとおりである。

pascal
select * from CUSTOMER

このコマンドを SQLQuery1 の 'SQL' プロパティに割り当てる必要がある。 私たちのプロジェクトのソースコードでは、これは次のようになる。

pascal
SQLQuery1.SQL.Text := 'select * from CUSTOMER';

SQL 命令は一重引用符で囲む必要がある。 別のコンポーネント (Edit1.Text など) のコンテンツを割り当てることもできる。 これは必ずしも良い考えとは限らない。 SQL インジェクションの詳細については、Secure programming (より高度なテキスト) を参照のこと。

フォームの「標準」タブから「TButton」を追加する。 ユーザーがボタンをクリックすると、データの取得が開始される。 Caption プロパティを「Button1」から「Show data」に変更する。

これにはコードが必要になる。 Button1 をダブルクリックする。 次に、Lazarusは必要な手順の骨格を作成する。 ソースコードには次の行があるはずだ。

pascal
procedure TForm1.Button1Click(Sender: TObject);
    begin
    
    end;

「begin」と「end」の間に、データを表示するために必要な命令を入力する必要がある。明らかに、これは SQLQuery1 と関係がある。

SQLQuery1 の 'SQL' プロパティは、SQLQuery1 がアクティブでない場合にのみ変更できる。 そのため、最初にコンポーネントを閉じる。

pascal
SQLQuery1.Close;

次に、SQL 命令を「SQL」プロパティに割り当て、以前の SQL コマンドを上書きする。

pascal
SQLQuery1.SQL.Text := 'select * from CUSTOMER';

次に、データベースへの接続を確立し、トランザクションをアクティブにしてクエリを開く必要がある。

pascal
DBConnection.Connected := True;
    SQLTransaction1.Active := True;
    SQLQuery1.Open;

最初の 2 つの命令は 3 番目の命令によって自動的に実行されるため、省略できる。 この時点でプロジェクトをコンパイルすると、CUSTOMER」テーブルのデータがすでに表示されているはずだ。

ただし、本格的なアプリケーションでは、開いているすべてのデータベース接続が不要になったときに適切に閉じられるようにする必要がある。 そうでなければ、2次的な影響は予測できない。そこで、フォームの OnClose イベントを使用する (オブジェクトインスペクタでダブルクリックして作成する)。

pascal
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
    begin
    
    end;

接続を閉じるには、開始コードとは逆の順序を使用する。

pascal
SQLQuery1.Close;
    SQLTransaction1.Active := False;
    DBConnection.Connected := False;

DBConnection.Connected を False に設定すると、トランザクションとクエリは自動的に閉じられるため、手動で閉じる必要はない。

要約

ここまで、SQLdb パッケージを使用してデータベースに接続する方法と、テーブルの内容を画面に表示する方法を学習した。 編集などの機能をさらに追加したい場合は、SQLdb チュートリアル 2 に進まれたい。

前の手順に従った場合、コードは次のようになる:

pascal
unit Unit1; 
    
    {$mode objfpc}{$H+}
    
    interface
    
    uses
      Classes, SysUtils, IBConnection, sqldb, db, FileUtil, Forms, Controls,
      Graphics, Dialogs, DBGrids, StdCtrls;
    
    type
    
      { TForm1 }
    
      TForm1 = class(TForm)
        Button1: TButton;
        Datasource1: TDatasource;
        DBGrid1: TDBGrid;
        DBConnection: TIBConnection;
        SQLQuery1: TSQLQuery;
        SQLTransaction1: TSQLTransaction;
        procedure Button1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
      private
        { private declarations }
      public
        { public declarations }
      end; 
    
    var
      Form1: TForm1; 
    
    implementation
    
    {$R *.lfm}
    
    { TForm1 }
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SQLQuery1.Close;
      SQLQuery1.SQL.Text:= 'select * from CUSTOMER';
      DBConnection.Connected:= True;
      SQLTransaction1.Active:= True;
      SQLQuery1.Open;
    end;
    
    procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
    begin
      SQLQuery1.Close;
      SQLTransaction1.Active:= False;
      DBConnection.Connected:= False;
    end;
    
    end.

関連情報


From the Free Pascal wiki, page "SQLdb Tutorial1/ja", as the Internet Archive kept it on 2025-01-13, last changed on 2024-09-23. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.