2009-03-13 1 views
0

Я поддерживаю старое приложение VB6 и хочу включить SQL-скрипты непосредственно в часть проекта. Затем приложение VB6 извлекает текст этого скрипта и выполняет его на сервере.Включить sql-скрипты в приложении VB6

Причины такого подхода различны - среди прочего, мы хотим предоставить только обновленный исполняемый файл, а не полный пакет обновления/установки. Следовательно, скрипты SQL должны быть скомпилированы в приложение так же, как файл ресурсов. И, очевидно, нужно иметь возможность получить содержимое из кода, чтобы отправить его на сервер базы данных.

У кого-нибудь есть хороший способ сделать это?

ответ

5

Простейшим решением является просто создать модуль VB со сценариями в виде строк.

Если вы хотите использовать файл ресурсов, вы также можете это сделать. Вы можете связать resfile с проектом VB (я не помню, как это сделать непосредственно в VB IDE, но файл VBP поддерживает ResFile32 parameter).

EDIT: похоже, проблема здесь в основном касается форматирования - вы не хотите хранить SQL-запросы как одну длинную строку, но форматирование запроса в VB очень утомительно, потому что вам нужно добавить кавычки, добавить строку операторов конкатенации присоединиться к линиям вместе и т. д.

Я бы рекомендовал разместить SQL в текстовом файле и форматировать его любым способом. Напишите сценарий, который примет текст и преобразует его в модуль VB. Процесс сборки будет изменен, чтобы всегда применять этот сценарий прежде, чем компилировать приложение.

Для создания сценариев используйте ваш любимый язык сценариев; если у вас нет любимого языка сценариев, это достаточно простая задача, которую вы можете сделать в VB, C# или на любом другом языке. Если бы это был я, я бы, вероятно, использовал awk (gawk) или Python.

+0

Просто скопируйте строки SQL в модуль VB. Строки ресурсов будут неудобными. Строки ресурсов хороши, когда у вас есть несколько версий строки (переводы) для одного и того же идентификатора. В этом случае это не применяется, поэтому нет никакой пользы от их использования при жестком кодировании строк в модуле. – MarkJ

+0

Хех. На прошлой неделе у меня была такая же проблема. У меня было множество представлений, которые я должен был добавить в базу данных Access программно. То же решение: написал генератор кода, который создал кучу 'sql = sql + "blah"' операторов, которые я мог бы вставить в наш модуль обновления БД. –

2

Если вы хотите использовать ресурс (.RES) для хранения SQL, перейдите в меню:

надстройки > Добавить в Диспетчере ...

и выберите VB 6 Resource Редактор. Настройте надстройку для загрузки и загрузки при запуске.

Из надстройки редактора VB предоставляет простой интерфейс для добавления строк ресурсов. Вы будете ссылаться на них, используя предоставленные постоянные значения. Для загрузки строки во время выполнения, используйте LoadResString функцию:

Public Const SQL_INSERT As Integer = 101 
Dim strSQL As String 
strSQL = LoadResString(SQL_INSERT) 

(заменить «101» с постоянным значением строки, которую вы хотите загрузить)

+0

Строки ресурсов будут немного неудобными, так как мы говорим о целых хранимых процедурах здесь: как правило, десятки строк кода. Форматирование проклятых вещей будет неудобно. Но если нет лучшего способа ... –

+0

Просто скопируйте строки SQL в модуль VB. Строки ресурсов будут неудобными. Строки ресурсов хороши, когда у вас есть несколько версий строки (переводы) для одного и того же идентификатора. В этом случае это не применяется, поэтому нет никакой пользы от их использования при жестком кодировании строк в модуле. – MarkJ

+0

Согласен ... это было более практичным, чем рекомендация по стилю. –

0

Просто другая мысль о вашем подходе. Поскольку я нахожу себя в настройке поведения программы или пользовательского интерфейса для клиентов, я могу оказаться в середине изменения, которое либо не готово, либо еще не проверено и не одобрено. Поэтому, если у меня есть свойства, которые время от времени меняются, но я хочу поддерживать контроль, например, настройки соединения на нашем ftp-сервере, я создам только DLL-ресурс, отображающий мои свойства, и использую файл ресурсов в DLL для предоставления значения. Когда мой сетевой менеджер меняет что-то на ftp-сервере, я меняю строки в мануале ресурса, перекомпилирую dll и выпускаю только обновленную dll. Я уверен, что есть еще много решений, но я так и делаю. Если вы не думаете, что вам придется менять свои SQL-скрипты одновременно, вы меняете exe, это, вероятно, только усложняет вашу работу.Он работал достаточно хорошо для меня, что теперь для меня это очень стандартно.