|
D5.ADO.MSSQL7.TADOCommand Автоопределение типа параметров
|
|||
---|---|---|---|
#18+
Написал я такую функцию: 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.05.2001, 16:09 |
|
|
start [/forum/topic.php?fid=58&msg=32006322&tid=2120187]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
others: | 252ms |
total: | 368ms |
0 / 0 |