myString = "UPDATE" 产生一个空的 myString
Posted
技术标签:
【中文标题】myString = "UPDATE" 产生一个空的 myString【英文标题】:myString = "UPDATE " results in an empty myString 【发布时间】:2009-05-11 13:45:50 【问题描述】:在 MS Access 中分配字符串文字有时会导致空字符串
以下代码
Public Sub test()
Dim myString As String
myString = "UPDATE "
Debug.Print "'" & myString & "'"
End Sub
结果
''
这把我吓坏了。它只是偶尔发生。其他时候 "UPDATE " 会起作用,但 myString = "tblCategorie" 不会。它必须是那个字符串。如果“UPDATE”失败,那么“update”仍然可以。
我使用的是 MS Access 2003 11.8204.8221 SP3 有人有同样的问题吗?
(在你说:转储访问之前!我们已经这样做了,但仍处于过渡阶段。我并不是真的期望任何人提出一个体面的答案,而是一个人希望)
[更新]:感谢所有cmets!让我说得很清楚
-
这不是错字。相同的代码有时有效,有时无效。
它是独立运行的,所以它不是全局变量问题。
我已将示例更新为失败/未失败的准确代码。这是一个文字副本。我通过将其粘贴到模块中并在直接屏幕中输入“测试”来对其进行测试。
它首先出现在过去半年完美运行的代码中,
确实是字符串赋值失败(我可以通过在赋值语句上加一个断点来检查)
我从text exports 生成我的数据库,所以它不会真的是一个损坏问题。 (可能是,但这不是我可以通过压缩等来修复的。)
【问题讨论】:
是不是Debug.Print有问题?尝试在监视窗口中查看变量的值。 为什么要用单引号将 SQL 字符串括起来? @David W. Fenton:在将字符串打印到即时窗口时会这样做,以便更容易地对空白填充进行视觉检查。另外,我认为这只是一个例子;我的意思是,如果子过程的唯一目的是打印到(我们希望)用户永远不会看到的 VBA 即时窗口,为什么要将字符串文本读入字符串变量。 只是为了表明字符串是空的,没有空引号你会看到一个空行,并且不知道是否确实打印了一些东西。 (这是我的测试用例,它在没有任何干扰的情况下识别问题,而不是生产代码。这是我能写的最短的代码段,实际上失败了,并且清楚地表明它确实失败了) @ondedaywhen:确实,你在我打字的时候回答了:) 【参考方案1】:您是否使用On Error Resume Next
,即分配是否静默失败?也就是说,我想不出为什么将 String
文字分配给 String
变量会失败,这就引出了一个问题:mySting 真的键入为 String
吗?
更新:我从您的更新中看到(双关语?)我的猜测是错误的。我根本看不到您的代码如何无法打印除“UPDATE”之外的任何内容。也许您现在应该将此视为放弃动态 SQL 以支持预准备语句的机会,或者最好是PROCEDURES
(当然,在 ACE/Jet 的存储过程中,仅限于单个 SQL 语句,但至少它们将 SQL 代码保留在正确的地方,即分贝)。
【讨论】:
虽然这样可以解决查询问题,但我也在其他地方使用字符串。我支持你,因为这与我们可能得到的解决方案一样接近。 (无论如何,用真正的编程语言进行的重写进展顺利 :-)【参考方案2】:您发布的代码是失败代码的副本,还是合理的复制品?我想知道在释义中是否遗漏了某些内容,因为我看不出您发布的代码有任何问题。
【讨论】:
虽然最初给出错误的代码不同,但这是我用来缩小错误范围的测试用例。如果我输入此代码(或仅在直接屏幕中输入“更新”),则会发生所描述的行为。有时。【参考方案3】:只是瞎猜……你确定你输入的第二个“myString”正确吗?
因为你不知道(例如。
Debug.print "'" & mySting & "'"
) 访问不会报错,但会创建一个空变量...
【讨论】:
我有明确的选项,所以访问会抱怨。此外,如果我在赋值语句上放一个断点,我可以看到变量是空的。 Curioser 和 curioser... 你考虑过放弃 Access 吗? ;-) 开个玩笑……抱歉,目前我什么都没有……【参考方案4】:转储访问! :-)
有些东西是 FUBAR。您是否尝试过对数据库进行压缩和修复?
我会尝试的另一件事是在 VBA 代码上运行一个副本(Debug->Compile Access[X])。
【讨论】:
以上是关于myString = "UPDATE" 产生一个空的 myString的主要内容,如果未能解决你的问题,请参考以下文章