喫茶XRAYトップページ


[10898] FireBird 2.5 + ZeosLib 接続サンプル データベース実行時作成返信 削除
2017/2/27 (月) 22:01:39 taka
ZeosLibを使ったFireBird 2.5 の接続サンプルです。

データベースは、初回にクリックした際に作成します
Delphi2005と 10.1 starterの両方で動作確認しました

// 1. 新規プロジェクトをそのまま保存してください
//    exeの場所に データ test01.fdb が保存されます。
// 2. ZConnection1 , ZQuery1, DataSource1
//    Button1, DBGrid1 を配置し 下記のコードを貼り付けます
// 3. Button1のクリックイベントを関連付けます
// 4. ZConnection1.Protocol バージョンが違う場合は手動で修正します
// 5. 実行して、ボタンを押すと テーブル1 が表示されます。

uses ZCompatibility;


procedure TForm1.Button1Click(Sender: TObject);
  var
    db_filename : string;
    code_page   : string;
begin
  ZConnection1.Disconnect;

  db_filename := ExtractFilePath(Application.ExeName) + 'test01.fdb';
{$IFDEF UNICODE}
  code_page := 'cCP_UTF16';
{$ELSE}
  {$IFDEF FPC}
    code_page := 'cCP_UTF8';
  {$ELSE}
    code_page := 'CP943C';
  {$ENDIF}
{$ENDIF}

  ZConnection1.ClientCodepage  := code_page;
  ZConnection1.ControlsCodePage := cCP_UTF16;
  ZConnection1.Protocol  := 'firebird-2.5';
  ZConnection1.Database  := '127.0.0.1:' + db_filename;
  ZConnection1.User      := 'sysdba';
  ZConnection1.Password  := 'masterkey';
  ZConnection1.AutoEncodeStrings := False;

  if Not FileExists(db_filename) then
  begin
    with ZConnection1 do
    begin
      Properties.Clear;
      Properties.Values['dialect'] := '3';
      Properties.Values['codepage'] := code_page;
      Properties.Values['createNewDatabase'] := 'CREATE DATABASE '
                + QuotedStr(Database)
                + ' USER ' + QuotedStr(User)
                + ' PASSWORD ' + QuotedStr(Password)
  //                + ' PAGE_SIZE 4096'
                + ' DEFAULT CHARACTER SET UNICODE_FSS;';
      try
        Connect;

        ExecuteDirect('CREATE TABLE "テーブル1" ("名前" VARCHAR(100) CHARACTER SET UNICODE_FSS);');
        if Not AutoCommit then
           Commit;
        ExecuteDirect('INSERT INTO  "テーブル1" ("名前") VALUES(''緑茶'');');
        ExecuteDirect('INSERT INTO  "テーブル1" ("名前") VALUES(''紅茶'');');
        ExecuteDirect('INSERT INTO  "テーブル1" ("名前") VALUES(''珈琲'');');
        if Not AutoCommit then
           Commit;
      finally
        Properties.Values['createNewDatabase'] := '';
      end;
    end;
  end;
  if Not ZConnection1.Connected then
    ZConnection1.Connect;

  DBGrid1.DataSource  := DataSource1;
  DataSource1.DataSet := ZQuery1;
  ZQuery1.Connection  := ZConnection1;

  ZQuery1.SQL.Text := 'SELECT * FROM "テーブル1";';
  ZQuery1.Open;
end;

[10899] Re:FireBird 2.5 + ZeosLib 接続サンプル データベース実行時作成返信 削除
2017/2/27 (月) 22:14:18 taka
Properties.Values['createNewDatabase']
の値で
 CREATE DATABASE QuotedStr(ホスト名:ファイル名)
ではなく
 CREATE DATABASE QuotedStr(ファイル名)
とすると
パースし間違って、エラーで落ちます。

原因は、TZURL.SetURLのバグです

ZURL.pas : TZURL.SetURL

Delete(AValue, 1, 2);
-if (ZFastCode.Pos(':', AValue) > 0) and
+if ZFastCode.Pos('?', AValue) = 1 then
+  Delete(AValue, 1, 1)
+else if (ZFastCode.Pos(':', AValue) > 0) and

とすると直ります。

[10900] Re:FireBird 2.5 + ZeosLib 接続サンプル データベース実行時作成返信 削除
2017/2/27 (月) 22:16:25 Mr.XRAY
▼ takaさん
> ZeosLibを使ったFireBird 2.5 の接続サンプルです。

おっ ! Null さんに続き,ありがとうございます.
このコード,見通しいいですね.
ExecuteDirect がミソなのかな...

あれですね.もう少し様子みて,まだ出て来るかもしれないので,
適当な時期に Delphi Forum の方にも転載しますね.

このサイトは,該当記事に追加するのではなく,
Null さんのも含めて,この書き込みにリンクするようにしたいと思います.
少しでも,例というか,事例が多い方が,もしこれから使ってみたい人にとっては
精神的にも助けになると思います.


INCM/CMT
Cyclamen v3.82