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

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

Variant := := StrToInt('1') приводит к исключению, почему?


Страницы:   1 2

Kolan ©   (2007-10-16 16:05:00) 

Сабж.

Делаю так:
function TQuestion.GetVariantFromValue: Variant;
begin
 Result := 1;
 case FDataType of
   dtInteger:
     Result := StrToInt('1');
   dtFloat:
     Result := StrToFloat(Value);
   dtString:
     Result := Value;
   dtDateTime:
     Result := StrToDateTime(Value);
 end;
end;


А может мне это вообще не надо.

Есть ADOQuery
И параметр в запросе. Вот в этот параметр надо положить значание. Значение — это всегда строка, а параметр любой, например int, может можно обойтись без GetVariantFromValue?
…
Query.Parameters.FindParam(S).Value := '1';


KSergey   (2007-10-16 18:29:00) [1]

> Kolan ©   (16.10.07 17:30) [35]
> Так везде ADO, я только про адо и говорю…

Ааа.
Оно как-то хитро зависит от самого запроса. Вернее - похоже там котрый "автоматический" анализатор - он не всегда умеет нормально разбирать.
В причины сего я не вдавался.


Kolan   (2007-10-16 17:30:00) [2]

> а всо то же Query.ParamCheck бездумно ставишь, помнишь?

Помню, не трогаю я его. В данном случае запрос вообще на дата модуль кинуть пришлось(для очётов). Как кинул ничего в нем не крутил…

Это ADO. Здесь так не работает.
Так везде ADO, я только про адо и говорю…


Reindeer Moss Eater   (2007-10-16 17:04:00) [3]

Это пипец и так делать нельзя.

Может и так.
Но тогда метода FindParam с аргументом <имя параметра> вообще не должно быть.


KSergey   (2007-10-16 17:02:00) [4]

> Kolan ©   (16.10.07 16:52) [30]
> И все сам он находил…

Это ADO. Здесь так не работает.


Правильный_Вася   (2007-10-16 17:02:00) [5]


> И все сам он находил…

а всо то же Query.ParamCheckбездумно ставишь, помнишь?


KSergey   (2007-10-16 17:01:00) [6]

> Reindeer Moss Eater ©   (16.10.07 16:51) [29]
> Чудная у борланда реализация. А если у меня не один параметр
> с таким именем?

Это пипец и так делать нельзя.
О чем и тут много раз сообщалось.
Стандарный выход из ситуации- объявление внутри SQL переменной, присвоение ей значения параметра и использование далее в тексте SQL запроса уже переменной.


Kolan   (2007-10-16 16:52:00) [7]

Хз так как писал всегда:

   Query.Connection := FDBConnection;
   Query.SQL.Add('SELECT * FROM CONF_USER');
   Query.SQL.Add('WHERE (NMUSER = :Login) AND (USERPASSWORD = :Password)');
   Query.Parameters.FindParam('Login').Value := Login;
   Query.Parameters.FindParam('Password').Value := Password;


И все сам он находил…


Reindeer Moss Eater   (2007-10-16 16:51:00) [8]

Чудная у борланда реализация. А если у меня не один параметр с таким именем?

function TParameters.FindParam(const Value: WideString): TParameter;
var
 I: Integer;
begin
 for I := 0 to Count - 1 do
 begin
   Result := TParameter(inherited Items[I]);
   if CompareText(Result.Name, Value) = 0 then Exit;
 end;
 Result := nil;
end;


KSergey   (2007-10-16 16:50:00) [9]

> Kolan ©   (16.10.07 16:49) [27]
> Query.Parameters.ParseSQL(Query.SQL.Text, True);
> Помогло! Что это было — хз…

При чем тут "хз"??! Вполне документировнное поведение.
Вы статейки-то проштудируйте. Там много чего пользительного понаписано.


Kolan   (2007-10-16 16:49:00) [10]


> [24] KSergey ©   (16.10.07 16:43)


Query.Parameters.ParseSQL(Query.SQL.Text, True);
Помогло! Что это было — хз…


Kolan   (2007-10-16 16:47:00) [11]

Блин дело в запросе:

Вот большой запрос там парамерт не находит:

  SELECT LTRIM(RTRIM(slsotr.famsotr)) + ' ' + LTRIM(RTRIM(slsotr.nmsotr)) + LTRIM(RTRIM(slsotr.otsotr)) AS [Property], 1-Sum(D.Factor)/Count(*) AS [Appraisal] FROM
   (SELECT A.cdsotr, B.cddefect FROM ExpertAppraisalCard AS A
   INNER JOIN ExpertAppraisalResult AS B
   ON A.cdcard = B.cdcard
   WHERE cdpackage = :PackageID) AS C
 INNER JOIN ExpertAppraisalDefect AS D
 ON C.cddefect = D.cddefect, slsotr
 WHERE C.cdsotr = slsotr.cdsotr
 GROUP BY C.cdsotr, LTRIM(RTRIM(slsotr.famsotr)) + ' ' + LTRIM(RTRIM(slsotr.nmsotr)) + LTRIM(RTRIM(slsotr.otsotr))


Ради эксперимента задал маленький запрос(понятно что бред наприса — это эксперимент):
Query.SQL.Add('SELECT * FROM :PackageID');
Нашел параметр…

Что за


KSergey   (2007-10-16 16:45:00) [12]

Удалено модератором


KSergey   (2007-10-16 16:43:00) [13]

> Kolan ©   (16.10.07 16:33) [19]
> Может надо что-то вызвать, чтобы он из текста эти параметры
> нашел… Почему список пустой…

Так ё-маё....

AdoQuery.Parameters.ParseSQL


Kolan   (2007-10-16 16:42:00) [14]

> Query.Parameters.FindParam(S).AsString := VarAsType(Value,
> varString)


Для инт:
Query.Parameters.FindParam(S).AsИнт := VarAsType(Value,
varИнт)

…

Незнаю я этого пока пишу, придется делать для разных типов…


Kolan   (2007-10-16 16:41:00) [15]

Удалено модератором


Ega23   (2007-10-16 16:39:00) [16]


> Query.Parameters.FindParam(S).AsString
> Я не незнаю AsЧто когда пишу ког, это выясняется только
> в ран тайме…
>


Query.Parameters.FindParam(S).AsString := VarAsType(Value, varString)
?


Reindeer Moss Eater   (2007-10-16 16:35:00) [17]

Надо смотреть исходники адо. А косяков там вагон и маленькая тележка.


Kolan   (2007-10-16 16:33:00) [18]

Может надо что-то вызвать, чтобы он из текста эти параметры нашел… Почему список пустой…


> так что хоть Value хоть AsString — здесь разницы не будет

Млин, а я нагородил :(


Reindeer Moss Eater   (2007-10-16 16:31:00) [19]

так что хоть Value хоть AsString - здесь разницы не будет


Kolan   (2007-10-16 16:29:00) [20]

Странно сволоч он…
В тексте есть
ON A.cdcard = B.cdcard
   WHERE cdpackage = :PackageID) AS C


Parametr := Query.Parameters.FindParam('PackageID'); возвращает nil
Query.Parameters.Items[0].Name;— ругается что out of bound 0
А при Open говорит что не все параметры переданы…


Страницы:   1 2

Наверх

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