0

解放できないデータ モジュールがあります (おかしいかもしれませんが)。手動で破棄しようとしても、別のコンポーネント ( Application.

exception class   : EAccessViolation
exception message : Access violation at address 0048FC2B in module 'Instruments.exe'. Read of address 80808088.

main thread ($1e28):
0048fc2b Instruments.exe System.Classes    TComponent.RemoveNotification
00408a01 Instruments.exe System         57 @Halt0
00ac86f0 Instruments.exe Instruments    82 initialization

このデータ モジュールには、一連のTADOxxxコンポーネントに加えて、 two TJvDataSource、 one TApplicationEvents、 one TClientDataSet、および oneが含まれていTJvAppDBStorageます。そのコードには、ADO 接続を開く、いくつかのレコードをテーブルに書き込む、いくつかのクエリを実行するなど (何も変わったことはありません) しか含まれていません。上記以外のコンポーネントは所有していません。この偽の電話がどこから発信されているのか、私は困惑していRemoveNotificaion()ます。何か案は?

アップデート

を削除した後TJvAppDBStorage、データ モジュールを破棄できます。コンポーネントのプロパティは次のとおりです。

object AppStorage: TJvAppDBStorage
  StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
  StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
  DataSource = dsConfiguration
  KeyField = 'Key'
  SectionField = 'Section'
  SubStorages = <>
  ValueField = 'Value'
  Left = 272
  Top = 304
end

使ったことある人いJvAppDBStorageますか?これは正常予想される動作ですか?

4

1 に答える 1

2

経験はありませんがJvAppDBStorage、何が起こっているのか推測できます。

このコンポーネントは、インスタンスのDataSourceプロパティで指定されているように、設定をデータベースに保存します。JvAppDBStorageあなたの場合、それはdsConfigurationです。したがって、これがすべて機能するためには、設定の読み取りと書き込みのdsConfigurationたびに使用可能である必要があります。それを保存しようとすると、すでに破壊されているに違いありAppStorageません。私はそれが解放されたときに起こることを期待しています。したがって、問題の説明は、の前に解放されるということです。dsConfigurationAppStorageAppStoragedsConfigurationAppStorage

解決策は、解放されたdsConfigurationときにそれがまだ生きていることを確認することです。AppStorage

于 2013-03-18T13:35:06.763 に答える