Firebird,Flamerobin

February 14, 2016

Firebirdのシーケンスをflamerobin, Lazarusで使用するには

シーケンスはレコードに対して自動的に連番を付与するときに使用します。
以前はGENERATORを使用してました。

※ flamerobinにてシーケンスを使用するには

1.sequence の作成 
 flamerobinの「excecute SQL statements」にて作成します。

    CREATE SEQUENCE TEST_SEQUECE;

2.取得できるかのテスト
    flamerobinの「Execute SQL statements」にて以下のステートメントで取得できます。

    select next value for TEST_SEQUECE from RDB$DATABASE

    実効ボタンをクリックするごとにインクリメントされた値が帰ってきます。
    rollbackしても元にはもどりません。 つまりcommit,rollbackには影響を受けません。

3.シーケンスの値を0に戻す

    alter sequence TEST_SEQUECE restart with 0

    次回取得すると1が返ってきます。


※ lazarusでSQLdbを使用時のシーケンス

Lazarusでデータベースコンポーネントを使用する場合、新規レコードをInsertした時に、シーケンス番号を該当項目にセットする必要があります。
なぜなら、TSQLQueryではローカルにレコードをバッファリングし、そこに複数のinsertされたレコードを格納し、ApplyUpdatesにてDBサーバに送り込むからです。 通常DBサーバ上のレコードがinsertされた時に自動インクリメントされた連番が付与されるますが、ローカルのバッファにあるときは、DBサーバにてinsertされていないため、シーケンス番号が付与されません。シーケンス番号がないとローカルバッファでは複数レコードを管理出来ないので、ローカルでレコードを一件insertする毎に、DBサーバからシーケンス番号を取得します。

具体的には以下のように TSQLクエリを作成し、Openすると次のシーケンスが入手出来る。

シーケンス(TEST_SEQUENCE)取得用、SQLQueryのプロパティ設定

  object qryTestSequence: TSQLQuery
    IndexName = 'DEFAULT_ORDER'
    FieldDefs = <   
      item
        Name = 'GEN_ID'
        DataType = ftLargeint
        Precision = -1
        Size = 0
      end>
    Database = IBConnection1
    Transaction = SQLTransaction1
    SQL.Strings = (
      'select next value for TEST_SEQUECE from RDB$DATABASE'
    )
    Params = <>
    left = 120
    top = 232
  end                         

    以下の手順でシーケンスを入手します。

  with dmTest do begin
    qryTestSequence.Open;
    Showmessage( qryTestSequence.Fields.Fields[0].AsString );
    qryTestSequence.Close;
  end;                



Flamerobin:バックアップファイルからデータベースを新規作成するには(linux)

FlamerobinではGUIでデータベースのバックアップ、リストアが行えます。

UbuntuにてFirebirdをインストールした場合は、一般ユーザ権限では、そのままリストアは行えません。

ターミナルを開いてコマンドでroot権限でflamerobinを起動します。

$ sudo flamerobin

Flamerobin_database_admin_002_3

メニュー「Database」-「Restore backup into new database...」を選択します。

Flamerobin_database_admin_003

Database pathに作成するデータベースのフルパスを指定します。

New_database_parameters_004



January 10, 2011

CentOSでFlamerobinをメニューから動くようにする

FlamerobinのRPMパッケージ版でインストールすると、アプリケーション→プログラミングのなかにFlameRobinが登録されます。

しかし、ここでは直接flamerobinが呼び出されるため、前回説明したエラーのためにflamerobinは実行されません。

そこで、メニューからflamerobinを実行出来るようにするには、次のようにします。

とりあえず、例として/home/lazarus/flamerobinに以下のファイルが配置去れてるとします。

flamerobin
fr
libstdc++.so.6 -> libstdc++.so.6.0.10
libstdc++.so.6.0.10

ここで、frは次のようにします。
---------------------------------------------------
cd /home/lazarus/flamerobin
LD_LIBRARY_PATH=.
export LD_LIBRARY_PATH
./flamerobin
---------------------------------------------------

メニューに登録するには、デスクトップ最上部のメニュー「アプリケーション」の部分にマウスカーソルを移動し、右ボタンを押し、メニューの編集を選びます。

Screenshot_3

左側のメニューのプログラミングを選択します。

Screenshot1_2

アイテムからFlameRobinを選択し、マウス右ボタンを押します。

Screenshot_2

ここで、コマンドに直接/home/lazarus/flamerobin/frと入力します。(注:参照ボタンから選択したときは、frは表示されませんので、一度flamerobinを選択してから、flamerobinをfrに修正します)

以上で、メニューからflamerobinが起動出来るはずです。

December 24, 2010

CentOSでFirebird,Flamerobinを動かすポイント

CentOSでFirebirdをインストールするには、本家からFirebird2.5をダウンロードします。

rpmファイルなら、そのままダウンロードして、インストールが出来ると思います。

さて、つぎにFlamerobinですが、こちらはちょっと厄介です。

Flamerobinを本家からダウンロードします。rpm形式のファイルもリンクが貼ってありますのでそちらでもよいでしょう。

FPCと違って、インストールは問題なくできるのですが、flamerobinを実行すると

flamerobin: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by flamerobin)

 

このようなエラーが出ます。

CentOS5.5ではlibstdc++.soには、GLIBCXX_3.4.8しか入っていません。

そこで、他のアプリのインストールの対応でも、色々な対処策がネットでは出ているようです。極端なのはこのファイルを削除してしまう方法まで?

私は、安全のたFedoraの最新版のlibstdc++.soを持ってくる方法も避けた方が良いと考えて以下の方法にしました。

  1. libstdc++をダウンロードする。(紹介されたサイトではもう既にCentOS用のファイルがなくなっていたため別のものを借用してます)
    http://fr2.rpmfind.net//linux/RPM/ASP/i386/RPMS.14/libstdc++-4.3.0-8.i386.html
  2. ダウンロードしたファイルを一時的にどこかに展開する
    $ mkdir flamerobin
    $ cd flamerobin
    $  rpm2cpio libstdc++-4.3.0-8.i386.rpm | cpio -idv
  3. /usr/bin よりローカルな場所に、 flamerobinをコピーしてくる
    $ cp /usr/bin/flamerobin .
  4. 以下のシェルスクリプトをgeditで作成(例えば、fr)
    LD_LIBRARY_PATH=.

    export LD_LIBRARY_PATH

    ./flamerobin
     

  5. 実行権限を与える
    $ chmod ug+x fr
  6. flamerobinを実行する
    $  ./fr

flamerobinでfirebirdに接続する前に、システム→管理→サーバ設定→サービスでサービスの設定ダイアログを開き、バックグラウンドサービスでxinetdがチェックされていることを確認し、オンデマンドのサービスページに切り替えて、firebirdにチェックを入れます。これで、Firebirdに接続できるはずです。

それと忘れてはいけないのが、ログイン名/パスワードです。

SYSDBAのパスワードは /opt/firebirdディレクトリのSYSDBA.passwordに入っていまる。

 

June 18, 2010

Firebird2.5のEmbedded 版は、使えそうだ。

FirebirdのVer2.5では、Embedded Serverの機能も大部強化されてるようです。

詳しくは、

http://www.mindthebird.com/download/mtbweb20100406.pdf

Embedded engine uses new architecture
Host applications may still have multiple connections to the same database
Different host applications may safely access the same database simultanously
Official utilities (gbak, gfix, etc) and 3rd party tools (DBWorkbench, IBExpert, etc) can be used in parallel with your application as wel

組込みエンジンは新しいアーキテクチャを使用しています。
 ホストアプリケーションは、同一データベースに対して、複数のコネクションを持ち続けることが出来ます。
 別々のホストアプリケーションで、同時に、同一データベースを安全にアクセスすることが出来ます。
 公式ユーティリティ(gbak, gfix他)及びサードパーティツール(DBWorkbench, IBExpert他)をあなたのアプリケーションと並行して使用することも可能です。

って、ことはflamerobinも使えるってことだよね?

June 05, 2010

Firebird Embedded Server

Firebirdの特徴として、「Embedded Server」の存在があります。

組み込み型のサーバとは? サーバというより、Firebirdのデータベースをアクセスすることのできる、ライブラリです。

Firebird-2.1.3.18185-0_Win32_embed.zip

インストールはすごく簡単です。アプリケーションと同じフォルダにいくつかのDLLをコピーし、それとサブディレクトリに少しファイルをコピーします。そして、bembed.dll を gds32.dll にリネイムします。

詳しくは、ドキュメント(英文ですが、訳はここに)を参照するか、ここここが参考になります。

ところで、Embedded Serverを何処に使うかといえば、それはパッケージソフトにするときでしょう。本格的なクライアント/サーバー型のDBMSを導入するほどではないシステムに便利ですし。当初小規模な間はEmbedded版で、規模が大きくなったC/S版にスケールアップが簡単に出来ます。

Delphiなら、Installshieldで、必要なファイルをインストールされるようにしておけばそれで済みます。できれば、通常のインストールでは、Embedded Serverをインストールし、カスタムインストールではEmbedded Serverのインストールはしないようにして、別途ユーザにFirebirdをインストールしてもらのがよいと思います。

たまに質問がありますが、FlamerobinからEmbedded版のデータベースへの接続ですが、FlamerobinはFirebirdとC/Sで接続しますので、Embedded Serverしか入ってないPCでは、データベースに接続することは出来ません。したがって、開発者のPCにはEmbedded ServerではなくC/S版をインストールするのが普通です。インストールテストするPCでEmbedded Serverを使う事になります。

May 31, 2010

Flamerobinを使う(7) シャドーデータベース

Firebirdにはシャドーデータベースを保持する機能があります。シャドーデータベースはトランザクションの単位で、元のデータベースがコピーされたものと考えることが出来ます。

ハードウェアRAIDと違って、Firebird自身がトランザクションの単位でシャドーデータベースを更新します。HDDの故障を考えるとHHDドライブを2台用意して、シャドーを別ドライブにする方法が普通です。RAIDを構築する場合に比べて低予算で作れるのが魅力です。それに、私のまわりではRAID自身結構トラブルが多いみたいです。RAIDシステムの修復に時間がかかり苦労した経験を持つ人も多いのでは。

さて、Linuxでシャドーデータベースを作成するには、一般ユーザでflamerobinを起動せずに、一度ターミナルを開いて、「su root」でスーパユーザになってから、flamerobinを起動します。次にシャドーデータベースを作成したいデータベースを開いて、「Database->Run a query」でQUERYダイアログを開きます。そして、シャドーデータベース作成のコマンドをいれます。

「CREATE SHADOW 1 AUTO '/var/lib/firebird/data/test.shd'」

コマンドの詳細は、こちらで。

パスはフルパスで入れないとエラーが出ます。

March 31, 2010

Flamerobinを使う(6) AutoInc

 Firebrid(Interbase)では、自動インクリメントするフィールドがありません。Firebirdではジェネレータとトリガを組み合わせて、レコードを挿入するとトリガを使って、自動的に特定のフィールドにジェネレータの値を代入させます。
 FirebirdやInterbaseそれにDelphiなどの解説書には、そのための例が載っていて、それを参考にジェネレータとトリガを作成した人も多いと思います。

 Flamerobinでは、テーブルのフィールド作成の時に、Autoincrement項目でCreate new generatorwを選択し、Create trigger にチェックを入れ、Executeすると自動的にジェネレータとトリガが作成されます。

例として、納品伝票でシリアル番号をAutoincrementにしたときの、Flamerobiが生成したSQL文を載せておきます。


CREATE GENERATOR "GEN_NouhinshoMaster_ID";

SET TERM !! ;
CREATE TRIGGER "NouhinshoMaster_BI" FOR "NouhinshoMaster"
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE tmp DECIMAL(18,0);
BEGIN
  IF (NEW."NouhinSerial" IS NULL) THEN
    NEW."NouhinSerial" = GEN_ID("GEN_NouhinshoMaster_ID", 1);
  ELSE
  BEGIN
    tmp = GEN_ID("GEN_NouhinshoMaster_ID", 0);
    if (tmp < new."NouhinSerial") then
      tmp = GEN_ID("GEN_NouhinshoMaster_ID", new."NouhinSerial"-tmp);
  END
END!!
SET TERM ; !!

March 24, 2010

Flamerobinを使う(5) データのexport

 Firebirdのテーブルデータをexportするには、テーブルを選択してマウス右ボタンで「Select from」メニューでSELECTダイアログを開きます。

 SELECT結果がグリッドで表示されています。必要に応じてWHERE、ORDER句
を追加して、必要なデータを、望みの順番で表示させます。

 exportされるデータは選択された領域だけになりますので、必要な領域を選択します。特定の行、あるいは列を選択する時は、行または列タイトルの部分をクリックします。また、全体を選択するにはグリッド左上隅の領域をクリックすると表全体が選択されます。

exportするには、このグリッド上でマウス右ボタンを押します。exportはクリップボードにコピーして他にペーストする方法と、ファイルとして保存する方法する2つの方法があります。

  1. COPY
    クリップボードにデータをそのままコピーします。Calcなどでペーストすると、テキストのインポートダイアログが開きデータを貼り付けることができます。geditではそのまま、データがペーストされます。
  2. COPY as INSERT statements
    クリップボードにINSERTステートメントとしてコピーされます。これをそのままプログラムのテキストに組み込んだり、プロパティにセットしたり、エディタに貼り付けて保存しSQLファイルを実行させるときに用います。
    Firebird以外のデータベースにデータを移動するときに便利です。また、LazarusのTSQLQueryのInsertSQLプロパティにセットする元テキストとしても便利です。
  3. COPY as UPDATE statements
    上記INSERTの代わりに、UPDATEでコピーされます。
  4. SAVE as HTML file
    HTMLのテーブル形式でファイルに保存されます。
  5. SAVE as CSV file
    CSVファイとして保存されます。TAB区切りの形式で保存されます。

    FlameRobinの初期設定では、「Automatically fetch all record in result set」のチェックは入ってませんので、全レコードは取り込まれていません。全レコードをexportするときはGrid→Fetch all recordsですべてのレコードを取り込みます。(データ量が非常に多いときは注意が必要です)




March 13, 2010

FlameRobinを使う(4) テーブルデータの表示、編集、追加、削除

 テーブルの作成が出来たら、データを登録したくなります。最初から既存のテーブルがありデータが入ってるときはそのままソフト開発できますが、新規の時はとりあえずテストデータを手動で登録するということはよくあります。
 また、最近ではFlameRobinのようなGUIツールによるメンテナンスが便利になりましたから、滅多にしか修正しないテーブルのデータのメンテナンスにわざわざプログラムを用意せずに、そのままFlameRobinなどで済ませてしまことも多いんじゃないでしょうか? ちなみに、私もあるソフト開発で、消費税率の登録画面については結局作るのは省いてしまいました。元号なども同じですね。登録画面を作ったところで使わないか、使っても一回だけでしょうから。

 FlameRobinでは、テーブルの表示と明らさまに分かるようなメニューはありません。でもよくよく見ればテーブル名のところで右ボタンを押すと「Select from...」ってあります。これを選択すると、そのテーブルを表示するためのSELECT文が実行されます。そのままSELECT文も表示されます。ここで表示されるのは、テーブル名のエイリアスが設定され、SELECTするフィールドも「*」ではなく、「エイリアス.フィールド名」と言う形式で全部のフィールドが表示されます。

 全部のフィールドが表示されるのは冗長のように思われるかもしれませんが、これをコピーして、プログラム開発で一部修正して使用するときに便利です。それと、エイリアスがあると、フィールド名のコード補完も出来ますので、WHERE、ORDER句を指定したり、JOINするときに便利です。

  1. データの修正
    そのまま、表示されてるデータを修正します。確定させるにはCommit(チェックマーク)ボタンを押します
  2. レコードの挿入
    挿入ボタン(テーブルに+の付いたボタン)を押します、確定させるにはCommitです。
     
  3. レコードの削除
    削除ボタン(テーブルに×の付いたボタン)を押します、確定させるにはCommitです。

補足:
 よく迷うのが日付の入力です。テーブルに既にデータが入っている時は形式が分かりますが、新規の場合は困ってしまいます。日付の形式は予め設定したおいた方が便利です。

 View→Preferencesで、Preferencesダイアログを開き、日付、時間、タイムスタンプのフォーマットを入力します。

2010031301screenshotpreferences

September 2017
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

大規模災害に備える

他のアカウント

無料ブログはココログ

Recent Trackbacks