フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: Firebird で データベースそのものを作成する。
DEKO
管理者
投稿数: 2691
Firebird で データベースそのものを作成する。
on: 2013/04/27 18:40 Sat

Firebird で データベースそのものを作成する方法です。

uses
..., IB, IBDatabase;

procedure FB_CreateDatabase(aPath: String; aDatabaseFile: string);
var
IBXC: TIBDatabase;
begin
IBXC := TIBDatabase.Create(nil);
try
// プロパティ設定
IBXC.LoginPrompt := False;
IBXC.DataBaseName := aPath + PathDelim + aDatabaseFile;
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF CompilerVersion >= 23.0}
IBXC.ServerType := 'IBServer'; // Add XE2 or later
{$IFEND}
{$ENDIF}

// パラメータ設定
// CreateDatabase の時のパラメータは、
// 通常の接続時のパラメータと書式が異なることに注意
IBXC.Params.Clear;
IBXC.Params.Add(Format('USER ''%s''' , ['SYSDBA' ]));
IBXC.Params.Add(Format('PASSWORD ''%s''' , ['masterke' ]));
IBXC.Params.Add(Format('PAGE_SIZE %d' , [4096 ]));
IBXC.Params.Add(Format('DEFAULT CHARACTER SET %s', ['UNICODE_FSS']));

// データベース作成
IBXC.CreateDatabase;
finally
IBXC.Free;
end;
end;

 
使い方は、

FB_CreateDatabase(ExtractFilePath(ParamStr(0)) + 'DATA', 'DATA.FDB');

 
この例だと、EXE のフォルダの DATA サブフォルダ内に DATA.FDB を新規作成します。

コメントにもありますが、CreateDatabase 時のパラメータは、通常接続時のパラメータとは異なります。
(どこかに書いた記憶があるのですが、URL を失念しました)

DEKO
管理者
投稿数: 2691
Re: Firebird で データベースそのものを作成する。
on: 2013/04/28 03:08 Sun

引用 DEKO on 2013/04/27 18:40 Sat
コメントにもありますが、CreateDatabase 時のパラメータは、通常接続時のパラメータとは異なります。
(どこかに書いた記憶があるのですが、URL を失念しました)

 
思い出しました。Delphi freeml でした。

[delphi-users:1607] IBDatabase の Open でエラー
http://www.freeml.com/delphi-users/1607/latest

 
コードが読みにくいので、こちらにも貼っておきます。

uses
..., IB, IBDatabase;

procedure TForm1.Button1Click(Sender: TObject);
const
UserName = 'SYSDBA';
Password = 'masterke';
PageSize = 4096;
CharSet = 'SJIS_0208';
var
IBXC: TIBDatabase;
DataBase: string;
begin
IBXC := TIBDatabase.Create(Self);
try
IBXC.LoginPrompt := False;
DataBase := '127.0.0.1:' +
IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) +
'DATA.FDB';
IBXC.DataBaseName := DataBase;
IBXC.Params.Clear;
IBXC.Params.Add(Format('user_name=%s',[UserName]));
IBXC.Params.Add(Format('password=%s' ,[Password]));
IBXC.Params.Add(Format('lc_ctype=%s' ,[CharSet ]));
// IBXC.Connected := True;
// IBXC.Connected := False;
IBXC.Open;
IBXC.Close;
except
on E: EIBError do
begin
if (E.IBErrorCode = 335544344) then
begin
ShowMessage('データベースを新規作成します');
IBXC.Params.Clear;
IBXC.Params.Add(Format('USER ''%s''' ,[UserName]));
IBXC.Params.Add(Format('PASSWORD ''%s''' ,[Password]));
IBXC.Params.Add(Format('PAGE_SIZE %d' ,[PageSize]));
IBXC.Params.Add(Format('DEFAULT CHARACTER SET %s' ,[CharSet ]));
try
IBXC.CreateDatabase;
ShowMessage('データベースを作成しました。');
except
on E: EIBError do
ShowMessage('データベースを作成できませんでした。' + #$0D#$0A + E.Message);
end;
end
else
ShowMessage('データベースに接続できませんでした。' + #$0D#$0A + E.Message);
end;
else
ShowMessage('データベースに接続できませんでした。');
end;
IBXC.Free;
end;

 
なんとなくですが…こっちのコードの方が親切ですね (^^;A

DEKO
管理者
投稿数: 2691
Re: Firebird で データベースそのものを作成する。
on: 2015/12/10 01:28 Thu

CREATE DATABASE のパラメータをそのまま渡すような感じです。
http://firebirdwiki.jp/webroot/?CREATE%20DATABASE

CREATE {DATABASE | SCHEMA} 'filespec'
[USER 'username' [PASSWORD 'password']]
[PAGE_SIZE [=] int]
[LENGTH [=] int [PAGE[ S]]]
[DEFAULT CHARACTER SET charset]
[<secondary_file>];

 
なので、パラメータの順序は CREATE DATABSE 文の順序で書かなくてはなりません。

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.023 sec.