msiviewModify 函数 (msiquery.h)
MsiViewModify 函数更新提取的记录。
语法
UINT MsiViewModify(
[in] MSIHANDLE hView,
[in] MSIMODIFY eModifyMode,
[in] MSIHANDLE hRecord
);
参数
[in] hView
视图的句柄。
[in] eModifyMode
指定修改模式。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
刷新所提供记录中的信息,但不更改结果集中的位置,且不影响后续的提取操作。 然后,该记录可用于后续的更新、删除和刷新。 表的所有主键列都必须位于查询中,并且记录的字段数必须至少与查询一样多。 Seek 不能与多表查询一起使用。 此模式不能与包含联接的视图一起使用。 另请参阅备注。 |
|
刷新记录中的信息。 必须先使用相同的记录调用 MsiViewFetch 。 对于已删除的行失败。 适用于读写和只读记录。 |
|
插入记录。 如果存在包含相同主键的行,则会失败。 对于只读数据库失败。 此模式不能与包含联接的视图一起使用。 |
|
更新现有记录。 仅限非主密钥。 必须先调用 MsiViewFetch。 对于已删除的记录失败。 仅适用于读写记录。 |
|
将游标中的当前数据写入表行。 如果主键与现有行匹配,则更新记录;如果两者不匹配,则插入记录。 对于只读数据库失败。 此模式不能与包含联接的视图一起使用。 |
|
在表中更新记录,或者删除再插入记录。 必须先使用相同的记录调用 MsiViewFetch 。 如果主键未更改,则更新记录。 如果主键已更改,则删除旧行并插入新行。 对于只读数据库失败。 此模式不能与包含联接的视图一起使用。 |
|
插入或验证表中的记录。 如果主键与任何行都不匹配,则插入记录;如果存在匹配项,则验证记录。 如果记录与表中的数据不匹配,则会失败。 如果存在包含不同重复键的记录,则会失败。 仅适用于读写记录。 此模式不能与包含联接的视图一起使用。 |
|
从表中删除行。 必须先使用相同的记录调用 MsiViewFetch 函数。 如果已删除行,则会失败。 仅适用于读写记录。 此模式不能与包含联接的视图一起使用。 |
|
插入临时记录。 信息不是永久性的。 如果存在包含相同主键的行,则会失败。 仅适用于读写记录。 此模式不能与包含联接的视图一起使用。 |
|
验证记录。 不会跨联接验证。 必须先使用相同的记录调用 MsiViewFetch 函数。 使用 MsiViewGetError 获取验证错误。 适用于读写和只读记录。 此模式不能与包含联接的视图一起使用。 |
|
验证新记录。 不会跨联接验证。 检查重复键。 通过调用 MsiViewGetError 获取验证错误。 适用于读写和只读记录。 此模式不能与包含联接的视图一起使用。 |
|
验证已提取的记录或新记录的字段。 可以验证不完整记录的一个或多个字段。 通过调用 MsiViewGetError 获取验证错误。 适用于读写和只读记录。 此模式不能与包含联接的视图一起使用。 |
|
验证稍后将会删除的记录。 必须先调用 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后,可以立即使用记录调用MSIMODIFY_UPDATE或MSIMODIFY_DELETE,前提是未修改插入或已查询记录的第 0 个字段。
若要执行任何 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 |
Library | Msi.lib |
DLL | Msi.dll |