Причина, по которой ничего не записывается в ваш файл журнала, заключается в том, что, как вы добавили свою запись в журнал, она будет выполняться только в том случае, если обновление затрагивает более одной строки. Имо, ваш код должен быть
procedure TSQLResolver.DoExecSQL(SQL: TStringList; Params: TParams);
var
RowsAffected: Integer;
TmpList: TStringList;
begin
TmpList:=TStringList.Create;
try
TmpList.LoadFromFile('C:\Test\test.txt');
RowsAffected := (Provider.DataSet as IProviderSupport).PSExecuteStatement(SQL.Text, Params);
TmpList.Add(SQL.Text);
TmpList.SaveToFile('C:\Test\test.txt');
if not (poAllowMultiRecordUpdates in Provider.Options) and (RowsAffected > 1) then
begin
(Provider.DataSet as IProviderSupport).PSEndTransaction(False);
Provider.TransactionStarted := False;
DatabaseError(STooManyRecordsModified);
end;
if RowsAffected < 1 then
DatabaseError(SRecordChanged);
finally
TmpList.Free;
end;
end;
, который должен работать независимо от количества обновленных строк. Это также исправляет утечку TmpList, которую вы настроили, освобождая TmpList в коде, который выполняется только условно. Кстати, как написано, вы обнаружите, что этот код не регистрирует значения, введенные значениями в Params
, но достаточно легко добавить их в журнал или даже объединить их в зарегистрированный SQL.Text.
Надеюсь, это должно решить вашу непосредственную проблему, но, честно говоря, вам лучше потратить время на то, чтобы свести ваш код к mre . Я говорю, что по нескольким причинам, во-первых, у меня никогда не было ошибки «неподготовленный оператор» при использовании IBX + DSP / CDS, во-вторых, регистрация с использованием компонентов IBX обычно работает нормально, и в-третьих, что подготовка mre часто выявляет причину проблемы. Поэтому я подозреваю, что в коде вы не показывали нам ошибку.
Если вы настроили mre для работы с одной из примеров баз данных IB и опубликуете ее здесь как новый q (не как редактирование этой, пожалуйста), у вас гораздо больше шансов найти читателейготовы попробовать сами.