View.Modify 方法

View物件的Modify方法會使用Fetch方法取得的已修改Record物件來修改資料庫資料列。

語法

View.Modify(
  action,
  record
)

參數

action

必須在資料庫資料列上執行的必要動作。 此動作是下表所示的其中一個動作。

動作名稱 意義
msiViewModifySeek
–1
重新整理所提供記錄中的資訊,而不變更結果集中的位置,而且不會影響後續的擷取作業。 然後,記錄可用於後續的更新、刪除和重新整理。 資料表的所有主鍵資料行都必須在查詢中,而且記錄必須至少有與查詢一樣多的欄位。搜尋不能與多資料表查詢搭配使用。 請參閱備註。 此模式無法與包含聯結的檢視搭配使用。
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
驗證所擷取或新記錄的欄位。 可以驗證不完整記錄的一或多個欄位。 藉由呼叫 GetError 方法來取得驗證錯誤。 適用于讀寫和唯讀記錄。 此模式無法與包含聯結的檢視搭配使用。
msiViewModifyValidateDelete
11
驗證稍後將刪除的記錄。 必須先使用相同的記錄呼叫 Fetch 方法。 如果另一個資料列參考此資料列的主鍵,則失敗。 驗證不會檢查屬性或字串中此資料列的主鍵是否存在。 不會檢查資料行是否為多個資料表的外鍵。 呼叫 GetError 方法來取得驗證錯誤。 使用讀寫和唯讀記錄。 此模式無法與包含聯結的檢視搭配使用。

 

record

必要。 使用 修改過的欄位資料,以 Fetch 方法取得的記錄物件。

傳回值

這個方法不會傳回值。

備註

這個方法必須在 Execute 方法之後呼叫。

若要執行任何 SQL 語句,必須建立檢視。 不過,不會建立結果集的檢視,例如 CREATE TABLE 或 INSERT INTO,無法與 Modify 方法搭配使用,以透過檢視更新資料表。

msiViewModifyValidate、msiViewModifyValidateNew、msiViewModifyValidateField 和 msiViewModifyValidateDelete 值不會執行實際更新;它們可確保記錄中的資料有效。 使用這些動作需要資料庫包含 _Validation資料表

您無法從一個資料庫擷取包含二進位資料的記錄,然後使用該記錄將資料插入完全不同的資料庫中。 若要將二進位資料從某個資料庫移到另一個資料庫,您應該將資料匯出至檔案,然後使用Record物件的SetStream方法將其匯入新的資料庫。 這可確保每個資料庫都有自己的二進位資料複本。

注意

自訂動作只能新增、修改或移除資料庫中的暫存資料列、資料行或資料表。 自訂動作無法修改資料庫中的持續性資料,例如儲存在磁片上之資料庫的一部分資料。 如需詳細資訊,請參閱 從自訂動作內部存取目前的安裝程式會話

 

如果方法失敗,您可以使用 LastErrorRecord 方法來取得擴充錯誤資訊。

規格需求

需求
版本
Windows Server 2012、Windows 8、Windows Server 2008 R2 或 Windows 7 上的 Windows Installer 5.0。 Windows Server 2008 或 Windows Vista 上的 Windows Installer 4.0 或 Windows Installer 4.5。 Windows Server 2003 或 Windows XP 上的 Windows Installer
DLL
Msi.dll
IID
IID_IView定義為 000C109C-0000-0000-C000-000000000046