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 和基于表达式的列?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Microsoft.Jet.OLEDB.4.0 从 C# 将行插入 Access db,自动编号列设置为零
JET OLEDB 参数如何将字符串与 Access DB 中的文本字段进行比较