複数のスレッドからParadoxを扱うには? 2

解決


せいにゃ  2003-10-23 05:44:45  No: 5341

再び同タイトルで(すぐ)復活です。
一応解決の方向となっているのですが、

複数のスレッドからParadoxにアクセスしているのですが
突然スレッドが死んでしまったり、アプリ自体が死んでしまうことがあります。
特徴としては、
  ① 同じTSession、TDatabase、を複数のスレッドから使用しています。
  ② エイリアスは使用せずにDBフォルダを直接指定しています。
  ③ TSession の SessionName は明示的に設定しています。
  ④ TSession は PrivateDir、NetFileDir を指定していません。
  ⑤ データベースを更新するスレッドでは Transaction を tiDirtyRead に設定
     しています。

Delphi7(Pro)+Paradoxの環境です。

の続きなんですが、皆様のご意見をいただきたく、
セッション、データベース、データセットの各プロパティと、明示的に更新して
いる個所を以下に挙げますので、
何かお気づきになる点がございましたら、また意見をいただけると有り難いです。

セッション(TSession)プロパティ
    Active
    AutoSessionName  = False
    KeepConnection
    Name
    NetFileDir  = (未設定:今後設定していく方向で検
                                               討しています)
    PrivateDir  = (未設定:今後設定していく方向で検
                                               討しています)
    SessionName  = セッション毎に一意な固定名(※)
    SQLHourGlass
    Tag

  データベース(TDatabase)プロパティ
    AliasName
    Connected
    DatabaseName  = DB格納フォルダのフルパス(§)
    DriverName
    Exclusive
    HandleShared
    KeepConnection
    LoginPrompt
    Name
    Params
    ReadOnly    = (未設定:今後設定していく方向で検
                                               討しています)
    SessionName  = 関連付けるTSessionのSessionName
                                       (※)
    Tag
    TransIsolation  = tiDirtyRead (トランザクション使
                                      用時) または tiReadCommitted (ト
                                      ランザクション未使用時)
  
  データセット(TQuery)プロパティ
    Active
    AutoCalcField
    AutoRefresh
    CashedUpdate  = False
    Constrained
    Constraints
    DatabaseName  = 関連付けるTDatabaseの
                                       DatabaseName(§)
    DataSource
    Filter
    Filtered
    FilterOptions
    Name
    ObjectView
    ParamCheck
    Params
    RequestLive
    SessionName  = 関連付けるTSessionのSessionName
                                      (※)
    SQL    = SQL文
    Tag
    UniDirectional
    UpdateMode
    UpdateObject

以上、よろしくお願いいたします。


ゆう  2003-11-07 02:52:45  No: 5342

昔同じような事をしたことがあります。かなり頻度の高い複数スレッドで Paradox に更新してましたが、バリバリ動きました。

>  ① 同じTSession、TDatabase、を複数のスレッドから使用しています。

これは大丈夫でしょうか?スレッド間で更新時に何らかの排他をすればいいかもしれませんが、それではスレッドのメリットが薄れてしまいそうです。
完全に動作させるにはスレッドごとに別のインスタンスの Session にする必要があったと思います。
また、トランザクション時に Paradox は確か(昔の事なので記憶違いだったらすみません) PrivateDir に任意の名前の一時ファイルを作成します。このとき複数のセッション間で、同名のファイルになる可能性がありエラーになる可能性があります。よって PrivateDir はセッション毎に違うフォルダにしておく必要がありました。

1.スレッド毎に異なる Session にする
2.Session 毎に PrivateDir を個別にする

上記のようにすれば、問題なく動くと思うのですが...
現在Delphiを扱える環境でないのであまり詳しく説明できず残念ですが、少しでも参考にして頂ければと思います。


せいにゃ  2003-11-13 04:44:43  No: 5343

ゆうさん、ご意見ありがとうございました。
現在、開発先にて随時修正を加えており、まもなく暫定ですが
テスト版が完成します。そこで、ストレステストを実施して
問題が再発するかどうかを確認します。

テスト後、問題がまだ発生するようであればこのQ&A掲示板へ
書き込みしますのでよろしくお願いいたします。

レスが遅くなってしまい、申し訳ありませんでした。

今後ともよろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加