Вниз
Скачать: CL | DM;

Сбрасывается типа параметра в TADOQuery с ftWideString -> ftStrin   Найти похожие ветки 

← →
Rauf ©   (2004-03-13 01:48) [0]

Есть 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. Вот зараза!!!


← →
ЮЮ ©   (2004-03-13 02:30) [1]

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

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;


← →
sniknik ©   (2004-03-13 18:27) [2]

ааа..., значит и с TADOQuery в параметрах проблемы... ;о))
почитай по предыдущему
http://delphimaster.net/view/3-1078829501/
выводы

и лутше задавай явно всегда не надейся на установленое в десигд тайме (хотя иногда это работает, но получается что ненадежно)
так
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;


← →
Johnmen ©   (2004-03-14 01:47) [3]

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

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


← →
sniknik ©   (2004-03-14 12:55) [4]

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.036 c
3-1079080624
HeoGtan
2004-03-12 11:37
2004.04.11
Вопрос по D7+IB 6.5


3-1081586401
Laymer
2004-04-10 12:40
2004.04.11
Lookup в DBE


3-1079349068
Russko
2004-03-15 14:11
2004.04.11
AutoInc Field


14-1081927508
Kerk
2004-04-14 11:25
2004.04.11
Конституция


14-1082378534
Yanis
2004-04-19 16:42
2004.04.11
HTML




   Наверх