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

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

Сбрасывается типа параметра в TADOQuery с ftWideString -> ftStrin


Rauf ©   (2004-03-13 01:48:00) 

Есть TADOQuery
Каждый раз при использовании, так скажем при каждом прокате,
я сохраняю имеющийся текст запроса, а в конце восстанавливаю
Вот код

var AStr : String;

begin
   AStr := a_q.SQL.Text;
   a_q.SQL.Text := 'select * from table1 where name = :name';
   a_q.Parameters.ParamValues[ 'name' ] := '<some_str>';
   a_q.Open();
   a_q.First();
   // ...................
   a_q.Close();
   a_q.SQL.Text := AStr;
end;

Сам параметр создаю заранее, тип ftWideString.

Так вот при первом проходе все ОК, а при втором эксепшн: в общей сложности из-за того что набор данных пустой (точно, проверял через IsEmpty).

В общем проверил, оказывается тип параметра после первого прохода постоянно сбрасывается (короче это тоже проверял, параметр там не ftWideString). После этого я начал задавать тип параметра name в ftWideString и все ОК.

Как мне не терять тип параметра???

P.S. Под конец проверил. У меня тип параметра должен быть ftWideString, а он сбравсывается в ftString. Вот зараза!!!


sniknik   (2004-03-14 12:55:00) [1]

Johnmen ©   (14.03.04 01:47) [3]
да так правильнее, просто этот код из тестов, там изначально стоит ftWideString но после теряется, (см. по ссылке, там долго разбирался) в этом случае все равно.


Johnmen   (2004-03-14 01:47:00) [2]

>sniknik ©  (13.03.04 18:27) [2]

Наверное, сначала тип, потом значение...


sniknik   (2004-03-13 18:27:00) [3]

ааа..., значит и с TADOQuery в параметрах проблемы... ;о))
почитай по предыдущему
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1078829501&n=1
выводы

и лутше задавай явно всегда не надейся на установленое в десигд тайме (хотя иногда это работает, но получается что ненадежно)
так
a_q.Parameters[0].Value:= Name.Text;
a_q.Parameters[0].DataType:= ftWideString;
или
a_q.Parameters.ParamByName('name').Value:= Name.Text;
a_q.Parameters.ParamByName('name').DataType:= ftWideString;


ЮЮ   (2004-03-13 02:30:00) [4]

>Как мне не терять тип параметра???

1) задавать явно (что ты и делал), т.к. при изменении a_q.SQL.Text параметры пересоздаются

2) запоминать(и восстанавливать) не только a_q.SQL.Text, но и a_q.Parameters

И вообще, IMHO, на кой трогать этот Query, если он действтьельно затем ещё раз используется? Не проще так:

var a_q : TAdoQuery;

begin
 a_q := TAdoQuery.Create(nil);
 try    
   a_q.Connection := ...;
   a_q.SQL.Text := 'select * from table1 where name = :name';
   a_g.Parameters.Items[0].Value := '<some_str>';
   a_q.Open();
   // ...................
 finally
   a_q.Free;
 end;


Наверх

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