Jet(Access) DB 和基于表达式的列?

Posted

技术标签:

【中文标题】Jet(Access) DB 和基于表达式的列?【英文标题】:Jet(Access) DB and Expression based columns? 【发布时间】:2008-11-03 23:50:56 【问题描述】:

我偶尔会在一个旧项目上工作,它使用经典的 asp 作为前端,使用 access 数据库作为后端。

我想在其中一个表中创建一个新列,其中包含从行中的其他列计算其值的逻辑。

我知道如何在更现代的 DBMS 中执行此操作,但我认为访问不支持它。请记住,我没有使用访问前端,只是通过 ODBC 使用 Jet DB 引擎。

任何指针?

【问题讨论】:

从回答评论中删除:如果必须存储计算值,一般不推荐,是否不能在插入值之前执行计算? 响应:不,该应用程序非常糟糕,我更愿意添加计算列而不是在 30 个位置更新应用程序。 – FlySwat 【参考方案1】:

你能做一个计算列吗?

SELECT Table1.Col_1, Table1.Col_2, [Col_1]*[Col_2] AS Col_3
FROM Table1;

【讨论】:

其实这个值的计算方式涉及到大量的逻辑,所以它不能只是一个计算列,我想知道 Jet DB 是否可以在其中嵌入 VBscript就像在 Access 中一样。【参考方案2】:

Jonathan Holland 在评论中问道:

我想知道 Jet DB 是否可以拥有 像您一样在其中嵌入 VBscript 在 Access 中做

您为什么要在后端而不是在您的 ASP 前端做类似的事情? Access 已保存查询,类似于视图,但是当通过 ODBC 使用时,它们不能在其中包含 VBA 函数(尽管 Jet 直接支持的一些命令可能可以通过 ODBC 访问,例如IIf() 和 Nz() -- 但这是一个很大的 if)。

在 ASP 中检索您的记录集并执行逐行计算。如果您通过 ODBC 使用 Jet,这是唯一的方法(顺便说一句,我认为 ADO 不会更好地工作)。

【讨论】:

Jet 不直接支持 Nz()。 好的。它确实支持 IIf(),但我不确定它是否可以在所有上下文中通过 ODBC 访问。我的观点很简单,提出的问题在前端逻辑中而不是在传递给后端的 SQL 中更恰当地解决。

以上是关于Jet(Access) DB 和基于表达式的列?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jet 连接到 Access DB

使用 Microsoft.Jet.OLEDB.4.0 从 C# 将行插入 Access db,自动编号列设置为零

JET OLEDB 参数如何将字符串与 Access DB 中的文本字段进行比较

MS Access/JET“不支持加入表达式”有啥方法可以修复这个查询吗?

如何使用 C# 获取 Access 数据库中的列列表?

SQL Server和Access数据读写