内部验证

创作安装包时,可以使用 MsiViewModify 函数或 View.Modify 方法确保输入的数据在语法上正确。 有关详细信息,请参阅修改方法。 在最低级别上,数据库表的列可以存储整数(短或长)、字符串或二进制数据。 但是,安装包需要某些表中的特定整数或字符串。 这些规范保留在 _Validation 表中。 例如,File 表 的 FileName 列是字符串列,但它专门存储文件名。 因此,不仅条目应为字符串,而且还应遵循命名文件的要求。

MsiViewModify 函数一起使用的各种验证枚举值允许在不同级别进行即时验证。 MSIMODIFY_VALIDATE_FIELD 枚举可用于验证记录的各个字段。 它不验证外键。 MSIMODIFY_VALIDATE 枚举验证整行并包含外键验证。 如果要将新行插入表中,请使用 MSIMODIFY_VALIDATE_NEW 枚举来验证是否在添加有效数据以及使用唯一的主键。 如果主键不唯一,则插入失败。 如果使用验证枚举之一调用 MsiViewModify 返回错误,则可以重复调用 MsiViewGetError 来诊断问题。 MsiViewGetError 指示发生错误的列以及帮助解决问题的枚举值。 有关详细信息,请参阅 GetError 方法

还可以使用内部验证来确保其他作者在自定义表中正确输入数据。 使用自定义表名和列名作为主键,将自定义表的每个列添加到_ Validation 表中。 提供 _Validation 表的 Description 列中每个列的说明或用途。 使用 Nullable、MinValue、MaxValue、KeyTable、KeyColumn、Category 和 Set 列输入每个列的适用要求:

  • 如果列可为 Null,请输入“Y”。 否则,请输入“N”。
  • 如果列是整数列且可以包含整数范围,请使用 MinValue 和 MaxValue 列输入该范围。
  • 使用 KeyTable 和 KeyColumn 列标识外键列。
  • 对于字符串列,请指定文件名、GUID 或标识符等类别。 有关详细信息,请参阅列数据类型
  • 如果数据只能与特定数量的值相关(字符串或整数),请使用 Set 列列出可接受的值。

以下是 _Validation 表中列(除 Table、Column 和 Description 之外)的列表,如果列属于指定类型,则可以填充这些列。 (请注意,不必填写所有列。)

类型
整数 Nullable、MinValue、MaxValue、KeyTable、KeyColumn、Set
String Nullable、KeyTable、KeyColumn、Category、Set、MinValue、MaxValue
二进制 可为空、类别(类别必须为“二进制”)

 

创作环境可以使用 MSIMODIFY_VALIDATE_DELETE。 此枚举假定你想要删除该行。 不执行任何字段或外键验证。 此枚举实际上执行反向外键验证。 它检查 _Validation 表中的“已删除”行所属表的 KeyTable 和 KeyColumn 列中的引用。 如果有列将包含“已删除”行的表列为潜在的外键,它将循环访问该列,以查看是否有任何值引用“已删除”行中的值。 错误返回意味着你通过删除行破坏了数据库的关系完整性。