Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

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

 
Kolan ©   (2007-10-16 16:05) [0]

Сабж.

Делаю так:
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?
&#133
Query.Parameters.FindParam(S).Value := "1";


 
Kolan ©   (2007-10-16 16:09) [1]

Variant := StrToInt("1")
Ессо


 
Reindeer Moss Eater ©   (2007-10-16 16:10) [2]

К исключению приводит не StrToInt


 
Kolan ©   (2007-10-16 16:11) [3]

> К исключению приводит не StrToInt

Да, а присвоение к Variant(имхо), а почему?


 
Reindeer Moss Eater ©   (2007-10-16 16:13) [4]

Потому что "variant" - неудачное имя для идентификатора


 
Kolan ©   (2007-10-16 16:14) [5]

> Потому что «variant» — неудачное имя для идентификатора

Так я хочу вернуть тип Variant, почему не удачное?


 
Reindeer Moss Eater ©   (2007-10-16 16:16) [6]

А где это видно что ты хочешь?


 
Kolan ©   (2007-10-16 16:18) [7]

> А где это видно что ты хочешь?

Result :=
Вот хочу и присваиваю к Result&#133


 
KSergey ©   (2007-10-16 16:19) [8]

> Kolan ©   (16.10.07 16:09) [1]
> Variant := StrToInt("1")
> Ессо

Вот это как раз не "ессо".
Это зачем?? Вариант в посте ведь верный (на вид). В нем magic переменная Result имеет тип Variant.
А что написано в [1]  и куда и зачем = мне не понятно.


 
Ega23 ©   (2007-10-16 16:19) [9]

StrToInt("1");

Кавычки для кого?


 
Ega23 ©   (2007-10-16 16:20) [10]


> Ega23 ©   (16.10.07 16:19) [9]


Пардон, с IntToStr перепутал


 
KSergey ©   (2007-10-16 16:20) [11]

> KSergey ©   (16.10.07 16:19) [8]
> Вариант в посте ...

Имелось в виду "Вариант программы, приведенный в изначальном посте".


 
Kolan ©   (2007-10-16 16:21) [12]

Блин видно причина не в этом&#133
Вызывал так:
Query.Parameters.FindParam(S).Value := Report.Questions[I].GetVariantFromValue

А FindParam возвращяло nil&#133 отсюда и ав.

Я не пойму.
Если я сделаю так:
Query.Parameters.FindParam(S).Value := "1";

А в запросе параметр должен быть int он сам перекодирует?


 
Игорь Шевченко ©   (2007-10-16 16:22) [13]


> Query.Parameters.FindParam(S).Value := "1";


Query.Parameters.FindParam(S).AsString := "1" ?


 
KSergey ©   (2007-10-16 16:23) [14]

> Kolan ©   (16.10.07 16:21) [12]
> Если я сделаю так:
> Query.Parameters.FindParam(S).Value := "1";
>
> А в запросе параметр должен быть int он сам перекодирует?
>

Может и да, но зачем заставлять компьютер делать какую-то неочевидную работу?


 
Kolan ©   (2007-10-16 16:27) [15]

> Может и да, но зачем заставлять компьютер делать какую-то
> неочевидную работу?

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


 
Reindeer Moss Eater ©   (2007-10-16 16:28) [16]

Что за исключение-то?
Щас выяснится, что там обычный AV.


 
Kolan ©   (2007-10-16 16:29) [17]

Странно сволоч он&#133
В тексте есть
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 говорит что не все параметры переданы&#133


 
Reindeer Moss Eater ©   (2007-10-16 16:31) [18]

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


 
Kolan ©   (2007-10-16 16:33) [19]

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


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

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


 
Reindeer Moss Eater ©   (2007-10-16 16:35) [20]

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


 
Ega23 ©   (2007-10-16 16:39) [21]


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


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


 
Kolan ©   (2007-10-16 16:41) [22]

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


 
Kolan ©   (2007-10-16 16:42) [23]

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


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

&#133

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


 
KSergey ©   (2007-10-16 16:43) [24]

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

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

AdoQuery.Parameters.ParseSQL


 
KSergey ©   (2007-10-16 16:45) [25]

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


 
Kolan ©   (2007-10-16 16:47) [26]

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

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

 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");
Нашел параметр&#133

Что за


 
Kolan ©   (2007-10-16 16:49) [27]


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


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


 
KSergey ©   (2007-10-16 16:50) [28]

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

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


 
Reindeer Moss Eater ©   (2007-10-16 16:51) [29]

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

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;


 
Kolan ©   (2007-10-16 16:52) [30]

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

   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;


И все сам он находил&#133


 
KSergey ©   (2007-10-16 17:01) [31]

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

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


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


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

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


 
KSergey ©   (2007-10-16 17:02) [33]

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

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


 
Reindeer Moss Eater ©   (2007-10-16 17:04) [34]

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

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


 
Kolan ©   (2007-10-16 17:30) [35]

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

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

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


 
KSergey ©   (2007-10-16 18:29) [36]

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

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



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

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

Наверх




Память: 0.55 MB
Время: 0.02 c
2-1192602435
O.O
2007-10-17 10:27
2007.11.11
ScrollBars в DBGrid


2-1192457940
foreverDelphi
2007-10-15 18:19
2007.11.11
как вывести текст


15-1191501823
Alkid
2007-10-04 16:43
2007.11.11
Common LISP - посоветуйте


15-1192019663
ANTPro
2007-10-10 16:34
2007.11.11
У кого есть книга Ф. Юань — Программирование графики для Windows


2-1192461964
тим
2007-10-15 19:26
2007.11.11
кнопка в заголовке