myString = "UPDATE" приводит к пустому myString - PullRequest
2 голосов
/ 11 мая 2009

В MS Access назначение строкового литерала иногда приводит к пустой строке

следующий код

Public Sub test()
    Dim myString As String
    myString = "UPDATE "
    Debug.Print "'" & myString & "'"
End Sub

Результаты в

''

это меня бесит. Это случается только иногда. В других случаях «ОБНОВЛЕНИЕ» будет работать, но myString = «tblCategorie» не будет. Это должна быть именно эта строка. Если «ОБНОВИТЬ» не удается, то «обновление» все равно будет в порядке.

Я использую MS Access 2003 11.8204.8221 SP3 У кого-нибудь есть такая же проблема?

(прежде чем вы скажете: доступ к дампу! Мы уже делаем это, но все еще на переходном этапе. На самом деле я не ожидаю, что кто-нибудь придет с приличным ответом, но парень может надеюсь)

[ ОБНОВЛЕНИЕ ]: Спасибо за все комментарии! позвольте мне прояснить это, хотя

  1. это не опечатка. Один и тот же код иногда работает, а иногда нет.
  2. Он работает изолированно, так что это не проблема глобальных переменных.
  3. Я обновил образец, чтобы он был точным кодом , который не работает / не дает сбой. Это буквальная копия. Я тестирую его, вставляя его в модуль и набирая «test» на прямом экране.
  4. Сначала он появился в коде, который работал безупречно в последние полгода,
  5. Это действительно строковое присваивание, которое терпит неудачу (я могу проверить это, поместив разрыв в оператор присваивания)
  6. Я создаю базу данных из текстового экспорта , так что это не может быть проблемой с коррупцией. (Может быть, но это не то, что я могу исправить, сжимая и т. Д.)

Ответы [ 4 ]

1 голос
/ 11 мая 2009

Используете ли вы On Error Resume Next, т. Е. Назначение молча проваливается? Тем не менее, я не могу понять, почему присвоение литерала String переменной String не удастся, поэтому возникает вопрос: действительно ли mySting имеет тип String?

ОБНОВЛЕНИЕ: я вижу из вашего ОБНОВЛЕНИЯ (каламбур?), Что мои догадки не верны. Я просто не вижу, как ваш код может не печатать ничего, кроме «ОБНОВЛЕНИЕ». Возможно, теперь вам следует рассматривать это как возможность отказаться от динамического SQL в пользу подготовленных операторов или, предпочтительно, PROCEDURES (конечно, в хранимых процессах ACE / Jet они ограничены одним оператором SQL, но по крайней мере они сохраняют код SQL правильное место, т.е. БД).

0 голосов
/ 11 мая 2009

Дамп доступа! : -)

Что-то такое FUBAR. Вы пытались выполнить сжатие и восстановление базы данных?

Другая вещь, которую я бы попробовал, - запустить копирование кода VBA (Debug-> Compile Access [X]).

0 голосов
/ 11 мая 2009

Просто слепое предположение ... вы уверены, что набираете вторую строку "myString" правильно?

Потому что ты не знаешь (напр.

Debug.print "'" & mySting & "'"

) Access не будет жаловаться, но создаст пустую переменную ...

0 голосов
/ 11 мая 2009

Является ли код, который вы опубликовали, копией кода, который не работает, или является разумным факсимиле? Мне интересно, было ли что-то потеряно при перефразировании, поскольку я не вижу ничего плохого в опубликованном вами коде.

...