Module
Contents
Index 🔎︎

# 数据

在数据选项卡页面上可以定义表格属性，这些属性与表格链接的数据库有关。

定义表格使用的数据源，或者指定用户是否可以编辑数据。除了排序和筛选功能以外，还可以找到创建子窗体所需的所有属性。

要访问此命令...

打开选中表单元素的上下文菜单 - 选择 表单 - 数据选项卡

打开“数据库控件”工具栏或“数据库窗体设计”工具栏，单击窗体图标 - 数据选项卡

## 允许修改

指定是否可以修改数据。

## 允许删除

确定是否可以删除数据。

## 允许新增

指定是否可以添加数据。

## 内容

确定用于窗体的内容。内容可以是现有表格或查询（以前在数据库中创建的表格或查询），也可以利用 SQL 语句来定义。输入内容源之前，需要在内容类型中定义正确的类型。

如果在「内容类型」中选择了「表格」或「查询」，则该框中会列出选定数据库中设置的所有表格与查询。

## 分析 SQL 指令

指定是否由 LibreOffice 来分析 SQL 语句。 如果设置为 Yes（是），则可单击内容列表框旁边的 ... 按钮。此操作将打开一个窗口，您可在其中创建图形化的数据库查询。关闭该窗口后，用于创建查询的 SQL 语句将插入到内容列表框。

## 只添加数据

定义表单只允许添加新数据（是），还是也允许添加其他属性（否）。

如果将只添加数据设置为“是”，则无法修改和删除数据。

## 导航栏

指定是否可以使用底部窗体栏中的导航功能。

选项“父表单”可用于子表单。如果您为子表单选择此项，则当您把光标移到子表单时，就可以浏览父表单的记录。因为子表单是用 1:1 的关系和父表单相关联的，所以浏览功能总在父表单上执行。

## 循环

指定使用 Tab 键时的浏览方式。使用 Tab 键，可以在窗体中向前移动。如果使用 Tab 键时按住 Shift 键，则按相反的方向浏览。如果到达最后一个（或第一个）字段，再按 Tab 键，可以有多种效果。可以使用以下选项定义键控件：

选项 | 含义
默认 | 使用这个设置可以自动定义一个指向某个已有数据库连接的循环：如果表单中包含一个数据库链接，那么在默认情况下，Tab 键在退出最后一个字段时将转至下一个或前一个记录（请参阅”全部记录“）。如果没有数据库链接，则显示下一个/上一个表单（请参阅”当前页“）。
所有记录 | 此选项只适用于数据库窗体，用于浏览所有的记录。如果使用 Tab 键退出窗体的最后一个字段，则修改当前记录。
活动记录 | 此选项只适用于数据库表格，用于浏览当前的记录。如果使用 Tab 键退出表格的最后一个字段，则当前记录将被更换。
当前页面 | 退出表格的最后一个字段后，光标会跳到下一个表格的第一个字段中。这对于 HTML 表格来说是标准的移动顺序，因此，此选项对于 HTML 表格尤为重要。

## 排序

指定窗体数据的排序条件。排序条件规范遵循 SQL 规则，而不使用 ORDER BY 子句。例如，如果希望数据库的所有记录在一个字段内按升序排序而在其他字段内按降序排序，请输入 Forename ASC, Name DESC（假定 Forename 和 Name 是数据字段的名称）。

在用户模式下，可以使用窗体导航栏上的相应图标进行排序：向上排序、向下排序和排序。

## 数据源

定义窗体引用的数据源。 单击 ... 按钮，将调用打开对话框，您可以在其中选择数据源。

## 数据源类型

定义是否使用现有的数据库表格或查询作为数据源，或者是否基于 SQL 指令来生成窗体。

如果选择“表格”或“查询”，则窗体将会引用您在数据源中指定的表格或查询。如果希望创建一个新的查询或子窗体，则需要选择“SQL”选项。然后，您可以在列表内容方框中直接输入用于 SQL 查询或子窗体的语句。将基于指定的语句生成窗体。

## 筛选

输入用于过滤窗体数据的条件。过滤规范遵循 SQL 规则，但不使用 WHERE 子句。例如，如果要显示名字为 "Mike" 的所有记录，请在数据字段中键入：Forename = 'Mike'。也可以使用组合条件：Forename = 'Mike' OR Forename = 'Peter'。将显示符合任一条件的所有记录。

在用户模式下，可以通过窗体导航栏上的自动过滤和默认过滤图标来启用过滤功能。

## 链接主字段

如果要创建子窗体，请输入母窗体的数据字段，以确保母窗体与子窗体同步。 要输入多个数值，请在每个输入行后按 Shift + Enter 键。

子窗体基于 SQL 查询；更为确切的说，是位于参数查询。如果在链接主字段方框中输入一个字段名称，则该字段在主窗体中所包含的数据会被读取至在链接从字段中输入的一个变量。在相应 SQL 语句中，此变量会与子窗体引用的表格数据相比较。或者，也可以在链接主字段方框中输入此列名。

请看下面示例：

窗体基于的数据库表格，比如一个客户数据库 ("Customer")，在名为 "Cust_ID" 的数据字段中为每个客户给定一个唯一编号。在另一个数据库窗体中管理客户订单。现在您希望查看该窗体中的客户的订单。为此，您要创建一个子窗体。在链接主字段中输入客户数据库中用来明确识别客户的数据字段，即 "Cust_ID"。在链接从字段中输入接受字段 Cust_ID 数据的变量名称，比如 "x"。

子窗体应显示订单表格 (“Orders”) 中每个客户 ID 对应的数据 (Customer_ID -> x)。前提是，订单表格中的每个订单仅对应一个客户。也可以使用另一个名为 Customer_ID 的字段。但是，为了避免与主窗体中的 Customer_ID 字段混淆，可以将它命名为 Customer_Number。

现在比较“Orders”表格中的 Customer_Number 和“Customers”表格中的 Customer_ID。比较时可以使用 x 变量和以下 SQL 语句：

SELECT * FROM 订单 WHERE Customer_Number =: x（如果要该子表单显示订单表格中的所有数据）

或：

SELECT 项目 FROM 订单 WHERE Customer_Number =: x（如果要订单表格中的子表单只显示"项目"字段的数据)

您可以在数据源字段中输入 SQL 指令，或者您创建一个用于创建子窗体的相应的参数查询。

## 链接从字段

如果要创建子窗体，请输入用于存储父窗体字段中可能数值的变量。如果子窗体基于查询，请输入查询中定义的变量。如果使用数据源字段中输入的 SQL 语句来创建窗体，请输入在语句中使用的变量。可以选择任意的变量名称。如果要输入多个数值，请按 Shift+Enter 键。

如果，比如在链接主字段中指定了 Customer_ID 数据库字段为父字段，那么可在链接从字段中定义存储 Customer_ID 数据库字段值的变量的名称，数据库字段"客户编号"的值就在这个变量中读取。如果使用此变量在数据源框中指定一个 SQL 语句，则在子表单中显示相关值。

## 什么是子表格？

基于一个数据库表格或一个数据库查询创建表单。表单以一种视觉上很舒服的方式显示数据，还可以输入或编辑数据。

如果要求窗体能够引用某个表格或查询中的数据并且可以显示其他表格中的数据，则应创建子窗体。例如，子窗体可以是用于显示其他数据库表格中数据的文字框。

子窗体是主窗体的附加组件。主窗体称为“父窗体”或“主窗体”。要从一个窗体访问多个表格就需要用到子窗体。每个其他表格都需要一个自己的子窗体。

创建窗体后，可将该窗体转为子窗体。要实现这一点，请输入“设计模式”并打开“窗体导航”。在“窗体导航”中，将一个窗体（将成为子窗体）拖放到其他窗体（将成为主窗体）上。

文档的用户将无法看见带有子窗体的窗体。用户只能看到已输入数据的文档或者显示已有数据的文档。

在主窗体中指定数据字段的“链接”主字段。在子窗体中，“链接”从字段可设置为将与“链接”主字段的内容匹配的字段。

当用户浏览数据时，窗体始终显示当前数据记录。如果定义了子窗体，子窗体内容将在短暂延迟大约 200 毫秒后显示。此延迟可让您快速浏览主窗体的数据记录。如果在延迟限度内浏览下一主数据记录，则不需检索和显示子窗体数据。