|
![]() |
#1 |
Участник
|
Буквально вчера делал нечто подобное...
Предположим что необходимо создавать рекорд в таблице логов на каждый метод какого-либо класса... запускать метод, а потом апдейтить данную запись количеством успехов/ошибок и временем потраченным на работу вызывающих методов. X++: /******************************************************************************* PARAMETERS: Name - descr of method, Upd - number of successes, Err - number of errors, //---Insert - flag to create new record or update existing one. RETURN VALUE: None DESCRIPTION: //---05/16/2007-10:52:18--- This method writes complete log of XXX class, //---including all its methods. To create a record method should be called 2 times from any method within class: //---at start->to create a record, at finish->to update record with number of errors/sucesses and time consumped. *******************************************************************************/ void XXXClassLog(str Name, int Upd=0, int Err=0, boolean Insert=true ) { XXX_Log XXX_Log; if (Insert) { XXX_Log.Job = Name; XXX_Log.Updated = 0; XXX_Log.Errors = 0; XXX_Log.Path = strfmt("%3%1_error.%2","XXX_Log","csv",WinAPI::getTempPath()); XXX_Log.insert(); RecId = XXX_Log.RecId; } if (!Insert) { XXX_Log.selectForUpdate(true); ttsbegin; select firstonly XXX_Log where XXX_Log.RecId == RecId; { XXX_Log.Updated = Upd; XXX_Log.Errors = Err; XXX_Log.update(); } ttscommit; } } Да, RecID - это глобальная переменная для поиска по ней... можно конечно хранить и весь рекорд... но я решил сделать так). З.Ы.Ы. По самому вопросу - да, сделать так конечно можно, вот только логики в примере не видно... не совсем ясно ЗАЧЕМ так делать. Приведено в качестве примера для Максима Горбунова. ![]() пасибо, исправил)))) Последний раз редактировалось Akinak; 17.05.2007 в 13:46. |
|