Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access ACCESS/VBA:can';无法使数据帐户正常工作_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access ACCESS/VBA:can';无法使数据帐户正常工作

Ms access ACCESS/VBA:can';无法使数据帐户正常工作,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,下面是我用来根据结果启用/禁用按钮(允许创建新版本)的部分代码 如果dcount返回0,则表示下一个修订版还不存在(因此可以创建) 如果dcount返回1,则表示下一个版本已经存在(因此该按钮将被禁用) 我的问题是,出于某种原因,即使记录对应于在dcount中输入的值,它仍然返回0 我在没有[]字段的情况下使用ant尝试了这两种方法。 我还试着用*代替index_rit 我做错了什么?明白了。 这是一个格式问题: RITn°的形式是xx xx,所以我不得不这样说: "[RITn°]='" &am

下面是我用来根据结果启用/禁用按钮(允许创建新版本)的部分代码

如果dcount返回0,则表示下一个修订版还不存在(因此可以创建) 如果dcount返回1,则表示下一个版本已经存在(因此该按钮将被禁用)

我的问题是,出于某种原因,即使记录对应于在dcount中输入的值,它仍然返回0

我在没有[]字段的情况下使用ant尝试了这两种方法。
我还试着用*代替index_rit

我做错了什么?

明白了。 这是一个格式问题: RITn°的形式是xx xx,所以我不得不这样说:

"[RITn°]='" & Me.RITn°.Value & "' AND [Revision]=" & Me.Revision.Value + 1)

(添加了单引号)

首先,通常认为DCount(和其他“D”函数)有点拖累性能。尝试用此快速功能替换它。您只需向它传递一个查询,它就会返回记录计数

Private Function GetRecordCount(strSearch as String) as Long
Dim rst As ADODB.Recordset
Dim RecCount As Long

Set rst = New ADODB.Recordset

With rst
   .ActiveConnection = CodeProject.Connection
   .CursorType = adOpenForwardOnly
   .LockType = adLockReadOnly
   .Source = strSearch
   .Open Options:=adCmdText
   if .EOF = true then
        RecCount=0
   else
        RecCount=.Collect(0)
   End If

   .Close
End With

GetRecordCount = RecCount

Set rst = Nothing

End Function

这使用ADO,但如果您只是使用访问表,则可以/应该使用DAO,但这是另一个问题

ADO在Access中不是一个好主意。域聚合函数确实非常有用,除非您的数据库太大,您可能应该考虑另一个后端。除程序员外,其他人经常使用Access,允许在不进行任何编码的情况下填充控件的选项是一个优势。我知道,如果只处理JET表,则使用ADO不是最好的选择,因此我回答中的最后一句话说,这可以/应该使用DAO。我所有基于JET的程序都使用DAO,只有在使用其他数据源时,我才会使用ADO。access有这些域函数是非常有用的,见鬼,我对有时使用它们感到内疚,但我只是想让OP意识到,如果在大型表上使用这些函数,它们是一个潜在的问题。我知道这个选项,但它需要更多的行。我想让代码尽可能简单和简短(性能不是问题,也没有太多记录),但感谢您显示了“其他方式”:@Kevin Ross,同意,ADO对其他数据源非常有用,甚至在Jet访问之外(嘘!))在只需要记录计数时打开光标不是解决方案。只需执行“SELECT COUNT(…”,并获取结果中的一个值。.Value属性是多余的,因为它是默认属性。但是,在将值传递给具有由REF定义的参数的函数/子例程的情况下,它可能很有用(也就是说,使用.Value将传递ByVal,尽管在传递给函数/子函数之前,使用paren围绕控件引用以强制求值也是如此)。
Private Function GetRecordCount(strSearch as String) as Long
Dim rst As ADODB.Recordset
Dim RecCount As Long

Set rst = New ADODB.Recordset

With rst
   .ActiveConnection = CodeProject.Connection
   .CursorType = adOpenForwardOnly
   .LockType = adLockReadOnly
   .Source = strSearch
   .Open Options:=adCmdText
   if .EOF = true then
        RecCount=0
   else
        RecCount=.Collect(0)
   End If

   .Close
End With

GetRecordCount = RecCount

Set rst = Nothing

End Function