Access 数据集中的星号导致错误

Posted

技术标签:

【中文标题】Access 数据集中的星号导致错误【英文标题】:Asterisk in Access dataset causing error 【发布时间】:2013-06-12 05:59:42 【问题描述】:

我以前从未真正用 Access 做过任何事情(尽管我用 mysqlphp 做过很多事情),所以这是我的第一次尝试。这很简单:两个表,tblShapes 和 tblExamples。它们由 tblShapes 中的主要“JCH Shape”链接(它是文本)。我制作了一个带有可以选择 JCH 形状的组合框的表单。然后我重新查询表单,以便可以使用适当的数据填充子表单。

不过,我的一些数据仅通过星号进行区分。所以,现在,我所拥有的行中 JCH Shape 列的值是:

(g)CVC (g)C*V CV*CV CVCV

在我添加最后一个值“CVCV”之前我很好。现在,每当我单击它时,每当我尝试选择其他数据时,表单都会请求,但会显示空白数据,直到我关闭表单并重新打开它,除非我选择 CVCV,在这种情况下它会很好地显示自己的数据,如如果表单认为其他所有内容都丢失了相关数据。

Asterisk 绝对是这里的问题,但它只在区分 CV*CV 和 CVCV 或其他唯一区分字符为 * 的形式时才有问题(它不影响 (g)CVC 和 (g)C *V,例如,但是当我尝试制作 (g)CV 时,出现了同样的问题)。我不明白。我在调用 Requery 时发现出了点问题,但我对 Access 内部的工作方式了解不足,无法知道它是否错误地将 * 解释为通配符,或者我做错了什么。

我已链接到该文件。我知道这很混乱,但这是我的第一次尝试。任何帮助将不胜感激:

http://the-polyglot.net/uploads/other/SP-JCH-Words.accdb

谢谢!

编辑:现在在我上传的版本中,在点击第一个条目后,它似乎对每个条目都执行此操作。我完全不明白。仅在我 5 分钟前单击 CVCV 时才这样做,我唯一做的就是关闭并重新打开 Access。

【问题讨论】:

Asterix 是MS Access 中的通配符,而不是您在MySQL 和其他人中可能找到的通常的%,如果您可以发布填充表单的SQL 语句,我们可以仔细查看,但是我怀疑这样做的方法是用双引号引起来,例如""CV*CV"" 这会将其视为字符串值,而不应用通配符。 感谢您的评论。我有同样的思考过程,但我认为导致问题的查询是隐含的:我实际上在代码中的任何地方都没有任何 SQL。当我尝试填充表单时,我认为问题来自 Access 自己的隐式查询。 【参考方案1】:

首先,您应该为 tblShapes 表使用自动编号主键,以便每个“形状”都有唯一的值。 tblExamples 中应该有一个外键值来显示表之间的关系。

其次,(不管你是否遵循我的第一点),你有一个主窗体和两个子窗体。

主窗体应将 RecordSource 设置为空。

应将子窗体的 LinkMaster 属性设置为组合框的名称。

我会给控件名称前三个字母,例如组合框的 cmb 和文本框的 txt。这将使代码更清晰,并避免字段和控件使用相同名称的冲突。

祝你好运!

【讨论】:

感谢您的回答!我决定使用文本字段作为主键,因为无论如何每个字段都必须是唯一的(而且它弄乱了下拉框)。我尝试按照您的建议将 RecordSource 设置为空并将主链接设置为组合框,但是 Access 抱怨我无法在未绑定的表单之间建立链接。有什么想法吗? 只有主表单应该是未绑定的。应该绑定子表单。 ChildLink 属性必须是字段的名称,但 MasterLink 属性也可以是未绑定控件的名称。检查您的控件名称是否与字段名称冲突。【参考方案2】:

我想我解决了这个问题。我在主窗体的记录集 Like [Forms]![Add Record]![ShapeCombo]

上使用了一个标准

所以,在某些情况下,这派生为Like CV*CV。我将其更改为文字匹配,并且效果很好。不过,我仍然想知道是否有一种简单的方法可以在 Like 表达式中转义敏感字符。例如,除了手动替换字符串并将* 更改为[*] 之外,有谁知道其他方法?我的问题已解决,但我只是想知道如果我需要使用带有预期通配符和文字星号的 Like 表达式,我将如何解决它。

【讨论】:

以上是关于Access 数据集中的星号导致错误的主要内容,如果未能解决你的问题,请参考以下文章

使用星号时是啥导致程序集版本增加?

记录集到表?

使用空数据集的Spark SQL连接会导致更大的输出文件大小

MS Access:在列中搜索星号

获取预测模型在测试集中预测错误的数据样本

如何在数据集中存储自定义对象?