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
返回值
此方法不返回值。
备注
必须在 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 |
|
IID |
IID_IView 定义为 000C109C-0000-0000-C000-000000000046 |