Форум: "Прочее";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];
ВнизЧто-то не понимаю tDateTime и Variant, раньше работало или путаю? Найти похожие ветки
← →
12 © (2010-09-06 16:37) [0]Задача взять дату без времени, пишу
V:Variant;
V := tDateTime(int(dtFromAW.Date));
ругается
[Error] uReport.pas(310): Invalid typecast
по-моему, раньше так делал - не ругалось никогда
что не так теперь?
← →
nobody (2010-09-06 16:43) [1]а разве dtFromAW.Date не является типом tDateTime?
в чем смысл такого преобразования?
← →
Ega23 © (2010-09-06 16:43) [2]
procedure TForm6.Button2Click(Sender: TObject);
var
v1, v2: Variant;
begin
v1 := Now;
VarCast(v2, v1, varInteger);
ShowMessage(IntToStr(v2));
end;
← →
12 © (2010-09-06 16:51) [3]
> Ega23 © (06.09.10 16:43) [2]
спасибо,
придется правда еще переменную вводить..
> а разве dtFromAW.Date не является типом tDateTime?
> в чем смысл такого преобразования?
Является, но т.к. вариант - почему то потом начинает думать что это целое.
т.е. пишуOpenQ(oqDetailAW,
" select * from AGENTS A "+
" join CONTRACT C on C.AGENT_ID = A.ID_AGENT "+
" join SUBSCRIBER S on S.ID_SUBSCRIBER = C.SUBSCRIBER_ID "+
" where A.ID_AGENT = :ID_AGENT and C.DATA_SUB between :FDTAW and :SDTAW and A.FILIAL_ID = :FID ",
[oqAgentWork.FieldByName("ID_AGENT").AsInteger, tDateTime(dtFromAW.Date), tDateTime(dtToAW.Date), MyFilial]);
гдеprocedure OpenQ(const Q:tORAQuery; const SQL:string; const P:array of variant);
var
i:integer;
s:string;
begin
try
Q.SQL.Text := SQL;
s := "";
for i := 0 to Q.ParamCount-1 do
begin
Q.Params[i].Value := P[i]; - тут начинает кричать, что не дату дали, а число. А если явно приводить к tDateTime - не кричит.
s := s + Q.Params[i].Name + "=" + Q.Params[i].AsString + #13#10;
end;
Q.Open;
except
on E:Exception do
begin
E.Message := E.Message + #13#10 + "uUtils. procedure OpenQ." + #13#10 + Q.SQL.Text + #13#10 + s;
Raise;
end;
end;
end;
← →
Игорь Шевченко © (2010-09-06 16:59) [4]for i := 0 to Q.ParamCount-1 do
begin
case Q.Params[i].datatype of
...
← →
Ega23 © (2010-09-06 17:01) [5]
Q.Params[i].Value := P[i]
case Q.Params[i].DataType of
......
dtDateTime: Q.Params[i].AsDateTime := P[i];
......
end;
Как-то так, не?
← →
sniknik © (2010-09-06 17:06) [6]> Задача взять дату без времени
V := StartOfTheDay(dtFromAW.DateTime);
← →
12 © (2010-09-06 17:16) [7]
> StartOfTheDay
да, работает, спасибо
аtry
Q.SQL.Text := SQL;
s := "";
for i := 0 to Q.ParamCount-1 do
begin
case Q.Params[i].DataType of
ftDateTime: Q.Params[i].AsDateTime := P[i];
else Q.Params[i].Value := P[i];
end;
s := s + Q.Params[i].Name + "=" + Q.Params[i].AsString + #13#10;
end;
Q.Open;
except
on E:Exception do
begin
E.Message := E.Message + #13#10 + "uUtils. procedure OpenQ." + #13#10 + Q.SQL.Text + #13#10 + s;
все равно плюется
EOraError
ORA-00932: inconsistent datatypes: expected DATE got NUMBER
uUtils. procedure OpenQ.
select * from AGENTS A
join CONTRACT C on C.AGENT_ID = A.ID_AGENT
join SUBSCRIBER S on S.ID_SUBSCRIBER = C.SUBSCRIBER_ID
where A.ID_AGENT = :ID_AGENT and C.DATA_SUB between :FDTAW and :SDTAW
and A.FILIAL_ID = :FID
ID_AGENT=0
FDTAW=40427
SDTAW=40427
FID=13
← →
12 © (2010-09-06 17:22) [8]а там стоит тоже самое почти
function StartOfTheDay(const AValue: TDateTime): TDateTime;
begin
Result := Trunc(AValue);
end;
прикольно..
← →
Игорь Шевченко © (2010-09-06 17:24) [9]
> ORA-00932: inconsistent datatypes: expected DATE got NUMBER
осталось из тебя вытащить клещами, как объявлены параметры и типы полей, которым они соответствуют.
← →
Ega23 © (2010-09-06 17:25) [10]
> а там стоит тоже самое почти
Это не то же самое.
← →
Игорь Шевченко © (2010-09-06 17:26) [11]
> Q.SQL.Text := SQL;
вот здесь бы надо сделать Prepare и описать все параметры. Потому что в противном случае у них у всех тип ftUnknown (мне так видится отсюда)
← →
12 © (2010-09-06 17:44) [12]
> вот здесь бы надо сделать Prepare и описать все параметры.
Игорь, спасибо, но думаю, проще будет на вызывающего возложить. Пусть корретно типы сам передает.
Конечно, по-хорошему бы надо разобраться тут. Но работает и что-то домой уже пора :)
>> Это не то же самое.
Как?
StartOfTheDay
the Trunc function truncates a real-type value to an integer-type value
и явно приводит к tDateTime.
Я, в принципе, тоже самое писал, только не не к an integer-type value, а Int returns the integer part of X.
Int(X: Extended): Extended;
Ну а какая разница для даты, точно полночь или хрендесятых секунды вправо-влево
Все равно прикольно. Пишу явно (чтоб без посредников в виде StartOfTheDay )
tDateTime(trunc(dtToAW.Date)) и
StartOfTheDay(dtFromAW.Date)
в первом случае ругается, во втором нет(и работает верно).
← →
Игорь Шевченко © (2010-09-06 18:15) [13]12 © (06.09.10 17:44) [12]
Когда ты явно присваиваешь значение по типу параметра (AsDateTime...) то тип параметра выставляется согласно присваиванию, когда присваиваешь Value, то ... как повезет
← →
Ega23 © (2010-09-06 19:28) [14]
> Как?
Приведения типов-то нету.
← →
sniknik © (2010-09-06 19:32) [15]> когда присваиваешь Value, то ... как повезет
да нет, все четко. первое присвоение определяет тип параметра (до этого оно "анкноун"), последующие, с уже определенным типом Value, значения при присвоении преобразовываются к нему, тому что определен.
если задать тип самому, до присвоений, то и на первом будет преобразование.
> в первом случае ругается
похоже компилятор "играет на понижение" и раз встретился в присвоении/строке базовый тип он и берется. хотя это и странно.
попробуй это в функцию впихнуть, с явным возвращаемым типом. будут влиять привидения типов внутри?
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c