私はDelphi6
を使用しており、ADO
DataSet
のデータモジュールを持ち、フォームAとフォームBの2つのフォームで使用されています。各フォームは、Dataset.Open()
がOnCreate
、Dataset.Close()
がOnClose
にあります。両方のフォームが同時に開いていて、formBが閉じていると、データセットはformAで閉じられます。これを防ぐには基本的に、フォームごとにデータセットのインスタンスを個別に作成する必要がありますが、同時にデータモジュールを使用する必要があります。デルファイでデータモジュールを使用する個別のデータセットインスタンス
答えて
必要なものを実現する最も簡単な方法は、各フォームのデータモジュールのインスタンスを作成し、フォームにフォームが閉じているときに、それを解放することができますので:自分のデータソース/データセットに認識してコントロールをデータをフックのためのVCLのロジックがあることを確認するために行われている空の文字列にDataModuleの者の名前を設定
var
Data: TDataModule;
begin
Data := T<YourDataModule>.Create(Self);
try
Form := T<YourForm>.Create(Self);
Form.DataModule := Data;
Data.Name := '';
except
Data.Free;
raise;
end;
Form.Show;
end;
初めて作成されたインスタンスではなく、新しく作成されたインスタンスを使用して行われます。
フォームのOnCloseハンドラ(またはそのデストラクタ)で、データモジュールを解放してください。
あなたからデータをロードするためにTClientDataSetのとTDataSetProviderを使用してデータセットをADO:そうは場合
申し訳ありませんが、私は "form.datamodule = data"という代入を理解していません。 form.datamoduleはフォームのプロパティですか? – mem100
@ mem100:「すぐに」存在するものではなく、あなた自身のフォームにそれを追加する必要があります。アプリケーション内のすべての単一フォームに対してこれを実行したくない場合は、基本フォームの作成、そのプロパティの追加、およびすべてのアプリケーションのフォームをその基本フォームから降りることを検討できます。あなたがそれについてのより多くの情報を必要とするなら、それは全く別の質問になるでしょう:...-) –
ok私は理解しますが、私は別の説明をします。フォーム上のデータソースはどうですか?データソースは、自動作成されたデータモジュール上のデータセットにバインドされます。どのようにして新しく作成されたインスタンスを使用するようにデータソースを変更するのですか?フォームを作成するイベント内で新しく作成されたインスタンスのデータセットにアクセスするにはどうすればいいですか? – mem100
おそらく、各フォームのデータモジュールとは別のインスタンスが必要です。
あなたはが本当にがフォームに両方フォームを同じDataModuleのインスタンスを使用する場合は、いくつかの参照カウント機構を追加する、DataModuleのからのデータセットを開閉する必要があります。
データセットを開くための手順と、データモジュールで閉じるための手順と、開いている呼び出しと閉じた呼び出しを数えるための整数を持つことができます。データセットを開くプロシージャは、実際に最初の呼び出し時にのみ開きます。後続の呼び出しでカウンタをインクリメントします。より近いプロシージャは、各呼び出しでカウンタをデクリメントし、カウンタ値が0に戻ったときにデータベースを閉じます。
あなたは、さまざまなデータを表示しながら、同時にフォームAとFormBから同じデータセットにアクセスしようとしています。 ClientDataSet.CloneCursorを使用してカーソルをクローンすると、同じデータに別のカーソルが表示されます。フォームに渡すか、FormAのコントロールをClientDataSetAとFormBに割り当て、ClientDataSetBのクローンに割り当てます。両方のフォームからの読み取り、書き込み、および更新により、基になるデータセットが変更され、後でDataSetProviders ApplyUpdatesを介してADOデータセットを介してデータベースに更新を適用できます。 http://www.podgoretsky.com/ftp/docs/Delphi/D5/dg/5_ds3.html それともケーリージェンソンことで本当に良い本があります:いくつかの助けのためにここに
ルックhttp://www.jensendatasystems.com/cdsbook/ (無料プラグが、それは良いの読み取りです)
あなたは私のそれから、あなたは別々のインスタンスを必要と言ったように解決策は、各フォームの宣言でDataModuleの変数を持っているだろう:
TForm1 = class(TForm)
...
private
fDatamodule : TDatamodule1;
...
end;
procedure TForm1.FormCreate(Sender : TObject)
begin
fDatamodule := TDatamodule1.Create(self);
MyDatasource.Dataset := fDatamodule.MyDataset;
end;
(Form2のなどのために繰り返す)
あなたは同じDataModuleのを持って、二回インスタンス化し、目私たちはお互いに完全に離れていますが、それぞれのフォームで同じビジネスロジックを利用しています。
件名では、データモジュールコードがいずれの形式も参照していないことを確認してください。これは悪い習慣です。
- 1. デルファイとのDLLのデータモジュール?
- 2. NSPredicateを使用する個別のオブジェクト
- 3. mongodbのこの別個のコマンドに使用するインデックス
- 4. FFMPEGを使用して個別にHLSセグメントをトランスコードする
- 5. 連結結果を個別に使用する
- 6. phpを使用してデータを個別フォーマットで表示
- 7. ロギングハンドラは個別のスレッドを使用しますか?
- 8. キャンバスを使用して個別に画像をスキューさせる
- 9. デルファイ7のリソースファイルでスキンファイル(.asz)ファイルを使用する方法
- 10. 個別のプロセスを使用するAndroidアクティビティとサービスを作成する方法
- 11. 別のアクティビティでアクセスする別個のダウンローダクラス(別スレッド)
- 12. 別の列で合計を使用する場合は、別個のIDを選択しますか?
- 13. デルファイ:別のプロジェクトで1つのプロジェクトのすべてのユニットとユニット参照を使用する方法
- 14. 個別
- 15. XQueryの個別の値を使用しながら、()
- 16. 個別のコマンド
- 17. 別個のポリモーフィックアソシエーションテーブル
- 18. ':nth-of-type'を使用すると、すべての子要素を個別に選択するのではなく、個別に選択します。
- 19. Moqを使用して別個の呼び出しを別々の引数で検証する
- 20. C#2個のコレクションの別個のアイテムをマージする
- 21. デルファイのシェルを使用してディレクトリ内のファイルをループする
- 22. タブバーごとに個別のUINavigationControllerを使用する必要があります
- 23. サブソニック用の個別のリード/ライト接続
- 24. UISegmentedControllerを使用して個別のNIB /クラスをロードする方法
- 25. C#モデルの複合型と個別のプロパティの使用
- 26. データモジュールのタブシートの1つのコンポーネントにアクセス
- 27. フレックスプロジェクトの個別のクラスをテストする
- 28. 個別のintを出力するためのCのループ用。
- 29. VSTest個々のdllを個別に実行する
- 30. デルファイを使用してプロセスの仮想サイズを決定する
データセットを静的として定義しましたか? –
データセットはデータモジュール上にあり、そのカーソルタイプはスタティックに設定されています – mem100
データモジュールはどこに作成されていますか?フォームは独自のインスタンスを作成するか、セントラルインスタンスを使用しますか? –