Сервер для MS Access
От: N_A Россия  
Дата: 22.10.04 13:16
Оценка:
Тут я когда-то задался следующим вопросом. Привожу текст (чтобы не лезть по ссылке)
___________________________________________________________________
Лирическое отступление:
Со временем базы мдб растут вместе с числом пользователей, и многие операции замедляются до неприемлемого уровня. Решить (снизить остроту) проблему можно разными способами: пересмотр схемы данных, архивация, репликация, переход на клиент-серверную архитектуру, терминальный доступ и т.д. Все они требуют значительных временнЫх или(и) денежных затрат. Где-то читал, что народ умудряется использовать даже MSSQL сервер как прослойку для имитации клиент-серверной технологии в Access (mdb-mssql-mdb).
А теперь по делу:
Решил реализовать такую штуку. На сервере запускается Форма из mdb которая на основе Winsock контрола «слушает» определенный порт и обрабатывает текстовые сообщения (запросы) приходящие через от клиентов. На клиентах юзается тот-же контрол.
В сообщениях клиент, например, может указывать чистый SQL код, или просто команду типа «выполнить процедуру «проц1» с параметрами а1,а2,а3».

Внимание вопросы:
1. Юзал несколько примеров (из инета и MSDN) — во всех у меня зависает Access после того как пытаюсь закрыть соединение (Close) или просто форму. Причем в Access начинает жрать 99% процессорного времени. (Глюк наблюдается для протокола TSP, примеры для UDP вроде не глючат)
2. Кто ковырялся в этом направлении, если смысл в такой идее или оно будет глючить по жизни и сможет ли работать несколько юзеров одновременно (как реализовать)?
И вообще у кого есть полный рабочий код (пример) с этими Winsock controls в Access?
п.с.
DoEvens-ы вставлял через строчку – не помогает.
________________________________________________________
С того момента накачал кучу примеров и на VB и на C++,но многие глючат (особенно VB), либо слишком сложны и перегружены ненужной функциональностью. Я так и не определился с технологией, а опыта нет, да и С++ хромает. Читал тут статью про сокеты, но она для крутых начинающих.
Не подумайте, что я ленивый или тупой, просто время, потраченное на изучение для меня очень дорого, и я хочу начать тратить его в нежном направлении, поэтому прошу оценить моё текущее виденье дел.

1. Писать качественный сервер на VB геморно, ибо проблемы с потоками и скоростью работы.
3. Использовать Winsock control тоже уже не хочу.
2. Писать решил на C++ (не очень удобно работать с базой Access, но попробую)
3. Не решил, как в моем случае правильнее обрабатывать несколько клиентов.
Пока думаю так:
Создаю сокет для "слушанья" клиентов, при "подключении" нового клиента создаю новый поток, который "работает" с этим клиентом.
Потоки принимают запросы от клиентов и записывают их в общую очередь (для корректного разделения общей очереди между потоками предполагаю использовать какие-нибудь критические секции или объекты ядра (почитаю в толстой книжке Виндовс для профессионалов)).
Очередь запросов обрабатывает поток, который читает и исполняет команды из этой очереди через ADO (или DAO) подключение к базе (посмотрю пример в инете).
Об окончании выполнения очередного запроса как-то должен узнать соответствующий поток (пока не думал как), и отправить результат клиенту.

Клиенты будут на MS Access.

Если все выше написанное считаете бредом – так и напишите, а если нет, то укажите на ошибки и дайте рекомендации. Про эти сокеты так дофига написано, что я и не знаю точно в каком «режиме» и какими библиотеками лучше пользоваться в моём случае. Если можно, дайте ссылку на подходящий пример и советы, что в него надо добавить, чтобы разрулить до описанного уровня.

Буду благодарен за любые комментарии.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.