1

で blob フィールドを使用して、kbmMemTable開発元のカスタム コンポーネントを格納していTComponentます。 の読み取りおよび書き込みコンポーネント ストリーム メソッドを使用してTReader、コンポーネントを blob フィールドに読み書きします。のデータは、kbmMemTable最終的に によって作成された構造化ストレージ ファイル内に格納されGpStructuredStorageます。

コンポーネントを ( とともにkbmMemtable) 新しいアプリケーションに移動し、新しいアプリケーションに blob フィールドを読み取らせるまで、これは問題なく機能しました。最初はコンポーネントの命名エラー (コンポーネント名は既に存在します) が発生していましたが、後でコンポーネントのプロパティTReaderを読み取ろうとすると、アクセス違反が発生し始めました。TPersistent

私の知る限り、ファイルkbmMemTableからデータを取得する方法と、 . コンポーネントに変更を加えていません。また、同じテーブル内の他の BLOB フィールドに保存している他のコンポーネントに問題はないようです (少なくとも、それらを読み取ったときにエラーが発生していません)。戻る)。gpStructuredStorageTReader

何が問題なのか、私はうんざりしています。どんな助け/提案も大歓迎です。Delphi 2007 を使用しています。

4

3 に答える 3

1

別の推測。コンポーネント名が他の/異なる名前と照合されます。これを解決するには、常に他のサードパーティのユニットの後にユニットを作成してください: 例:

from: SysUtils, YourUnitClass, Classes;
to: SysUtils, Classes, YourUnitClass;

必ずコンポーネントを登録してください

initialization
  RegisterClasses([TYourComponentClass]);

finalization
  UnRegisterClasses([TYourComponentClass]);

幸運を祈る

于 2011-01-20T21:43:54.980 に答える
0

これは推測にすぎませんが、新しいアプリケーションのコンポーネント クラス定義が、ストリーミングしているコンポーネントのものと一致しないようです。

于 2011-01-20T21:08:12.907 に答える
0

ストリーミングの問題の原因をついに突き止めました-理由はわかりませんが、おそらく誰かがこの問題に光を当てることができます. 私が使用していた新しいサードパーティのコンポーネントのいくつかによって問題が発生する可能性があるかどうかを確認することにしました。見よ、スキニング コンポーネントを無効にすると (新しいアプリの改善になるはずでした!)、すべてが次のように機能しました。それは持っているべきです。無効にするということは、プログラムから削除したのではなく、圧縮されたスキンがウィンドウとコントロールの描画に使用されないようにしただけです。

于 2011-01-22T01:03:48.000 に答える