親行が投稿されているかどうかに応じて、いくつかの子行をメモリに投稿してから、条件付きで投稿するか、基になるSQLデータベースに投稿しないようにします。完全なORMは必要ありませんが、おそらくこれだけです。
- ユーザーが[医師の追加]をクリックします。[医師の追加]ダイアログボックスが開きます。
- [医師の追加]ダイアログで[OK]をクリックする前に、ユーザーはメモリにのみ保持される1人以上の患者を追加します。
- ユーザーは、[ドクターの追加]ウィンドウで[OK]をクリックします。これで、すべての患者と新しい医師が保管されます。
- ユーザーがドクターウィンドウで[キャンセル]をクリックすると、すべてのドクターと患者の情報が破棄されます。
精神的には、delphiデータ対応コントロールとTADOQueryまたはその他のADOオブジェクトを使用して上記を実行する方法を想像してみてください。これを行うための非ADO固有の方法がある場合、私もそれに興味があります。現在のアプリケーションでMS-SQL ServerとADOを使用しているため、ADOを公開しているだけです。
そのため、私が短期間働いていた以前の雇用主にはTMasterDetail
、上記をADOレコードセットに追加するために特別に作成されたというクラスがありました。それは時々機能しました、そして他の時にはそれはいくつかの本当に興味深くそして修正するのが難しい方法で失敗しました。
VCL、またはこの手法を実行するための堅牢な方法を備えたサードパーティコンポーネントに組み込まれているものはありますか?そうでない場合、私が上で話していることはORMを必要としますか?ORMは多くの人から「悪い」と見なされていると思いましたが、上記は100万のアプリケーションで発生する可能性のある非常に自然なUIパターンです。非ADO非Delphi-db-datasetスタイルの作業を使用している場合、上記は、作成する可能性のあるほとんどすべての永続層で問題にはなりませんが、ID値を使用してリンクする主キーを持つデータベースの場合はマスター行と詳細行が画像に入り込み、事態は複雑になります。
更新:この場合、トランザクションはほとんど理想的ではありません。(コミット/ロールバックは、私の目的には粗すぎるメカニズムです。)