View.Modify 方法

View 对象的 Modify 方法使用 Fetch 方法获取的已修改 Record 对象修改数据库行。

语法

View.Modify(
  action,
  record
)

参数

action

需要对数据库行执行的操作。 此操作是下表中显示的操作之一。

操作名称 含义
msiViewModifySeek
–1
刷新所提供记录中的信息,但不更改结果集中的位置,且不影响后续的提取操作。 然后,该记录可用于后续的更新、删除和刷新。 表的所有主键列必须位于查询中,并且记录中的字段数必须至少与查询一样多。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
验证已提取的记录或新记录的字段。 可以验证不完整记录的一个或多个字段。 通过调用 GetError 方法获取验证错误。 适用于读写和只读记录。 此模式不能与包含联接的视图一起使用。
msiViewModifyValidateDelete
11
验证稍后将会删除的记录。 必须首先使用同一记录调用 Fetch 方法。 如果另一行引用了此行的主键,则会失败。 验证不会检查属性或字符串中是否存在此行的主键。 不会检查某个列是否是多个表的外键。 通过调用 GetError 方法获取验证错误。 适用于读写和只读记录。 此模式不能与包含联接的视图一起使用。

 

record

必需。 通过 Fetch 方法获取的 Record 对象,其中包含已修改的字段数据。

返回值

此方法不返回值。

备注

必须在 Execute 方法之后调用此方法。

若要执行任何 SQL 语句,必须创建一个视图。 但是,不创建结果集的视图(例如 CREATE TABLE 或 INSERT INTO)不能与 Modify 方法一起用来通过视图更新表。

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