かなり的外れな質問かもしれませんが、皆様よろしくお願いいたします。
当初、DBにはMSACCESSを使用し、ADOにて接続を行っておりました。
・データ件数が増加した場合のパフォーマンス
・スレッド処理による同時書込発生時のDBの安全性
などの懸念から、DBをFireBirdに移行することにしてみました。
ACCESSで行っていたことは
フォームにADOConnectionとADOQueryを二つ配置し、
起動時にデータ一覧表示のため、ADOQuery1のSQLにSELECT文を発行して表示。
データ登録のため、別のADOQuery2にINSERT文を発行。
以下データ登録を繰り返しても、起動時に開いたADOQuery1はデータ一覧を希望
通り表示したままでした。
移行にあたり、動作確認をおこなったところ、
フォームにIBDatabaseとIBTransactionをIBQueryを二つ配置し、同じ処理を行い
ましたが、FireBirdでは、Query2にてINSERT文を発行すると、Query1で開いてい
るデータ一覧の表が閉じてしまいます。
閉じた後にOpenすれば再度表示されますが、バックグラウンドでINSERT文を発行
するため、データを参照していると、突然最初の行に戻されることになり全く使
えません・・・
なんとかして、ADOのように接続を維持することはできないでしょうか?
よろしくお願いいたします。
IBを使っていますが、閉じることはありませんよ。
--
〒760-0080 香川県高松市木太町1730-17
瀬戸電測有限会社
太田寛
TEL 087-836-4066
FAX 087-816-0007
> フォームにIBDatabaseとIBTransactionをIBQueryを二つ配置し、同じ処理を行い
> ましたが、FireBirdでは、Query2にてINSERT文を発行すると、Query1で開いてい
> るデータ一覧の表が閉じてしまいます。
データペースに対して、登録を行う場合、Transaction.commitを使いますが。
(Commitは自動的に発行されているかもしれません)
これを行うと、同一のIBTrnsactionを参照しているDatasetが閉じてしまいます。
閉じないようにするには、次の方法が考えられます。
方法その1
Transaction.CommitRetainを使う。(Commit後もDatasetは、閉じません)
方法その2
IBDatabaseは一つでいいのですが、IBTransactionをIBQueryに1対1で対応させ
IBQueryの数だけIBTransactionを配置します。
そうすると、Transactionが別々になりますので、他のDatasetに影響しなくなります。
複数のIBQueryにマスタ/ディテールの関係がないのであれば、
その2の方法がお勧めだと思います。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
E-Mail: yo...@wise.bz ///// 横 井 嘉 邦 /////
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> TBookmarkで位置を覚えていたら元のレコードに戻れます。
こういうのもあるののですね。
勉強になります。
> データペースに対して、登録を行う場合、Transaction.commitを使いますが。
> (Commitは自動的に発行されているかもしれません)
> これを行うと、同一のIBTrnsactionを参照しているDatasetが閉じてしまいま
す。
>
まさにこの状態と思います。
やはりそうなんですね。
> 閉じないようにするには、次の方法が考えられます。
>
> 方法その1
> Transaction.CommitRetainを使う。(Commit後もDatasetは、閉じません)
>
> 方法その2
> IBDatabaseは一つでいいのですが、IBTransactionをIBQueryに1対1で対応さ
せ
>
> IBQueryの数だけIBTransactionを配置します。
> そうすると、Transactionが別々になりますので、他のDatasetに影響しなくな
ります。
>
>
> 複数のIBQueryにマスタ/ディテールの関係がないのであれば、
> その2の方法がお勧めだと思います。
>
できました。
有難うございました。
横井 嘉邦 <yo...@wise.bz>さん:
>
> 横井です。
>
>
> > フォームにIBDatabaseとIBTransactionをIBQueryを二つ配置し、同じ処理を
行い
> > ましたが、FireBirdでは、Query2にてINSERT文を発行すると、Query1で開い