Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как подменять значения некоторых полей результата запроса? [D7]


pav_oleg ©   (2003-05-26 01:40:00) 

Всем доброе время суток!
Вопрос для знатоков ADO.
В приложение куча TADOQuery, соединяемых с базой через ac1:TADOConnection;
Все query выполняют только Select. Необходимо после выполнения запроса (ADOQuery1.Open) обработать строковые поля при помощи спец. функции.
Дано:
MyFunc(const s : string) s : string;
TableA(iField : int, s1 : varchar(…), xField : numeric(…), s2 : varchar(…))
ADOQuery1.SQL = “Select * from TableA”.
Нужно, чтобы после открытия набора данных значения строковых полей s1 и s1 были равны MyStrFunc(s1) и MyStrFunc(s2) соответственно. Причем, необходимо, чтобы в базе значения не менялись. Вообще это нужно для всех TADOQuery, которых куча. Думаю, что должно помочь событие TADOConnection.OnExecuteComplete.

В общем, суть вопроса в том, можно ли подменять значения некоторых полей результата запроса на стороне клиента при помощи определенной функции.

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

procedure TDM.ac1WillExecute(Connection: TADOConnection;
var CommandText: WideString; var CursorType: TCursorType;
var LockType: TADOLockType; var CommandType: TCommandType;
var ExecuteOptions: TExecuteOptions; var EventStatus: TEventStatus;
const Command: _Command; const Recordset: _Recordset);
var
i : integer;
tempStr : string;
Par : _Parameter;
begin
if CommandType = cmdStoredProc
then begin // если это хранимая процедура
for i := 0 to Command.Parameters.Count-1 do
try
if Command.Parameters.Item[i].Type_ in [adVarChar]
then begin // значит текстовый параметр
Par := Command.Parameters.Item[i];
Par.Value := Encode(Par.Value);
end;
except on e : exception do;
end;
end
end;


sniknik   (2003-05-26 02:03:00) [1]

не скажу что все понял :) но суть вроде уловил, нужно подменять значение текстового поля перед показом? есть такое событие onGetText у поля, обрабатывай его, по onSetText обратно на запись. Или вычисляемое поле если не нужно менять в базе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо