Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизСбрасывается типа параметра в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c