Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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?
&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.057 c
11-1177177531
bessam
2007-04-21 21:45
2007.11.11
BitBtn.Enabled := False , а по виду надписи не скажешь.


2-1192691195
F@T@L_Err0r
2007-10-18 11:06
2007.11.11
COM1


2-1192688725
kyn66
2007-10-18 10:25
2007.11.11
Параметры Метки в реестр


2-1192681670
Levitch
2007-10-18 08:27
2007.11.11
Компонент ADOQuery


2-1192950932
hT9
2007-10-21 11:15
2007.11.11
Listview повторы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский