msiViewModify 函式 (msiquery.h)

MsiViewModify 函式會更新擷取的記錄。

語法

UINT MsiViewModify(
  [in] MSIHANDLE hView,
  [in] MSIMODIFY eModifyMode,
  [in] MSIHANDLE hRecord
);

參數

[in] hView

檢視的句柄。

[in] eModifyMode

指定修改模式。 此參數可以是下列其中一個值。

意義
MSIMODIFY_SEEK
-1
重新整理所提供記錄中的資訊,而不變更結果集中的位置,而且不會影響後續的擷取作業。 然後,記錄可用於後續的更新、刪除和重新整理。 數據表的所有主鍵數據行都必須在查詢中,而且記錄必須至少有與查詢一樣多的欄位。 搜尋不能與多數據表查詢搭配使用。 此模式無法與包含聯結的檢視搭配使用。 另請參閱備註。
MSIMODIFY_REFRESH
0
重新整理記錄中的資訊。 必須先使用相同的記錄呼叫 MsiViewFetch 。 刪除的數據列失敗。 適用於讀寫和唯讀記錄。
MSIMODIFY_INSERT
1
插入記錄。 如果具有相同主鍵的數據列存在,就會失敗。 唯讀資料庫失敗。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_UPDATE
2
匯報 現有的記錄。 僅限非主要金鑰。 必須先呼叫 MsiViewFetch。 失敗並出現已刪除的記錄。 僅適用於讀寫記錄。
MSIMODIFY_ASSIGN
3
將數據指標中的目前數據寫入數據表數據列。 如果主鍵符合現有的資料列,則 匯報 記錄,並在不符合時插入 。 唯讀資料庫失敗。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_REPLACE
4
匯報 或刪除記錄,並將記錄插入數據表中。 必須先使用相同的記錄呼叫 MsiViewFetch 。 如果主鍵未變更,匯報 記錄。 刪除舊的數據列,並在主鍵變更時插入新的數據列。 唯讀資料庫失敗。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_MERGE
5
在資料表中插入或驗證記錄。 如果主鍵不符合任何數據列,則插入 ,並驗證是否有相符專案。 如果記錄不符合數據表中的數據,則失敗。 如果有重複索引鍵的記錄不相同,就會失敗。 僅適用於讀寫記錄。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_DELETE
6
從數據表中移除數據列。 您必須先使用相同的記錄呼叫 MsiViewFetch 函式。 如果數據列已刪除,就會失敗。 僅適用於讀寫記錄。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_INSERT_TEMPORARY
7
插入暫存記錄。 資訊不是持續性的。 如果具有相同主鍵的數據列存在,就會失敗。 僅適用於讀寫記錄。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_VALIDATE
8
驗證記錄。 不會跨聯結進行驗證。 您必須先使用相同的記錄呼叫 MsiViewFetch 函式。 使用 MsiViewGetError 取得驗證錯誤。 適用於讀寫和唯讀記錄。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_VALIDATE_NEW
9
驗證新記錄。 不會跨聯結進行驗證。 檢查重複的索引鍵。 呼叫 MsiViewGetError 以取得驗證錯誤。 適用於讀寫和唯讀記錄。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_VALIDATE_FIELD
10
驗證所擷取或新記錄的欄位。 可以驗證不完整記錄的一或多個字段。 呼叫 MsiViewGetError 以取得驗證錯誤。 適用於讀寫和唯讀記錄。 此模式無法與包含聯結的檢視搭配使用。
MSIMODIFY_VALIDATE_DELETE
11
驗證稍後將刪除的記錄。 您必須先呼叫 MsiViewFetch。 如果另一個數據列參考此數據列的主鍵,則失敗。 驗證不會檢查屬性或字串中此數據列的主鍵是否存在。 不會檢查數據行是否為多個數據表的外鍵。 呼叫 MsiViewGetError 以取得驗證錯誤。 使用讀寫和唯讀記錄。 此模式無法與包含聯結的檢視搭配使用。

[in] hRecord

要修改之記錄的句柄。

傳回值

MsiViewModify 函式會傳回下列值:

請注意,在記憶體不足的情況下,此函式可能會引發STATUS_NO_MEMORY例外狀況。

備註

MsiViewModify 函式的MSIMODIFY_VALIDATE、MSIMODIFY_VALIDATE_NEW、MSIMODIFY_VALIDATE_FIELD和MSIMODIFY_VALIDATE_DELETE值不會執行實際更新;它們可確保記錄中的數據有效。 使用這些驗證列舉需要資料庫包含 _Validation數據表

您可以使用MSIMODIFY_INSERT、MSIMODIFY_INSERT_TEMPORARY或MSIMODIFY_SEEK,只要您未修改插入或搜尋記錄的第 0 個字段,您就可以立即使用記錄呼叫MSIMODIFY_UPDATE或MSIMODIFY_DELETE。

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

您無法從一個資料庫擷取包含二進位數據的記錄,然後使用該記錄將數據插入另一個資料庫中。 若要將二進位數據從某個資料庫移到另一個資料庫,您應該將數據匯出至檔案,然後使用查詢和 MsiRecordSetStream 將其匯入新資料庫中。 這可確保每個資料庫都有自己的二進位數據複本。

請注意,自定義動作只能從資料庫加入、修改或移除暫存數據列、數據行或數據表。 自定義動作無法修改資料庫中的持續性數據,例如儲存在磁碟上之資料庫的一部分數據。 如需詳細資訊,請參閱 從自定義動作內部存取目前的安裝程序會話

如果函式失敗,您可以使用 MsiGetLastErrorRecord 來取得擴充的錯誤資訊。

規格需求

需求
最低支援的用戶端 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
目標平台 Windows
標頭 msiquery.h
程式庫 Msi.lib
Dll Msi.dll

另請參閱

一般數據庫存取函式