访问查找和 yes/no 正确的技术?
access lookup and yes/no proper techniques?
我正在 Access 中构建一个数据库,如果需要,我需要在某个时候迁移到 SQL 服务器。因此,需要避免某些访问技术(对吗?)
其中两个是布尔值和查找 table。我的理解是 yes/no 复选框不会正确迁移到 SQL 服务器,因此 VBA 是解析 0/1 真值而不是 -1/0 的更好选择传统上使用。再次提醒,如有错误请指正!
另一件事是避免在table设计中使用查找向导来限制条目。我的理解是,与数据库中实际上不存在的 table 的人为关系(或者 "hidden" 是一个更好的词)会在迁移和对这些字段的 运行 查询时导致问题.
所以我的问题是,我应该如何管理查找值?我正在考虑将 table 设计保留为常规字段,然后在 vba 表单中创建一个组合框,该组合框引用另一个 real table在我的数据库中。这是正确的技术吗?有什么我没有完全掌握的吗?还有什么我应该知道的吗?
让我们将您的问题分成两个单独的部分。 1) MS Access 和 SQL 服务器中 boolean/bit 字段之间的差异。 2) MS Access 查找字段
1) 需要特别注意 MS Access 和 SQL 服务器之间的 boolean/bit 字段,因为它们存储值的方式不同。
SQL Server: 1=True | 0=False
MS Access: -1=True | 0=False
一般来说这不是什么大问题,因为 ODBC/OLEDB 驱动程序会处理这个问题,但您可能 运行 进入要测试位字段的查询。在这种情况下,您通常应该使用:
'0' for False
'<>0' for True
2) SQL 服务器不支持 MS Access 查找字段,一般来说,在 MS Access 中也应避免使用它们。这里的想法是将数据(表格)与表示(表格)分开,这是最佳实践。构建 MS Access 表单来处理表中的所有数据,并且不使用查找字段。
如前所述,true/false 列值无关紧要,因为当您将数据移动到 SQL 服务器并继续使用 Access 时,这些值将被转换。
但是,作为一种“习惯”,您可以使用关键字 true/false。
Select * from tblCustomer where InvoicePaid = False
以上表示您不关心或不必记住使用-1或0。
所以 SQL 对 true/false 使用不同的值这一事实并不重要,因为在将数据迁移到 SQL 服务器后,上述查询将继续正常运行。
并且您应该避免在 table 设计级别使用查找列。作为一般规则,不应允许在 table 视图中编辑数据,因此这个问题再次成为一个无关紧要的问题。
对于典型的表单,组合框在大多数情况下会存储驱动组合框的 table 的第一列“PK ID”,并且还会“显示”/搜索下一列.因此,只需使用向导在表单上放置 + 创建组合框,结果 + 该组合框的功能将与使用查找列相同,但您已在幕后正确规范化 tables。此数据设置将移至 SQL 服务器并继续“按原样”工作。
所以“查找”数据在这里确实没有太大变化,唯一的问题是不能直接打开tables来编辑数据。即使在您将数据迁移到 SQL 服务器后,您的 table 现已链接,但再次强调,由于没有人直接编辑这些 table,因此不会错过查找列功能总之。
所以表单上的组合框等不需要一些查找列,而只是由向导在将此类框放在表单上时创建的 SQL 语句驱动。
我正在 Access 中构建一个数据库,如果需要,我需要在某个时候迁移到 SQL 服务器。因此,需要避免某些访问技术(对吗?)
其中两个是布尔值和查找 table。我的理解是 yes/no 复选框不会正确迁移到 SQL 服务器,因此 VBA 是解析 0/1 真值而不是 -1/0 的更好选择传统上使用。再次提醒,如有错误请指正!
另一件事是避免在table设计中使用查找向导来限制条目。我的理解是,与数据库中实际上不存在的 table 的人为关系(或者 "hidden" 是一个更好的词)会在迁移和对这些字段的 运行 查询时导致问题.
所以我的问题是,我应该如何管理查找值?我正在考虑将 table 设计保留为常规字段,然后在 vba 表单中创建一个组合框,该组合框引用另一个 real table在我的数据库中。这是正确的技术吗?有什么我没有完全掌握的吗?还有什么我应该知道的吗?
让我们将您的问题分成两个单独的部分。 1) MS Access 和 SQL 服务器中 boolean/bit 字段之间的差异。 2) MS Access 查找字段
1) 需要特别注意 MS Access 和 SQL 服务器之间的 boolean/bit 字段,因为它们存储值的方式不同。
SQL Server: 1=True | 0=False
MS Access: -1=True | 0=False
一般来说这不是什么大问题,因为 ODBC/OLEDB 驱动程序会处理这个问题,但您可能 运行 进入要测试位字段的查询。在这种情况下,您通常应该使用:
'0' for False
'<>0' for True
2) SQL 服务器不支持 MS Access 查找字段,一般来说,在 MS Access 中也应避免使用它们。这里的想法是将数据(表格)与表示(表格)分开,这是最佳实践。构建 MS Access 表单来处理表中的所有数据,并且不使用查找字段。
如前所述,true/false 列值无关紧要,因为当您将数据移动到 SQL 服务器并继续使用 Access 时,这些值将被转换。
但是,作为一种“习惯”,您可以使用关键字 true/false。
Select * from tblCustomer where InvoicePaid = False
以上表示您不关心或不必记住使用-1或0。
所以 SQL 对 true/false 使用不同的值这一事实并不重要,因为在将数据迁移到 SQL 服务器后,上述查询将继续正常运行。
并且您应该避免在 table 设计级别使用查找列。作为一般规则,不应允许在 table 视图中编辑数据,因此这个问题再次成为一个无关紧要的问题。
对于典型的表单,组合框在大多数情况下会存储驱动组合框的 table 的第一列“PK ID”,并且还会“显示”/搜索下一列.因此,只需使用向导在表单上放置 + 创建组合框,结果 + 该组合框的功能将与使用查找列相同,但您已在幕后正确规范化 tables。此数据设置将移至 SQL 服务器并继续“按原样”工作。
所以“查找”数据在这里确实没有太大变化,唯一的问题是不能直接打开tables来编辑数据。即使在您将数据迁移到 SQL 服务器后,您的 table 现已链接,但再次强调,由于没有人直接编辑这些 table,因此不会错过查找列功能总之。
所以表单上的组合框等不需要一些查找列,而只是由向导在将此类框放在表单上时创建的 SQL 语句驱动。