Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

InterBase

InterBase に関する一般的な説明へのリンク

http://www.atmarkit.co.jp/flinux/special/ctl_rdbms/rdbms04.html

http://ja.wikipedia.org/wiki/InterBase

Firebird に関する一般的な説明へのリンク

http://ja.wikipedia.org/wiki/Firebird

http://www.lowlife.jp/cgi-bin/moin.cgi/FireBird


Apollo で InterBase を使うには InterBase か Firebird? をインストールしなければなりません。

InterBase / Firebird はクライアント/サーバ型のデータベースであり、基本的には、サーバマシンにサーバ用のソフトを入れ、クライアントマシンにクライアント用のドライバを入れて、サーバマシンとクライアントマシンをイーサーネット(LANケーブル)で繋いで使用します。(サーバとクライアントとを同じにマシンにすればローカル型のデータベースとして使うこともできる)。

Firebirdのソフトのパッケージにはサーバ用のソフトとクライアント用のソフトが両方とも入っているので、Apolloで使用する場合には、まずは、Windowsようのパッケージを使ってクライアント用のソフトをインストールする。(サーバ用のソフトも一緒にインストールされるので、ローカル型で使用することが出来るようになる)。

Windows用のパッケージは、http://www.acesekkei.com/product/firebird/index.htm から日本語版のインストーラでインストールするのがよいでしょう。「システムフォルダに FBClient.dll・gds32.dll をインストールします」というのがミソです。本家のインストーラ( http://sourceforge.net/projects/firebird )ではデフォルトではシステムフォルダにコピーしないので、インストールの途中で「コピーする」にチェックしておくか、後でsytem32ディレクトリにコピーする必要が出てきます。

* ここで、Windowsローカルでの実験をしたいな。

たけ(tk)は、最近 Mac に Firebird をインストールして、WindowsのApolloから使っています。もちろんイーサーネット(LANケーブル)で繋がっていることが条件です。

その時(2004-10-25)の記録を紹介しておきます。

(1) http://sourceforge.net/project/showfiles.php?group_id=9028 から 「Firebird-CS-1.5.1-MacOS.zip 3153246 514 PPC .zip」をダウンロードする。

(2)ダウンロードすると「ダウンロード//Firebird-CS-1.5.pkg」「Firebird SQL Database をインストール」という二つの窓がでる。

(3)その窓のうちの「Firebird SQL Database をインストール」で「続ける」のボタンを何度か押すと「正常にインストールされました」まで来る。

・・インストールはこれだけ・・。たぶん、「Macなので」超簡単。

(4)サンプルのデータベースが

'iBook-01:/Library/Frameworks/Firebird.framework/Resources/examples/employee.fdb'

にできているはずなので、それをApolloで表示してみる。

* なお、 iBook-01 というのは Windows からみた Mac のコンピュータ名です。自分の環境にあわせて適当に変更する必要があります。

* Firebird は linux や Windows にもインストールできる。Apolloと同じWindowsマシンにインストールして、ローカル風に使うこともできる。linuxやWindowsにインストールした場合には、サンプルのディレクトリは異なるので、 「find / 2>/dev/null/ | grep employee」などで捜すとよい。

require "phi"
require "rdb/dbx"

module Phi
  class Strings
    def replace(any)
      case any
      when String
        self.text = any
      when Array
        self.text = any.join("\r\n")
      when Hash
        self.text = any.collect{|arr| arr.join('=')}.join("\r\n")
      else
        any = any.to_phi_strings if any.respond_to? "to_phi_strings"
        assign(any)
      end
    end
  end
end

# 自分で決めるもの

CONNECTION_NAME = 'employee'
SERVER          = 'iBook-01:/Library/Frameworks/Firebird.framework/Resources/examples/employee.fdb'
USER            = "SYSDBA"
PASSWORD        = "masterkey"

# InterBase/Firebird であれば常に同じもの。

DEFAULT_PARAMS_FOR_INTERBASE = {
  "User_Name"     => "",
  "Password"      => "",
  "Database"      => "database.gdb",
  "DriverName"    => "Interbase",
  "BlobSize"      => "-1",
  "CommitRetain"  => "False",
  "ErrorResourceFile" => "",
  "LocaleCode"    => "0000",
  "RoleName"      =>"RoleName",
  "ServerCharSet" => "",
##  "SQLDialect"    =>"1",   # ←
  "SQLDialect"    =>"3",   # ←
  "Interbase TransIsolation" => "ReadCommited",
  "WaitOnLocks"   => "True",
}

DRIVER          = 'Interbase'
VENDOR_LIB      = "GDS32.DLL"
LIBRARY_NAME    = "dbexpint.dll"
GET_DRIVER_NAME = "getSQLDriverINTERBASE"

connection = RDB::SQLConnection.new
connection.connection_name = CONNECTION_NAME
connection.driver_name     = DRIVER
connection.vendor_lib      = VENDOR_LIB
connection.library_name    = LIBRARY_NAME
connection.get_driver_func = GET_DRIVER_NAME
connection.params.replace( DEFAULT_PARAMS_FOR_INTERBASE )
connection.params["Database"] = SERVER
connection.params["User_Name"] = USER
connection.params["Password"] = PASSWORD
connection.login_prompt = false

#-- テーブル名の一覧を見る。
puts connection.table_names
  #=> #<Phi::StringList: "COUNTRY", "CUSTOMER",
  #=>  "DEPARTMENT", "EMPLOYEE", "EMPLOYEE_PROJECT",
  #=>  "JOB", "NAME", "PHONE_LIST", "PROJECT",
  #=> "PROJ_DEPT_BUDGET", "SALARY_HISTORY", "SALES">

#-- "EMPLOYEE" テーブルを表示してみる。
table = RDB::SQLTable.new
table.connection = connection
table.table_name = "EMPLOYEE"
table.display
  #=>    EMP_NO FIRST_NAME    LAST_NAME        PHONE_EXT HIRE_DATE  ・・・
  #=> -------- ------------- ---------------- --------- ------------
  #=>        2 Robert        Nelson           250       1988/12/28  ・・・
  #=>        4 Bruce         Young            233       1988/12/28  ・・・
  #=>  ・・・
  #=>      144 John          Montgomery       820       1994/03/30  ・・・
  #=>      145 Mark          Guckenheimer     221       1994/05/02  ・・・

上のプログラムの説明:

require "rdb/dbx"

=> $(apollo)/lib/rdb/dbx.rb

connection = RDB::SQLConnection.new

=> RDB::SQLConnection

CONNECTION_NAME = 'employee'
connection.connection_name = CONNECTION_NAME

=> RDB::SQLConnection#connection_name=

DRIVER          = 'Interbase'
connection.driver_name     = DRIVER
VENDOR_LIB      = "GDS32.DLL"
connection.vendor_lib      = VENDOR_LIB

"GDS32.DLL" ファイルは msi 版の Apolloのパッケージに入っています。

"GDS32.DLL" ファイルは Firebird のWindows用パッケージに入っています。system32ディレクトリに入っている必要があるので、インストール後に確認して下さい。

$(windows)/system32/gds32.dll に入っているであろう・・。

LIBRARY_NAME    = "dbexpint.dll"
connection.library_name    = LIBRARY_NAME

"dbexpint.dll" ファイルも msi 版の Apolloのパッケージに入っています。

C:\Program Files\Borland\Delphi6\Bin\dbexpint.dll か?

C:\Program Files\Apollo\bin\dbexpint.dll にあると思います。

C:\Program Files\Apollo\bin のディレクトリ
2001/07/13  06:00           105,472 dbexpdb2.dll
2002/02/22  14:02           119,296 dbexpint.dll
2001/07/13  06:00            91,136 dbexpmys.dll
2002/03/18  06:02            92,160 dbexpmysql.dll
2002/03/18  06:02           165,376 dbexpora.dll
              5 個のファイル             573,440 バイト
GET_DRIVER_NAME = "getSQLDriverINTERBASE"
connection.get_driver_func = GET_DRIVER_NAME

??

connection.params.replace( DEFAULT_PARAMS_FOR_INTERBASE )

前のほうで定義した Phi::Strings#replace を使っています。

DEFAULT_PARAMS_FOR_INTERBASE
##  "SQLDialect"    =>"1",   # ←
  "SQLDialect"    =>"3",   # ←

SQLDialectに関しては注意が必要です。

Last modified:2005/04/05 12:00:41
Keyword(s):
References:[InterBase] [RDB::InterBase] [RDB::SQLConnection] [RDB::Session] [RubyModuleWikiName] [SQLDialect] [dbxdrivers.ini] [データベース]