Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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 中断模式和即时窗口结果不同_Ms Access - Fatal编程技术网

Ms access 中断模式和即时窗口结果不同

Ms access 中断模式和即时窗口结果不同,ms-access,Ms Access,我正在使用MS Access 2016、Windows 10、运行SDC的USAF笔记本电脑 我在调试某些代码时遇到问题。当我在中断模式下点击一行时,我得到一个运行时错误“13”:类型不匹配,当我在中断模式之外运行完全相同的代码时,代码正常运行 以下是导致我出现问题的基本代码: Private Sub btn_ReqKey_Click() 'This is not all of the code only those lines that are necessary Dim trgt_CACID

我正在使用MS Access 2016、Windows 10、运行SDC的USAF笔记本电脑

我在调试某些代码时遇到问题。当我在中断模式下点击一行时,我得到一个运行时错误“13”:类型不匹配,当我在中断模式之外运行完全相同的代码时,代码正常运行

以下是导致我出现问题的基本代码:

Private Sub btn_ReqKey_Click() 'This is not all of the code only those lines that are necessary
Dim trgt_CACID as String
Dim Temp_KeyCode as String

trgt_CACID = Me.CACID.Value  'Pulls value from short text field of "1234567890"
'Here is the issue
Temp_KeyCode = UnlockCode(trgt_CACID) 'Run-time Error '13': Type mismacth
More code
End Sub

Public Function UnlockCode(ByVal CACID as String) As String
lots of code that generates a 25 digit Alpha code
End Function
当我点击按钮时,代码在“Temp_KeyCode=UnlockCode(trgt_CACID)”运行时失败,错误为“13”:类型不匹配

但是,如果我重置代码执行并在即时窗口中运行它,而不按下按钮

trgt_CACID = "1234567890"
?UnlockCode(trgt_CACID)
返回正确的代码而不引发错误。因此函数UnlockCode()可以正常工作,只是在执行时不能正常工作

此外,当在中断模式下按下按钮并在即时窗口中尝试相同的代码行时,它返回相同的运行时错误“13”:类型不匹配

此外,我退出中断模式,重新加载变量并执行它再次工作的同一行代码

因此,我知道执行环境中的某些东西正在受到影响,我不知道这是什么。这是我第一次看到即时窗口的功能与代码执行的不同

旁注/怪癖,在我进入函数的瞬间,助手弹出来指导我所需的变量。当我在模块代码中键入相同的代码时,不会显示帮助器弹出窗口。真奇怪。对吗?进一步的证据表明,这两种环境之间有些不同

任何帮助或协助都将不胜感激。 提前谢谢。
KO

尝试使用虚拟函数运行它:

Public函数将代码(ByVal CACID作为变量)作为字符串解锁
解锁代码=字符串(25,“0”)
端函数

如果运行,请调试您的秘密函数。

根据与Erik A和Gustav的讨论,我更改了与我使用的表字段名冲突的函数名。有一次我改变了一切,使之不同:表字段名、表单文本框名和被调用的函数。一切都很顺利。显然,我调用的上下文中已经有了一些使用函数名的内容,并且该字段名被提取并发送到一个与该字段同名的函数。这产生了一个微妙的冲突,解释了在表和表单上下文中执行与在即时窗口中手动调用之间的差异,以及为什么它在即时窗口中工作,而不是在执行期间工作。感谢Erik A和Gustav的帮助。

错误是一种类型不匹配,在不处于中断模式时不起作用。因此,除了替换密码之外,函数不是问题所在,它可以分解各种数据元素并将它们重新分配给字母字符。我不想发布那个代码,所以不,我不会提供那个,而且它与手头的问题无关。与参数变量的声明方式有关。至少显示UnlockCode函数中的声明行。我也有过一些程序在设置断码时不能正常工作,或者是相反的情况——我忘记了,很久没有遇到过。我确实遇到过,公共函数将UnlockCode(ByVal CACID作为String)作为String。我不使用引用CACID的其他赋值。我为CACID的每个数字分配了10个字符串。但是所有类型的数据都匹配为字符串。那么,当我手动分配字符串值并使用该值调用函数时,为什么它会在即时窗口中工作呢?好的,我查看了您之前的帖子并删除了断点,但在执行相同错误时仍然失败。现在仍然处于中断模式,立即窗口中的函数仍然返回错误。监视窗口中的变量trgt_CACID=“1234567890”。我退出中断模式重置所有变量,并手动将trgt_CACID变量重新指定为“1234567890”,该函数工作正常。它正确地返回生成的代码。这会返回一个类型不匹配错误。但是,当我在执行之外从即时窗口调用函数时,它会返回25个零。您可以看到,这是不可能的(如果CACID被传递了一个字符串),因此会发生其他事情,比如字符串没有传递给CACID。尝试变暗作为变体(请参见编辑代码)。我意识到它不应该以这种方式工作,但它确实如此。我将手表设置为我正在查看的所有变量,它们都是字符串。我甚至在即时窗口中使用?trgt_CACID来证明它是一个字符串并验证它的值。所有的东西都检查出来了,但是stiull返回了错误。听起来你有一个重复的声明。UnlockCode也可能是一个对象(在这种情况下,
UnlockCode(1)
调用默认方法),一个数组(在这种情况下,
UnlockCode(1)
返回索引1处的项),一个对象的方法(在这种情况下调用该方法),一个对象的属性,即对象或数组,等等。