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的主要内容,如果未能解决你的问题,请参考以下文章

myString.replace( VARIABLE, "") ......但全局

C中有字符串吗?

String字符串关于==的详解

将字符串保存到文件的Ruby脚本。

javascript如何反向截取字符串?

在 Python 中初始化一个字符串变量:“”还是无?