View.Modify メソッド

View オブジェクトの Modify メソッドは、Fetch メソッドによって取得された変更後の Record オブジェクトを使用して、データベース行を変更します。

構文

View.Modify(
  action,
  record
)

パラメーター

action

データベース行に対して実行される必須のアクション。 このアクションは、次の表に示すアクションのいずれかです。

操作名 説明
msiViewModifySeek
–1
結果セット内の位置を変更せず、かつ後続のフェッチ操作に影響を与えずに、指定されたレコード内の情報を最新の情報に更新します。 その後、レコードは、後続の Update、Delete、Refresh に使用できます。 テーブルのすべての主キー列がクエリに含まれている必要があり、レコードにはクエリと同数以上のフィールドが必要です。Seek は、複数テーブル クエリでは使用できません。 解説を参照してください。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyRefresh
0
レコード内の情報を最新の情報に更新します。 最初に、同じレコードを使用して Fetch メソッドを呼び出す必要があります。 削除された行では失敗します。 読み取り/書き込みレコードと読み取り専用レコードの両方で機能します。
msiViewModifyInsert
1
レコードを挿入します。 同じ主キーを持つ行が存在する場合は、失敗します。 読み取り専用データベースでは失敗します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyUpdate
2
既存のレコードを更新します。 非主キーのみ。 最初に、同じレコードを使用して Fetch メソッドを呼び出す必要があります。 削除されたレコードでは失敗します。 読み取り/書き込みレコードでのみ機能します。
msiViewModifyAssign
3
カーソル内の現在のデータをテーブル行に書き込みます。 主キーが既存の行と一致する場合は、レコードを更新し、一致しない場合は、挿入します。 読み取り専用データベースでは失敗します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyReplace
4
レコードを更新または削除し、テーブルにレコードを挿入します。 最初に、同じレコードを使用して Fetch メソッドを呼び出す必要があります。 主キーが変更されていない場合は、レコードを更新します。 主キーが変更された場合は、古い行を削除し、新しい行を挿入します。 読み取り専用データベースでは失敗します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyMerge
5
テーブル内のレコードを挿入または検証します。 主キーと一致する行がない場合は、挿入し、一致がある場合は、検証します。 レコードがテーブル内のデータと一致しない場合は、失敗します。 同じではない重複するキーを持つレコードがある場合は、失敗します。 読み取り/書き込みレコードでのみ機能します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyDelete
6
テーブルから行を削除します。 最初に、同じレコードを使用して Fetch メソッドを呼び出す必要があります。 行が削除された場合は、失敗します。 読み取り/書き込みレコードでのみ機能します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyInsertTemporary
7
一時レコードを挿入します。 情報は永続的ではありません。 同じ主キーを持つ行が存在する場合は、失敗します。 読み取り/書き込みレコードでのみ機能します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyValidate
8
レコードを検証します。 結合間では検証しません。 最初に、同じレコードを使用して Fetch メソッドを呼び出す必要があります。 GetError メソッドを使用して検証エラーを取得します。 読み取り/書き込みレコードと読み取り専用レコードで機能します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyValidateNew
9
新しいレコードを検証します。 結合間では検証しません。 重複するキーをチェックします。 GetError メソッドを呼び出して検証エラーを取得します。 変更値を使用して MsiDatabase.OpenView メソッドを呼び出す必要があります。 読み取り/書き込みレコードと読み取り専用レコードで機能します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyValidateField
10
フェッチされたレコードまたは新しいレコードのフィールドを検証します。 不完全なレコードの 1 つ以上のフィールドを検証できます。 GetError メソッドを呼び出して検証エラーを取得します。 読み取り/書き込みレコードと読み取り専用レコードで機能します。 このモードは、結合が含まれているビューでは使用できません。
msiViewModifyValidateDelete
11
後で削除されるレコードを検証します。 最初に、同じレコードを使用して Fetch メソッドを呼び出す必要があります。 別の行がこの行の主キーを参照している場合は、失敗します。 検証では、この行の主キーがプロパティまたは文字列に存在するかどうかをチェックしません。 列が複数のテーブルへの外部キーである場合は、チェックしません。 GetError メソッドを呼び出して検証エラーを取得します。 読み取り/書き込みレコードと読み取り専用レコードで機能します。 このモードは、結合が含まれているビューでは使用できません。

 

record

必須。 Fetch メソッドによって取得され、変更後のフィールド データが含まれている Record オブジェクト。

戻り値

このメソッドは値を返しません。

解説

このメソッドは、Execute メソッドの後で呼び出す必要があります。

SQL ステートメントを実行するには、ビューを作成する必要があります。 ただし、CREATE TABLE や INSERT INTO など、結果セットを作成しないビューは、Modify メソッドと共に使用して、ビューを通じてテーブルを更新することはできません。

Modify メソッドの msiViewModifyValidate、msiViewModifyValidateNew、msiViewModifyValidateField、msiViewModifyValidateDelete の各値は、実際の更新を実行せず、レコード内のデータが有効であることを確認します。 これらのアクションを使用するには、データベースに _Validation テーブルが含まれている必要があります。

バイナリ データが含まれているレコードを 1 つのデータベースからフェッチしてから、そのレコードを使用してデータをまったく異なるデータベースに挿入することはできません。 バイナリ データを 1 つのデータベースから別のデータベースに移動するには、Record オブジェクトの SetStream メソッドを使用して、データをファイルにエクスポートしてから、それを新しいデータベースにインポートする必要があります。 これにより、各データベースがバイナリ データの独自のコピーを持つようになります。

注意

カスタム アクションでは、データベースに対して一時的な行、列、またはテーブルを追加、変更、または削除することのみが可能です。 カスタム アクションでは、データベース内の永続的なデータを変更することはできません (例えば、ディスクに保存されているデータベースの一部であるデータなど)。 詳細については、「カスタム アクション内から現在のインストーラー セッションにアクセスする」を参照してください。

 

メソッドが失敗した場合は、LastErrorRecord メソッドを使用して拡張エラー情報を取得できます。

必要条件

要件
バージョン
Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー
[DLL]
Msi.dll
IID
IID_IView が 000C109C-0000-0000-C000-000000000046 として定義されている