Как "перехватить" запрос направляемый в БД

iosif88

Well-known member
14.10.2009
97
1
#1
Итак. У нас имеется какая либа система (приложение) которое через odbc посылает sql запрос к БД. Нам нужно чтоб роль БД исполняло мое приложение. Т.е. требуется получить этот самый sql запрос и выдать нужные данные иницировавшей этот запрос программе.
Итак самый главный вопрос как получить этот sql запрос и как возвратить данные?
В каком направлении вообще нужно копать?
 

iosif88

Well-known member
14.10.2009
97
1
#2
Возможно я плохо сформулировал вопрос.

Вот предположим появляется новая субд. И я хочу чтобы программа раннее работавшая с какой либо известной субд через odbc, теперь работала с новой БД. Что я должен сделать для этого, написать драйвер odbc для этой новой БД?
 

iosif88

Well-known member
14.10.2009
97
1
#3
Найти на сайте производителя вашей новой субд odbc драйвер, и установить его, если при установке субд он еще не был установлен.
А если это невозможно ? Или к примеру "производителем" субд буду я сам? Как я должен узнать какие запросы направляются в мою БД от клиенской программы?

Вообщем как я понимаю нужно реализовать собственный драйвер. У кого нибудь есть рекомендации как это сделать и насколько это сложно?
 

iosif88

Well-known member
14.10.2009
97
1
#4
Получить у производителя драйвер ))
Вообщем ситуация такая: имеется некое приложение P посылающее sql запросы. Моя программа должна (1) получить этот запрос (2) преобразовать его в другой формат (3) послатть запрос на веб сервер (а тот уже будет работаь с СУБД) получить от веб сервера ответ, обратно преобразвать и возвратить ответ.
Собственно интересуют только первые и последний пункт. Как получить запрос от P и как возвратить данные.
 
D
#6
Классическая трехзвенка, садим между клиентом и базой своего засланного который должен уметь общаться с нашим клиентом и с базой. Удобнее всего организовать сервис. И таким образом приложению по барабану какой сервер.
Ну а наш засланный должен уже уметь договариваться с серверами и если пересаживаемся на другой то модернизируем его под новый сервер, как то так...
 
D
#7
Ну если так, то конечно задача усложняется :) нечего невозможного конечно нет, но стоит ли игра свеч?
Стоит ли изобретать колесо?
 

iosif88

Well-known member
14.10.2009
97
1
#8
Классическая трехзвенка, садим между клиентом и базой своего засланного который должен уметь общаться с нашим клиентом и с базой. Удобнее всего организовать сервис. И таким образом приложению по барабану какой сервер.
Ну а наш засланный должен уже уметь договариваться с серверами и если пересаживаемся на другой то модернизируем его под новый сервер, как то так...
Общаться с базой проблем нет. Главная трудность как общаться с клиентом который посылает sql запросы. (нужно чтоб запросы от клиента примала и моя программа.

Что принимает обычно эти запросы?Драйвер ODBC ? Может где то храниться какие запросы он примал?
 
D
#9
Не факт, что программа работает через ODBC, есть масса альтернатив. В вашем случае если это все же ODBC, то вариант это написать самостоятельно ODBC драйвер, как их писать я не знаю, поищите инфу на просторах интернета. Как напишите перенаправьте программу на него и творите .... удачи.
 
Z
#10
Если речь только о ODBC, то можно попробовать подменить системе odbcjt32.dll:
1. Написать свою odbcjt32.dll с набором функций-оболочек SQLxxxx, к примеру SQLConnect, SQLAllocHandle, SQLExecute и т. п. (см. MSDN).
2. Из кода функций оболочек вызывать оригинальную функцию из оригинальной odbcjt32.dll, перед этим выполнив какой то свой код.
3. Положить свою odbcjt32.dll в каталог с программой.