访问查找和是/否适当的技术?

时间:2015-02-12 15:54:48

标签: sql-server vba ms-access

我在访问中构建数据库,并且需要包括在某些时候迁移到SQL Server的能力(如果需要)。因此,需要避免某些访问技术(对吧?)

其中两个是布尔表和查找表。我的理解是,是/否复选框没有正确迁移到SQL Server,因此VBA是解析0/1真值而不是传统使用的-1/0的更好选择。如果我错了,请再次纠正我!

另一件事是避免在表设计中使用查找向导来限制输入。我的理解是,在数据库中实际存在的人工(或者可能是"隐藏"是一个更好的词)关系会导致在这些字段上迁移和运行查询时出现问题。

所以我的问题是,我应该如何管理查找值?我想把表设计作为常规字段,然后在vba表单中创建一个组合框,引用我数据库中的另一个真实表。这是正确的技术吗?有什么我不能完全掌握的吗?有什么我应该知道的吗?

2 个答案:

答案 0 :(得分:2)

让我们将你的问题分成两个独立的部分。 1)MS Access和SQL Server中的布尔/位字段之间的差异。 2)MS Access查找字段

1)MS Access和SQL Server之间的布尔/位字段需要特别小心,因为它们以不同方式存储值。

  

SQL Server:1 = True | 0 =假

     

MS Access:-1 = True | 0 =假

一般来说,这不是一个大问题,因为ODBC / OLEDB驱动程序会处理此问题,但您可能会遇到要测试位字段的查询。在这种情况下,您通常应该使用:

  

'0'表示错误

     

'<> 0'代表True

2)SQL Server不支持MS Access查找字段,一般来说,在MS Access中也应避免使用它们。这里的想法是您将数据(表格)与表示(表单)分开,这是最佳实践。构建操纵表中所有数据的MS Access表单,不使用查找字段。

答案 1 :(得分:1)

如上所述,true / false列值无关紧要,因为当您将数据移动到SQL Server并继续使用Access时,则会转换值。

但是,作为“习惯”,您可以使用关键字true / false。

Select * from tblCustomer where InvoicePaid = False

以上表示您不在乎或不记得使用-1或0。

因此,SQL使用不同的true / false值无关紧要,因为在将数据迁移到SQL服务器之后,上述查询将继续正常运行。

您应该避免在表设计级别使用查阅列。作为一般规则,不应该允许在表格视图中编辑数据,因此这个问题再一次成为一个非问题。

对于典型表单,组合框在大多数情况下将存储驱动组合框的表的第一列“PK ID”,并且还将显示/搜索下一列。因此,只需使用向导在表单上删除+创建一个组合框,该组合框的结果+功能将是使用查阅列的SAME,但您已在后台正确规范化表。此数据设置将移至SQL服务器并继续“按原样”工作。

因此,“查找”数据确实在这里没有太大变化,唯一的问题是不应该通过直接打开表来编辑数据。即使将数据迁移到SQL Server之后,您的表现在也已链接,但由于没有人直接编辑这些表,因此无论如何都不会错过查找列功能。

因此表单上的组合框不需要一些查阅列,但只是在向表格中删除此类框时向导创建的SQL语句驱动。