Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Перехват запросов   Найти похожие ветки 

 
Ega23 ©   (2004-08-30 09:34) [0]

Господа, проблема следующая:
Есть старый проект, работает через BDE. Возникла необходимость "перехватывать" все транзакции, идущие на сервер и отписывать их в лог.
Вопрос: как это сделать? Если у всех запросов переопределить BeforeOpen (или AfterOpen, не принципиально), то тогда теряются те запросы, которые через ExecSQL выполняются.


 
Nikolay M. ©   (2004-08-30 09:43) [1]

BOL: Creating and Managing Traces and Templates?


 
Ega23 ©   (2004-08-30 09:50) [2]

Нет, мне на уровне клиента надо. Грубо говоря, тексты запросов, проходящих через BDE.


 
Nikolay M. ©   (2004-08-30 10:08) [3]

Уф, в Диасофте 5НТ как-то реализована возможность показа всех запросов. Возможно, тоже через события. А если нужна инфа только о транзакциях, может DbiGetTranInfo и то, что рядом с ней?


 
Ega23 ©   (2004-08-30 10:15) [4]

DbiGetTranInfo - это что?


 
Nikolay M. ©   (2004-08-30 10:29) [5]

DBTables.pas, поиск по DbiGetTranInfo, хелп по выделенному :)

Delphi syntax

function DbiGetTranInfo (hDb: hDBIDb; hXact: hDBIXact; pxInfo: pXInfo): DBIResult stdcall;

Description

DbiGetTranInfo retrieves transaction information.

Parameters

hDb  Type: hDBIDb  (Input)
Specifies the database handle.
hXact  Type: hDBIXact  (Input)
Specifies the transaction handle. If NULL, hDb is used; if not NULL, hDb is ignored.
pxInfo  Type: XInfo  (Output)
Pointer to the client-allocated XInfo structure.

Usage

After a successful DbiBeginTran request, the transaction state is active. The state remains active until DbiEndTran is called. While the transaction is active, the actual isolation level being used can be retrieved with this function. Since transaction nesting is currently not supported, the uNests value is unused.

Prerequisites

A valid database handle must be obtained on a database.

Completion state

Information function only; does not affect transaction processing.

DbiResult  Meaning

DBIERR_NONE The function executed successfully.


 
Ega23 ©   (2004-08-30 10:34) [6]

Интересно....  Посмотрим...


 
Nikolay M. ©   (2004-08-30 10:44) [7]

Нэндл берется существующий из TDatabase, он там вроде public.


 
sniknik ©   (2004-08-30 10:58) [8]

а сложно перекинуть конект с "родного" BDE шного линка на ODBC шный?
если нет то все выльется в простую настройку DSN ODBC (галочку там нужно будет поставить на "вести лог запросов")


 
Nikolay M. ©   (2004-08-30 11:07) [9]


> sniknik ©

Дык нужны вроде не запросы, а транзакции.


 
Ega23 ©   (2004-08-30 11:14) [10]

sniknik ©   (30.08.04 10:58) [8]

А включить/отключить это дело в ODBC в ран-тайме можно?


 
sniknik ©   (2004-08-30 11:27) [11]

> А включить/отключить это дело в ODBC в ран-тайме можно?
да, потребуется только переконект. изменение настройки можно через редактирование реестра для выбраного(созданого) DSN. а можно через библиотеку для ODBC (есть dll и даже вроде обертка над ней гдето, (у меня нет ;), для работы с ODBC)

(кстати засада может поджидать, если прога будет под бесправным юзером работать у которого на изменения в реестре прав нет ;)


 
Ega23 ©   (2004-08-30 11:28) [12]

Нет, тогда не годится. Хотя вариант красивый.

Блин, неужели нельзя в TDataSet отследить реакцию на ExecSQL?  :-(


 
sniknik ©   (2004-08-30 11:36) [13]

> Блин, неужели нельзя в TDataSet отследить реакцию на ExecSQL?  :-(
см. не датасет см. датабейс (по аналогии с ADOConnection?) в нем можно, может и в датабейсе можно. (анологичные функции выполняет)


 
Ega23 ©   (2004-08-30 11:38) [14]

Уже смотрел:

In TDatabase
OnLogin

Derived from TCustomConnection
AfterConnect
AfterDisconnect
BeforeConnect
BeforeDisconnect


:-((((


 
clickmaker ©   (2004-08-30 11:59) [15]

а через DbiRegisterCallBack, cbTrace не получится?


 
Nikolay M. ©   (2004-08-30 12:07) [16]

Так тебе что трейсить-то нужно? Транзакции или все запросы?


 
Ega23 ©   (2004-08-30 13:48) [17]

Всё, что идёт от клиента на сервер. Все Select"ы, Insert"ы, Delet"ы, Update"ы и Exec"и.  :о)


 
Ega23 ©   (2004-08-30 13:51) [18]

В принципе, всё делается 2-мя методами: TDataSet.Open и TDataSet.ExecSQL. Можно просто 2 функции написать, чтобы SQL ещё и в файл отписвался. Но этого делать не хочется, т.к. глобальная замена по проекту может привести чёрт знает к чему. А проект работающий, более того, уже с замороженным кодом.


 
Desdechado ©   (2004-08-30 13:56) [19]

SQLmonitor из борландовской поставки возьми


 
Ega23 ©   (2004-08-30 14:07) [20]

Desdechado ©   (30.08.04 13:56) [19]

А он чем тут поможет???


 
sniknik ©   (2004-08-30 14:16) [21]

посмотри -> clickmaker ©   (30.08.04 11:59) [15]
точно поможет, должно, судя по хелпу.


 
Ega23 ©   (2004-08-30 14:28) [22]

sniknik ©   (30.08.04 14:16) [21]

Да, похоже это то что нужно, сейчас пробую...


 
Desdechado ©   (2004-08-30 15:23) [23]

2 Ega
ты ж хотел видеть все запросы - вот они там и есть
правда, отдельно от программы, зато сразу по всем БДЕшным программам


 
Ega23 ©   (2004-08-30 15:28) [24]

Мне не надо отдельно от программы. Более того, не надо постоянного ведения логов. Нажал 3 магические клавиши, включающие Debug ON - пишем в файл весь траффик. Снова нажа 3 клавиши, включающие Debug OFF - перестали писать траффик.



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.065 c
14-1094435375
Думкин
2004-09-06 05:49
2004.09.26
С днем рождения! 6 сентября


1-1094634061
SLK
2004-09-08 13:01
2004.09.26
объединение текстовых файлов


3-1093619862
Донской
2004-08-27 19:17
2004.09.26
Locate то работает, то выдает ошибку.


4-1092969893
Poluprovodnik
2004-08-20 06:44
2004.09.26
Прочитать значение переменной среды окружения


1-1094889573
Yuri Btr
2004-09-11 11:59
2004.09.26
Выполнение действий по расписанию