Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 D5.ADO.MSSQL7.TADOCommand Автоопределение типа параметров  [new]
tfox
Guest
Написал я такую функцию:

function cmd_exec(sqlcom: TADOCommand;params: array of string;
values: array of variant; cmd_type: TCommandType;
ssql: string): boolean;
var i: integer;
begin
result := false;
with sqlcom do try
CommandText := '';
CommandType := cmd_type;
CommandText := ssql;
if CommandType = cmdStoredProc then Parameters.Refresh;
for i := 0 to High(params) do begin
if params = '' then break;

// Parameters.ParamByName(params).DataType := ftString;

Parameters.ParamByName(params).Value := values;
end;
Execute;
result := True;
except on E:Exception do frmErrExec(E,'Ошибка при исполнении команды',ssql)
end;
end;

RESTRICT_USER1,2 - это обычные строковые константы вида:
const RESTRICT_USER1 = 'USER1'; RESTRICT_USER2 = 'USER2';

По замыслу при передаче ей скрипта команды, имен параметров и значений
параметров эта функция должна исполнять команду, предварительно назначив
параметрам их значения. Например, вызываю:

cmd_exec(dm.cmd1,['r_user1','r_user2'],[RESTRICT_USER1,RESTRICT_USER2],cmdText,
'delete from bm_reqs where (man = suser_id()'+
' or man = suser_id(:r_user1) or man = suser_id(:r_user2)'+
') and (sel = 1)')

Возвращает ошибку ADO: "Приложение использует для текущей операции значение
неверного типа". Смотрю - автоматически почему то свойствам параметров DataType
присваивается значение ftSmallInt. Но ведь аргументами функции suser_is из T-SQL
должны быть или nchar или varchar! Не могу понять, где затыка, может, кто
сталкивался?

Можно принудительно назначить тип параметра (в исходнике было
закомментарено):
Parameters.ParamByName(params).DataType := ftString;

Тогда всё проходит замечательно. Можно допустим написать функцию, которая
преобразует значение типа варианта
(значения вида varString, varDate, varInteger) в значение типа DataType
(вида ftString, ftDate, ftInteger).
Но у меня стойкое и непроходящее ощущение, что это все обход проблемы,
которую, на самом деле можно решить

зы SP1,ADOExpressUpdate1 и 2, а также мистический ado_patch.exe на D5 поставлены
25 май 01, 16:09    [30341]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить