Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: 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 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1080213368
Furkan
2004-03-25 14:16
2004.04.11
runtime + console


1-1082565969
Bestden
2004-04-21 20:46
2004.04.11
Как с помощью цикла перевести из десятка edit в массив?


1-1079792412
A JI E LLI A
2004-03-20 17:20
2004.04.11
Есть ли в Дельфях функция округления до целого числа?


14-1082143031
juiceman
2004-04-16 23:17
2004.04.11
Я так устал...


1-1082378784
Term
2004-04-19 16:46
2004.04.11
MDI-формы вопрос такой........