Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Параметры в 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 ? Проще бы было.


Наверх

Титульная страница Поиск, карта сайта Написать письмо