![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сбрасывается типа параметра в 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;