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

Вниз

Что-то не понимаю 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.01 c
2-1284978574
khrenkov
2010-09-20 14:29
2010.12.12
Проблемы с записью/чтением типизированного файла


2-1284466539
faiwer
2010-09-14 16:15
2010.12.12
Горячие клавиши


15-1283507963
Медвежонок Пятачок
2010-09-03 13:59
2010.12.12
про кита


6-1205493435
macrodens
2008-03-14 14:17
2010.12.12
Список сетевых подключений


4-1241873558
pushkin42
2009-05-09 16:52
2010.12.12
Получить список файлов драйвера для устройства