Пример клиент-серверного приложения От автора.
Уважаемые коллеги!
В последнее время на форуме прослеживается живой интерес к клиент-серверным приложениям, в частности к связке VFP-MSSQL, что подвигло меня данную публикацию.
Так же, моя профессиональная деятельность за последнее время несколько изменилась и я уже не являюсь VFP программером в полном смысле этого слова, так что эта публикация является отчасти и прощальным приветом всем вам, в особенности тем людям, с которыми я долгое время общался и которые несмотря ни на что любят и знают столь незаслуженно забытый нынче Visual Foxpro: Владимир Журавлев, Степанов Денис (HellRiser), Гринчишин Влад, Сергей Титов, Владимир Максимов, Кочкомбаев Тарас, Людмила, Жирнов Сергей, Насоновская Надя и многие другие.
Эти люди меня многому научили, за что им огромное спасибо.
Предупреждение.
Данный пример ни в коей мере не может служить эталоном по созданию CS приложений на VFP! Эту программу я написал, когда знакомился с MS SQL Server 7 (около 2х лет назад). Более того - это моя первая программа, использующая клиент-серверную технологию.
Ну и,самое главное, здесь используются только SPT функции, т.к. только они позволяют держать под абсолютным контролем удаленную БД, и нет ни слова о Remote View (я считаю, что не надо скрещивать два разных подхода к CS приложениям на VFP).
Тем не менее, приемы работы с данными, использованные здесь, достаточно показательны, и могут ответить на вопросы большинства интересующихся.
Программа не является учетной в понятии бухгалтерии, скорее, это обычная картотека для IT службы крупного предприятия.
Платформа.
Клиентская часть разрабатывалась и компилировалась под VFP6+SP5. Успешно работает под Win9xWin2000Pro(Eng & Rus)NT4 WS. Серверная часть - MS SQL Server 7+SP3 (так же испытывалась на MSDE1MSDE2000).
Недостатки и грабли.
Некоторые из перечисленных недостатков могли бы быть устранены перед публикацией, но я сознательно не стал этого делать, чтобы сохранить Ваше настороженное отношение к коду, а проще говоря - уберечь от бездумного копирования.
Именно после этого проекта я написал пакет классов для работы с удаленными данными (которые опубликованы здесь в "Решениях"), т.к. здесь в полной мере проявился недостаток процедурного программирования в отношении работы с функциями SQL pass trought (SPT), а именно:
- Код обработки SPT функций "размыт" по тексту программы (в основном - сосредоточен в процедурах обмена данными)
- Вследствие этого децентрализована обработка ошибок SPT функций, что так же не является хорошим тоном в программировании
- Несколько некорректно обрабатываются транзакции. В принципе, это лечится установкой соответсвующего свойства соединения (SQLSETPROP(0, "Transaction", 2) && Режим ручной обработки транзакций), но здесь просто нет этой нужной строчки кода
- Для возврата значений из хранимых процедур используется курсор, а не выходные (OUTPUT) параметры
Казалось бы - напиши универсальные процедуры и не "парься", однако, универсальность привела бы к неоправданной громоздкости этих самых процедур. Оптимальное решение - классы работы с SPT. К сожалению, к этому очевидному решению я пришел, когда уже была написана львиная доля кода и переписывать его уже не имело особого смысла - код работал. Так что учтите эти замечания, когда будете смотреть код.
Не смотря на это программа успешно эксплуатируется у нас в конторе и поныне. Говорят, что удобно.
Достоинства.
Кроме недостатков, программа обладает и достоинствами, причем немаловажными. Вот они:- Минимальный траффик, т.к. вся "грязная" работа выполняется сервером с помощью хранимых процедур (ХП), а клиенту перегоняется минимум необходимых данных
- Использование ХП позволяет повысить степень защищенности данных на сервере, т.к. можно запретить непосредственный доступ пользователей к таблицам
- Изменение структуры данных не приведет к изменению кода клиентской части, в случае, если не изменится интерфейс ХП
- Подробная документация и интерактивная справка
Можно, конечно, напрячься и вычислить еще пару достоинств, но эти - основополагающие.
Сопроводительная документация.
К программе прилагается:
- Createdb.sql - Скрипт генерации БД - после его выполнения Вы получите 100% работающую БД
- Хранимые процедуры БД Computers .xls - Excel таблица с описанием ХП сервера
- Computers_4.ER1 - ER модель базы данных (ErWin 4)
- Readme.txt - описание программы, процедуры ее установки и настройки DSN (в файле справки это тоже есть, да еще с иллюстрациями)
- Computers.hlp - файл справки
Как сгенерить БД.
Краткая инструкция по генерации БД (для успешной работы необходимо обладать правами DBcreator на MSSQL):
- Запустить Query Analyser
- В окне команд написать: CREATE DATABASE Computers
- Нажать F5
- Будет создана БД Computers
- Открыть скрипт генерации БД (Меню Open...)
- Сделать активной новую БД (выпадающий список БД)
- Нажать F5
- В результате должны быть созданы все объекты БД, и таблицы проинициализированы системными записями
Если же все в порядке - создайте DSN и можно запускать программу. Обязательно прочтите Readme.txt !!!
Опять от автора.
Прошу не судить строго. Буду рад конструктивной критике, желательно прямо здесь, в разделе - чтобы другие посетители были в курсе.
Буду очень рад, если это все кому-нибудь поможет. С уважением, Орлов Дмитрий aka Jimmy.
Вложенные файлы
# |
Тип файла |
Размер |
Название |
---|---|---|---|
1 | .zip | 316,98 КБ | 285computers_sql |