如何检查 Access 中的附件字段是不是为空?

Posted

技术标签:

【中文标题】如何检查 Access 中的附件字段是不是为空?【英文标题】:How can I check if an attachment field is empty or not in Access?如何检查 Access 中的附件字段是否为空? 【发布时间】:2014-01-14 04:43:37 【问题描述】:

我在使用 MS Access 2010 时遇到了一些问题。我正在尝试修改从 Microsoft 网站下载的数据库,我正在做一些修改以跟踪食物营养。从 16 位 Atari 时代的过去,我有一些基本的经验。我对 VBA 并不完全陌生,只是知道足以惹上麻烦。我有一个表单,它使用选择查询来填充表单的下半部分。我在 food 表中添加了一个附件字段,该表有超过 8500 条记录,是用于查询的表。我的问题是在模块中添加 VBA 代码以查看是否存在照片。我希望能够在没有照片的情况下显示一个灰色的图标,如果有照片文件则显示一个常规的图标。但那是我开始工作的时候。我在字段属性中调用函数:

Photo1: chkAttachment([Photo])

这个开头给了我一个错误提示:“多值字段 '[Photo]' 在表达式 'chkAttachment([Photo])' 中无效。当我将其更改为:

Photo1: ChkAttachment([Photo].[FileName])

我得到空字段的 #Error 和带有文件的字段的“有照片”。

以下代码是我引用的函数来显示我正在尝试做的事情

Public Function chkAttachment(fldPhoto As String) As String

On Error GoTo chkAttachment_Err

chkAttachment = ""

'Debug.Print fldPhoto
If fldPhoto = Null Then
    chkAttachment = "No Photo"
Else
    chkAttachment = "Has Photo"
End If

chkAttachment_Exit:
     Exit Function

chkAttachment_Err:
    MsgBox " It don't like Error number: " & Err.Number & " " & Error$
    Resume chkAttachment_Exit

End Function

如果附件为空,查询甚至不会调用代码。我用谷歌搜索了以下问题,并在这个网站上搜索了“Microsoft Access 2010 VBA 如何查询附件字段”,但没有任何运气。我尝试使用一些代码来计算附件中的文件数,我在线程“如何从 Microsoft Access 的附件字段中查询附件数?”中找到。从 2011 年 8 月开始,但不知道如何让它工作。说到 SQL,我对那部分一无所知。

感谢您提供的任何帮助。

史蒂文

【问题讨论】:

如果查询不引用函数或调用它,我在函数中放入的任何东西都不会有任何好处,这是我的主要问题。如果附件字段显示 0,它只会显示每条记录的“#Error”。但是当他们的照片存储或显示 1 时,它引用了该功能。我有这个字段,所以我可以为每个食物项目(记录)营养价值添加一张照片。史蒂文 顺便说一句,感谢您的快速回复。我表中的字段绑定到查询。两者都被命名为照片。我想查看每条记录是否有照片,这样我就不必打开表格中的每条记录来查看。 【参考方案1】:

如果您的表单上有一个名为 [attachPhoto] 的 Attachment 控件,并且该控件绑定到 [Photo] 字段(即,附件控件的 Control SourcePhoto),那么您可以检查的价值

Me.attachPhoto.AttachmentCount

查看记录是否有附件。

(请注意,如果您不希望用户真正看到 [attachPhoto] 控件,您可以将其Visible 属性设置为No。)

【讨论】:

我没有看到绑定到附件字段的图像控件的 AttachmentCount 属性。 @June7 - 我说的是Attachment control,而不是图像控件。 好的,学到了新东西。我通常不使用附件类型字段,所以不记得曾经探索过那个图标。谢谢。【参考方案2】:

您可以在 SQL 语句“Not (tblxx.Pic.FileData) Is Null”中检查它,可能在 where 子句中。我使用记录集以这种方式做到了。

【讨论】:

【参考方案3】:

我相信这会导致您的领域出现#ERROR

If fldPhoto = Null Then

对 Null 的正确检查如下:

If IsNull(fldPhoto) Then

但是在调用函数时你可能仍然会得到一个 Null 异常。因此,您可能希望将整体代码编辑为以下内容:

If (fldPhoto = "") Then

以及调用函数时:

Photo1: ChkAttachment(Nz([Photo].[FileName]))

希望我能帮上忙

【讨论】:

谢谢,我试试看。【参考方案4】:

我想在对表单运行查询之前检查是否制作了附件。我在表单中创建了一个文本框并在文本框的控制源下,转到表达式生成器并输入“= [具有附件的列的名称].[AttachmentCount]”。 如果没有制作附件,文本框给我的计数为 0(零),1 个附件的计数为 1。我可以使用文本框来条件运行我的查询。以上都是Access 07。

【讨论】:

以上是关于如何检查 Access 中的附件字段是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Windows 窗体中的 Access 附件字段?

检查我视图中的所有文本字段是不是为空目标c [重复]

如何在 Access 中克隆 SharePoint 列表附件字段

rdlc报表如何判断字段是不是为空

如何检查提交时输入字段是不是为空[重复]

IF 语句中的 jQuery OR 运算符检查任一文本字段是不是为空