Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1284816023
KuJIoBaT
2010-09-18 17:20
2010.12.12
ValueListEditor


15-1283856091
бумбум
2010-09-07 14:41
2010.12.12
Резервное копирование базы MS SQL 2000


15-1283511204
DVM
2010-09-03 14:53
2010.12.12
Помогите с переводом на английский одного слова


2-1284658401
HF-Trade
2010-09-16 21:33
2010.12.12
WinInet GET и POST запросы


2-1285046320
И. Павел
2010-09-21 09:18
2010.12.12
Сортировка в TListView через stdcall функцию





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский