Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Вниз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?
…
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…
← →
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]Блин видно причина не в этом…
Вызывал так:Query.Parameters.FindParam(S).Value := Report.Questions[I].GetVariantFromValue
А FindParam возвращяло nil… отсюда и ав.
Я не пойму.
Если я сделаю так:
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Что когда пишу ког, это выясняется только в ран тайме…
← →
Reindeer Moss Eater © (2007-10-16 16:28) [16]Что за исключение-то?
Щас выяснится, что там обычный AV.
← →
Kolan © (2007-10-16 16:29) [17]Странно сволоч он…
В тексте естьON A.cdcard = B.cdcard
WHERE cdpackage = :PackageID) AS C
Parametr := Query.Parameters.FindParam("PackageID"); возвращает nilQuery.Parameters.Items[0].Name;
— ругается что out of bound 0
А при Open говорит что не все параметры переданы…
← →
Reindeer Moss Eater © (2007-10-16 16:31) [18]так что хоть Value хоть AsString - здесь разницы не будет
← →
Kolan © (2007-10-16 16:33) [19]Может надо что-то вызвать, чтобы он из текста эти параметры нашел… Почему список пустой…
> так что хоть 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Инт)
…
Незнаю я этого пока пишу, придется делать для разных типов…
← →
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");
Нашел параметр…
Что за
← →
Kolan © (2007-10-16 16:49) [27]
> [24] KSergey © (16.10.07 16:43)Query.Parameters.ParseSQL(Query.SQL.Text, True);
Помогло! Что это было — хз…
← →
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;
И все сам он находил…
← →
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 бездумно ставишь, помнишь?
Помню, не трогаю я его. В данном случае запрос вообще на дата модуль кинуть пришлось(для очётов). Как кинул ничего в нем не крутил…
Это ADO. Здесь так не работает.
Так везде ADO, я только про адо и говорю…
← →
KSergey © (2007-10-16 18:29) [36]> Kolan © (16.10.07 17:30) [35]
> Так везде ADO, я только про адо и говорю…
Ааа.
Оно как-то хитро зависит от самого запроса. Вернее - похоже там котрый "автоматический" анализатор - он не всегда умеет нормально разбирать.
В причины сего я не вдавался.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.053 c