Что могло вызвать ошибку периода выполнения 430 Vb6

Проблема заключается в том, что

query.append("\b\b from ")

не не удаляют завершающую запятую и пробел из StringBuilder. может выглядеть так же, как при печати на консоль, но строка действительно содержит

select territory, ␈␈ from offices

, и MySQL, очевидно, не нравится.

Вместо этого вы хотите удалить запятую из StringBuilder (и оставить пробел):

query.deleteCharAt(query.length() - 2).append("from ")
10
задан Raminder 11 November 2008 в 08:58
поделиться

3 ответа

Если этот проект находится полностью в VB6. Вероятная причина этого состоит в том, что EXE имеет копию двоичного файла DLL в, он - каталог. Когда Вы стреляете, это использует ту копию вместо скомпилированной копии. Когда Вы методы ADD или классы, что EXE становится несовместимым со старым DLL. Если Вы сделали исправление ошибки или просто работали с внутренним кодом затем, EXE будет работать, но это использовало старый DLL.

Установите свой DLL на Совместимость на уровне двоичных кодов. Удостоверьтесь, что у Вас есть каталог Compatible. Поместите DLL Последней версии там. Укажите на Совместимость на уровне двоичных кодов на тот DLL. Удостоверьтесь, что Ваш EXE компилирует в, он - каталог проекта. Выполните EXE от, он - каталог проекта. Тем путем это будет использовать DLL, который Вы скомпилировали. Необходимо записать утилиту так, чтобы можно было скомпилировать каждый проект отдельно. Протестируйте свою установку с помощью Виртуального ПК или другого компьютера.

Все эти шаги помогут избежать Ада DLL. Мой собственный проект имеет две дюжины проектов ActiveX в 6 слоях. То, когда я принял выше моих проблем Ада DLL, до почти ничего не спало.

9
ответ дан 3 December 2019 в 22:39
поделиться

Читайте на двоичном файле по сравнению с проектом совместимо.

Если у Вас есть общий dll, необходимо быть осторожными и использовать двоичный файл совместимо. Тем путем VB6 сохранит ту же самую подпись/интерфейс COM между сборками. У Вас должна быть копия выпущенного DLL для VB6 для сравнения с - у меня обычно есть отдельная папка для выпущенных двоичных файлов. Ограничение с совместимостью на уровне двоичных кодов - то, что Вы не можете удалить общественные собственности или методы, и Вы не можете изменить их подписи. Можно добавить новые свойства и методы.

Используйте совместимость проекта, если необходимо внести повреждающиеся изменения (как удаление старых открытых методов) - однако, если Вы делаете это, необходимо будет перекомпилировать все другие приложения, которые используют общий DLL.

4
ответ дан 3 December 2019 в 22:39
поделиться

Это - почти наверняка проблема управления версиями, иногда известная как "ад DLL".

Фон - то, что мир.NET явно разработан, чтобы позволить интерфейсам развиться при хранении того же имени. Но в мире COM, интерфейсы считаются неизменными.

Когда Вы работаете в IDE, Visual Studio создает новую обертку COM Interop для COM dll каждый раз, когда Вы выполняете свое решение. Но если Вы не выпускаете и заменяете свое все решение каждый раз, включая совершенно новую обертку COM Interop, Вы собираетесь столкнуться с проблемой управления версиями, где код.NET ожидает один COM-интерфейс, но видит другой.

Править: По некоторым причинам я предположил, что Вы пытаетесь использовать COM-компонент от компонента.NET. Если всем решением является на самом деле VB6, то решением г-на Conley является рекомендуемый подход. Вот хорошая ссылка, которая обсуждает проблему.

2
ответ дан 3 December 2019 в 22:39
поделиться