Interbase And IBX F.A.Q. And Tutorials
常にここからダウンロードできます。米Borland社CodeCentral(英文).
(訳注: IBX自体については、InterBase Expressの概要をご覧ください。ダウンロードにはユーザ登録が必要です(無料)。また、ここでIBConsoleの最新版もダウンロードできます)
BDEの振る舞いとは逆で、IBXのRefreshメソッドはカレントレコード(データセットカーソルに位置づけられている場所) だけをリフレッシュします。それはネットワーク負荷を最小限にするためです。 もし1レコードよりも多くのレコードをリフレッシュしたい場合には、データセットを クローズして、再オープンしてください。
IBX内でRecordCountはどのように動作しているのですか?
Recordcountはフェッチ済みのレコード数を返します。 IBXはなにがしか次のレコードの要求があったときに、新しい行をフェッチ するので、データセットのオープン直後、データセットが空ならば RecordCountは0を返すでしょうし、そうでなければ1を返します。 FetchAllの後は(それを実行することは得策ではないが)RecordCountは データセットのトータルのレコード数を返します。
IBXでは, RecordCountを何レコードが存在するかの頼りとして つかってはいけません。なぜならそれはParadoxとDBaseの場合にしか 信頼できないからです。 もし本当にデータセット内のレコード数を知る必要がある場合は "SELECT COUNT(*)"を別のTIBSQLで発行することで、ほとんどの場合 FetchAllのオーバーヘッド無しで、知ることができます。
DBLookUpComboBoxをTIBQueryへ接続したとき, ドロップダウンリストに ちょうど一レコードだけしか見えないのはなぜですか?
また言及しますが、IBX は次のレコードの要求が実際にあったときにだけに、新しい行をフェッチ します。DBLookupComboの場合でも、ドロップダウンリストを埋めるのをトライする前段階で、 ドロップダウンエリアの大きさを測るために、RecordCountに不正に頼っていることになります。 (前の質問を見てください。)
これを解決するには、コンボのAfterOpenイベント内で、 以下のことを行うだけです。(少なくとも扱えるレコードを強制的にフェッチすることにより、 RecordCountの値を増します)
With (Sender as TDataset) do begin MoveBy(MyDBLookupCombo.DropDownCount); First; end; |
短い答え: TIBTableはC/S(クライアントサーバーシステム)にむいておらず、 ただコンパチビリティのためだけにIBXに含まれています。 TIBDataSetでそのまま置換できます。
MySpaceのコードは、ディアブル上位8
それほど短くはない答え: TableのパラダイムはParadoxのようなファイルベースのDBから来ています。 基本的にはテーブルはどこにあろうとも、全ての行、カラム(そして 通常全てのインデックス情報も)ローカルに持ってこられて、そして (BDEのような)SQLエンジンがデータと共に動作できます。 全てのデータはローカルに取り出されることになるわけですが、 どのみちTTableはそうした環境でよりよく動作するように デザインされているわけです。
C/S(クライアント・サーバ)のパラダイムでは、サーバーに必要な データを選択して取り出させ、ユーザーが必要とするデータ だけを戻します。つまり(訳注:IOWはIn Other Wordsの略、 チャット用語)、5列の内の3列だけとか、100万行の内の100行 だけとかを取り出すかもしれないわけです。 TTableのパラダイムではネットワークはあふれるだろうし、 C/Sの世界には全く不向きなのです。
TIBDatasetでは、取り出そうと思っているデータを SELECTするSQLを書き込んで、右クリックし、DataSet Editorを 選択すると、InsertSQL、ModifySQL、DeleteSQL、RefreshSQLを 簡単に作成できます。一度、これらを設定してしまえば 結果セットは完全に更新可能となります。TIBDatasetは、 スピードやネットワークトラフィック、メモリー使用など において、Tableベースのパラダイムと比較してより安上がりです。
最初に、トランザクション分離レベルがRead Committedであるかどうか 確認してください。 もしSnapshot(インターベースのデフォルト)であれば、 常にデータの一貫性のあるビューを取得することができます。例えば、 他のユーザからの変更を見ることはないでしょう。 ヒント: トランザクション分離レベルをRead Committedに変更するためには、 TIBTransactionコンポーネントをダブルクリックしてください。
次に、アプリケーションで, 更新の後にCommitRetainingまたはCommitのどちらかを使って、 トランザクションが実際にコミットされたことを確認してください。
最後に、他のユーザが更新を行ったときに、 データセットがすでにオープンしていたならば、 あなたがそれらの変更をみるのは、データセットを クローズして再オープンするか、 Refreshメソッドを呼んで、更新されたレコードが あなたの見ているカレントレコードになってからからです。
短い答: それはIBXのノーマルな振る舞いです。 DBをオープンしたままにするにはCommitRetainingかRollbackRetainingを使ってください。
短くない答え: IBXでは、CommitまたはRollbackを呼ぶと、 クライアントのトランザクションハンドルの消滅をもたらします。 その結果、トランザクションに依存したすべての事柄は修正の 必要があり、さもなければそれらは無効になります。 トランザクションなしでは、インターベースはあなたに対して どのバージョンをみせるべきかを知ることができません。 すなわち、あなたの分離モードをReadCommittedにするか Snapshotにするべきか、わからないのです。
ここにはトランザクションに依存する2つの本質的な事柄があります。 1) いかなる変更もサーバにポストされる。 2) いかなる変更も一般的に「カーソル」を開く。
インターベースのカーソルは、SELECT文を実行後に戻ってきた 複数のレコードです。 あなたはカーソル内のレコードが空になるまで、フェッチ要求をすることにより カーソルとやりとりを行います。 すべてのオープンしたカーソルは現在のトランザクションハンドルに依存し、 もしトランザクションが終了した場合には、カーソルは無効になります。
入力する方法をABC極端な家庭模様替え
そのためあなたがCommit又はRollbackをコールしたときにIBXは、 無効カーソルのエラーを避けるために、あなたがオープンしたデータセットを すべてクローズします。 これはIBXが、BDEやIBOが行うのと同じようにデータセットのオープンと トランザクションの終了間に分離性を提供するレイヤ、ではないためです。
もしデータセットをオープンしたままにしたければ、データセットの クローズを避けるために、CommitRetainingか、 RollbackRetainingを処理(更新)の論理単位処理ごとに使用することをお勧めします。 さらにCommitとRollbackの使用を、サーバーがガベージコレクションやその他の処理を行える 状態にしたいと思ったとき用に、とっておくことをお勧めします。 and that you reserve the usage of Commit and しかしながら、「ハードな」CommitまたはRollbakはできるだけ頻繁に行うべきです。 (訳注: じゃどうすればいいんだよ(笑)結局これらの事実をふまえてCommit, Rollbackしろということか...)
この振る舞いは、TDataset levelのせいです。 あなたがEditモードに入ったとき(またはUpdateを適用したとき) DataLinkはカーソルがリポジションされたメッセージを受けます。 このメッセージは詳細側にクローズと「新しい」ポジションでのリオープン のクエリをおこすでしょう。 このことをストップさせる唯一の方法は、DataLinkを破棄することです。 マスター側の更新を適用する前に、詳細側のデータソースをnilにセットしてください。
現在2つの会社がInterBaseのオープンソースリリースを提供しています。 すなわちBorlandとIBPhoenixです。
それはあなたの選ぶ製品と会社によります。
- ボーランドからインターベース
ボーランドは現在2つのタイプのインターベースをリリースしています。オープンソースバージョンはまったくのフリーで、商用の開発や運用に使えます。しかしながらボーランドはオープンソースバージョンに対してはサポートを行っていません。
商用バージョンはサーバーとクライアントに有償のライセンスが必要ですが、オープンソースにはない追加の機能、例えばレプリケーションエンジンやODBCドライバ等々、が含まれています。
ボーランドは次のドキュメントResponse to Recent Inquiries(リンク切れ) ポストしていてそれに2つのタイプのインターベース違いに質問・回答があります。
- IBPhoenixからFirebird
Firebirdはボーランドからリリースされたインターベースのソースを元にしたオープンソースプロジェクトです。 Firebirdは現在安定していて、何のライセンス料も求められないフリーなインターベースです。
IBPhoenix はFirebirdの手助けをしている団体です。 IBPhoenixはFirebirdの新しいリリースを提供し、Firebirdと InterBaseの両方の商用サポートオプションを提供しています。
次の有用なインストール情報サイトで見つかるでしょう。
Linux/Unix用:
Windows用:
ボーランド提供のこの記事(英文)を読んでください。この記事に追記すると、CSはSMPをサポートし、一方SSはサポートしていません。 しかしながら このことはそう遠くない
将来に変更されるでしょう。
プログラムはrobienia sieciを行う
クラシックサーバ:
クラシックサーバは通常inetdまたはxinetdにより自動的に起動され、特別になにかする必要はありません。
スーパーサーバ:
次のスクリプトを使ってください。Installing InterBase to start automatically and run as a service under Linux (英文) 一度サーバーが起動したら、次の記述で停止できます。 "/etc/rc.d/init.d/ibserver stop" そして次の記述でリスタートできます。 "/etc/rc.d/init.d/ibserver sart".
Get the InterBase 6.0 ドキュメントセットは (10.04 mb, PDF) 以下のところから入手できます。Interbase Documentation page(英文) β版ですが、内容は十分に理解でき、ダウンロードの価値はあります。
ボーランドによると このドキュメントのファイナルバージョンは近日リリース予定です。
(訳注: といわれていましたが、結局ファイルバージョンはリリース版にしか付属しないようです。日本のボーランドから3万円でマニュアルセットが販売されていますInterBase - 価格一覧 を参照ください。木村が読んだ範囲では、β版のマニュアルは結構間違いがたくさんあります)
通常以下のエラーがでます。 :
Cannot attach to services manager.
Services functionality will be supported in a later version of the product.
これはサービスIBConsoleで使われているサービスAPIが スーパーサーバでしかサポートされていないためです。
そのためクラシックアーキテクチャでは使用することができません。 インターベースの違う管理者ツールをIBphoenixの次のところから試してみてください。 Contributed Downloads
ユーザ名は「SYSDBA」でパスワードは「masterkey」 パスワードの変更(大文字・小文字は区別します) はインストール後に最初におこなうことです。
もしあなたがSQL Linkをつかっているのであれば、答えは「いいえ」です。現在のインターベース6用のSQL LinkはDialect3をサポートしていません。しかしながら、IB6のDialect1データベースには接続することができます
今のところはDialect 3を扱えるODBCドライバをBDEと一緒に 使うか、Delphi6と同時にリリースされるべき新しいSQL Linkドライバを待ったほうがよさそうです。
実のところ、いくつかあります。以下のサイトをチェックしてみてください。IBPhoenixの list of interface components や、インターベースアンオフィシャルサイト(Claudio Valderrama)のPackages and Utilities list
ポピュラーな選択は EasySoft のODBCドライバで、これはボーランドから発売されている商用版のバージョン6や6.5に添付されています。
インターベースは非ANSI標準のLIMIT / TOP述語をサポートしていません。 (訳注: LIMIT句はMySQLやPostgreSQL等で、TOP句はMS SQL Server等でサポートされている SELECTによる結果セットを制限する手段) しかし、選択可能で、渡した数値分繰り返した後抜けるようなストアドプロシジャを作成することができます。
そのためには、次のサンプルを少し直す必要があります。 それはあなたを正しい方向に導きます。 :
(訳注: FireBird 1.0ならばストアドプロシジャをつかわなくても、 FIRST / SKIP述語を使って同機能を実現することができます。またBorlandのInterBase 6.5以降ではROW句という機能がついていて、これはほぼMS SQL Serverと同等の指定ができるようです。(パーセント指定やTIESが使えます))
- CHAR型のフィールドを宣言し、CHECK制約を使って入力できる値を制限してください。
例1:
CHAR(1) CHECK (VALUE IN ("Y", "N")) NOT NULL;
- 上記と似ていますが、新規につくる データの再利用をさらに簡単にするために、 データベースにドメインをつかって グローバルデータタイプを作成できます。
例2:
CREATE DOMAIN YESNO AS CHAR(1) CHECK (VALUE IN ("Y","N")) NOT NULL;
インターベース6にはユーザ定義関数(UDF)の すぐに使えるライブラリが付属しています。 UDFはWindows版ならば
Linux/Unixシステム用にすることは以下のとおりです:
- InterBase binディレクトリを変更してください:
cd /opt/interbase/bin - isqlユティリティを使って、あなたのデータベース上でib_udf.sqlスクリプトを 実行してください:
./isql /path/to/yourdb/yourdb.gdb -i /opt/interbase/examples/ib_udf.sql
Windowsシステム用には以下のとおりです:
- IBConsoleかIB管理者ツールを用いて、データベースに接続してください。
-
¥examples¥udfにあるib_udf.sqlスクリプトを実行してください。
これでUDFはあなたのデータベースで使えるようになりました。 もしあなたにご自分の関数を作成するプランがあるならば、次のチュートリアルを参照してください:
パニックに陥らないでください(^_^) 次のサイトにポストされた膨大な数のInterBase / IBXニュースを サーチすることができます。
まだ見つからない? 本ドキュメントの先頭にリストされたフォーラムか、または Borlandによって運営されている適切なニューズグループに質問をポストしてください。 (訳注: Borlandが主催しているニューズグループではInterBaseの質問しか受け付けてくれません。 FireBirdの質問をするとたしなめられて次のニューズグループを参照しろといわれます。 日本のメーリングリストとしては次のものがあります。 前者は一応Linux/FreeBSDのInterbase用メーリングリストですが、Firebirdのことを聞いても怒られないようです(Windows版のことを聞いたら怒られるでしょう)。逆に後者はFirebirdのことだけを聞かないと怒られるでしょうね。)
その場合ニュースグループのガイドラインに従ってください。クロスポストやマルチポストを行ってはいけません。 メッセージをポストする場合は、 必ず最も適切なグループの一つにしてください。
このドキュメントを編成してメンテナンスしているのは メキシコの明るく日が照るNuevo Laredo出身の ジョージ・アルヴァレス(Jorge Alvarez)です。 貢献、間違い訂正、コメントは歓迎しますし、勇気づけられます。
0 コメント:
コメントを投稿