![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Параметры в ADOQuery [D5, MSSQL]
Style © (2004-06-01 16:42:00)Пытаюсь использовать Delphi+ADO+MSSQL.
У меня проблемма с конвертации типов данных ADO и MSSQL
На сервере есть хранимая процедура DepCheck_ins
В теле SQL.Text у объекта ADOQuery описываю параметры
declare
@intResult int,
@strMessage varchar(255)
exec @intResult = DepCheck_ins
@AuditID = :AuditID, //Float
@DepartmentID = :DepartmentID, //Float
@FlagAll = :FlagAll, //SmallInt
@Flag = :Flag, //SmallInt
@FlagBrief = :FlagBrief, //OleString
@FlagName = :FlagName, //OleString
@strMessage = @strMessage out
select
intResult = @intResult,
strMessage = @strMessage
Комментариями пометил типы данных которые указываю
в редакторе TParameters.
Так вот параметры Flag и FlagAll в процедуре объявлены как TinyInt, а в ADO у TParameter я такого типа не нашел :(
Подставил SmallInt и при попытке выполнения процедуры ругается что не может сконвертировать SmallInt в TinyInt.. Тоже самое и с Integer.
procedure TFrm_Main.SetFlag(Name : string; Dep,Flag: Integer);
begin
qry_flagins.close;
qry_flagins.Parameters.ParamByName('DepartmentID').Value := Dep;
qry_flagins.Parameters.ParamByName('Flag').Value := Flag;
qry_flagins.Parameters.ParamByName('FlagBrief').Value := Name;
qry_flagins.Parameters.ParamByName('AuditID').Value := AuditID;
qry_flagins.Open; {ошибка, не могу с конвертировать SmallInt в TinyInt}
if(qry_flagins.FieldByName('IntResult').Value > 0) then
begin
frm_Main.ShowError(qry_flagins.FieldByName('StrMessage').Value);
end;
end;
В общем не знаю что и делать :(
Nikolay M. (2004-06-03 09:01:00) [1]
> > А у тебя все параметры по типам совпадают? И почему бы
> тебе
> > не мспользовать ADOStoredProc вместо ADOQuery ? Проще
> бы
> > было.
>
> Эта процедура возвращает записи. и StoredProc выдает ошибку
> о том, что ADOCommand не может принимать Query Result.
На здоровье. В чем проблема возвращать набор данных и out-параметры? Имхо, TADOStoredProc - как раз твой случай.
KSergey (2004-06-03 08:22:00) [2]Ну почему-то у борланда нет типа поля 8-битового целого. Может и в ADO нет? Я как-то не проверял, признаюсь.
А вообще, раз уж все равно такой запрос - я бы его просто динамически формировал в виде текста, безо всяких глупых параметров
Чес. слово - головняков меньше. Я всегда так делаю. Надоели мне параметры страшно.
Только я не понял по поводу ХП возвращает набор записей. Вы же и из запроса запись возвращаете?? Или из ХП не нужен? Или просто все recordset'ы ловим на клиенте?
Style (2004-06-02 09:22:00) [3]
> А у тебя все параметры по типам совпадают? И почему бы тебе
> не мспользовать ADOStoredProc вместо ADOQuery ? Проще бы
> было.
Эта процедура возвращает записи. и StoredProc выдает ошибку о том, что ADOCommand не может принимать Query Result.
> Они у тебя случаем не отрицательные ?
Нет, флаги посылаю положительные
Flag = 1
а параметр FlagAll = NULL это поле paNullable
> TADOQuery.ParamCheck + F1
Ну и что, если я отключу проверку параметров, то как без них буду работать?
---
В общем я так и не разобрался как передавать в параметр TinyInt хранимой процедуры нужное значение. Да и сам ADOStoredProc определяет этот параметр как ftWord, хотя на самом деле TinyInt это просто byte 0..255.
Не стал я мучиться и изменил параметры в коде самой хранимой процедуры, из TinyInt на Integer.
stone (2004-06-01 17:34:00) [4]TADOQuery.ParamCheck + F1
ZrenBy (2004-06-01 16:52:00) [5]Они у тебя случаем не отрицательные ?
bushmen (2004-06-01 16:47:00) [6]>не могу с конвертировать SmallInt в TinyInt
А у тебя все параметры по типам совпадают? И почему бы тебе не мспользовать ADOStoredProc вместо ADOQuery ? Проще бы было.