Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];

Вниз

можно увидеть коментарии специалистов!!! Frac(***)-Error   Найти похожие ветки 

 
SergeyDon   (2003-12-09 14:29) [0]

procedure ---.FormCreate(Sender: TObject);
const b : array[0..7] of byte = ($ff,$ff,$ff,$ff,$df,$85,$e2,$40);
const c : array[0..7] of byte = ($00,$00,$00,$00,$e0,$85,$e2,$40);
var st1,st2 : string;
dt1 : TDateTime;
dt2 : TDateTime;
P:pointer;
begin
p:=@dt1;
MoveMemory(p,@b,8);
p:=@dt2;
MoveMemory(p,@c,8);
st1:=FormatDateTime("d.m.y / h:n:s:z",dt1);
st2:=FormatDateTime("d.m.y / h:n:s:z",dt2);
if CompareTime(dt1,dt2)<>0 then
ShowMessage("Delphi no BAG");
if CompareTime(dt1,dt2)<>0 then
ShowMessage("Delphi BAG");
end;


 
Murad   (2003-12-09 14:40) [1]

Так что здесь не так... что тебе не нравится... что вообще происходит.. и где в этом коде Frac(***) ???!!!


 
Skier   (2003-12-09 14:43) [2]

MoveMemory(p ^,@b,8);
p:=@dt2;
MoveMemory(p ^,@c,8);


 
Digitman   (2003-12-09 14:45) [3]

для начала строчки

p:=@dt1;
MoveMemory(p,@b,8);
p:=@dt2;
MoveMemory(p,@c,8);

замени на

dt1:=PDateTime(@b)^;
dt2:=PDateTime(@c)^;

никчему эти извращения с явным копированием - компилятор все сделает сам и , как видишь, гораздо изящней-эффективней

ты хочешь сказать, что при выполнении первой же строчки с CompareTime() фозникает исключение ?


 
Skier   (2003-12-09 14:46) [4]

Oops !
MoveMemory(p^,b,8);
p:=@dt2;
MoveMemory(p^,c,8);

Брать указатель не нужно...


 
Skier   (2003-12-09 14:54) [5]

Нужно ещё кастить на Pointer
MoveMemory(Pointer(p^),b,8);

И будет полный изврат...ищи другое решение...см. [3]


 
Murad   (2003-12-09 14:55) [6]

Особенно меня радует в этом коде что сообщения об отсутствии (присутствии) ошибки светятся при одинаковых условиях :))))

if CompareTime(dt1,dt2)<>0 then
ShowMessage("Delphi no BAG");

if CompareTime(dt1,dt2)<>0 then
ShowMessage("Delphi BAG");


 
Skier   (2003-12-09 15:06) [7]

Мда...что-то я бред написал...
Но всё равно не пойму причём тут MoveMemory ?


 
Digitman   (2003-12-09 15:07) [8]


> сообщения об отсутствии (присутствии) ошибки светятся при
> одинаковых условиях


что значит "светятся" ? ты же САМ последовательно выводишь оба диал.окна ! Условие-то одинаково и там и там, тексты сообщений лишь разные

и где здесь "ошибка" ? условие действительно выполняется, ибо содержимое переменных dt1 и dt2 действительно различно


 
Digitman   (2003-12-09 15:08) [9]


> Skier © (09.12.03 15:06) [7]


> всё равно не пойму причём тут MoveMemory


ну надо ему копию сделать !

мало ли чего он задумал)


 
Murad   (2003-12-09 15:08) [10]

2Digitman © Я о том и говорю... я не автор этой ветки.. вы меня так не позорьте :))))


 
Skier   (2003-12-09 15:10) [11]


> ну надо ему копию сделать !

хм...какой-то странный способ,вестимо...


 
Murad   (2003-12-09 15:11) [12]

Похоже автор нам больше ничего не ответит - предлагаю считать эту ветку - провокацией...


 
Digitman   (2003-12-09 15:14) [13]


> Murad


я дико извиняюсь !)


 
Murad   (2003-12-09 15:15) [14]

2Digitman ©
Ничего, бывает :)))

Если автора нет - то надо выбрать "кто за него" :)))))


 
Digitman   (2003-12-09 15:18) [15]

я уж тут грешным делом подумал, что "глюк" какой-то в CompareTime() в Д7 ... ведь на самом деле ф-ция по идее должна обращаться к Frac() ... а проверить не могу, Д5.5 под рукой только ...


 
Murad   (2003-12-09 15:25) [16]

2Digitman ©
Frac может вызываться и в FormatDateTime, которая в этом коде вообще непонятно для чего вызывается :)))


 
icWasya   (2003-12-09 16:57) [17]

наверно должно быть
if CompareTime(dt1,dt2)<>0 then
ShowMessage("Delphi no BAG");
if CompareTime(dt1,dt2)=0 then
ShowMessage("Delphi BAG");


а вопрос был такой :
почему
st1="10.11.2003 / 0:0:0:0";
и
st2="10.11.2003 / 0:0:0:0";

а

CompareTime(dt1,dt2)<>0
???

фишка здесь в том, что const b - это точно "10.ноября.2003 / 00:00:00:000" , а const c - это
"9.ноября.2003 / 23:59:59:999 999 371"

если вызвать функцию CompareDateTime(dt1,dt2), то она покажет, что эти даты равны, а если вызвать CompareTime(dt1,dt2), то выяснится, что 24 часа<>0


 
Digitman   (2003-12-09 17:06) [18]


> icWasya


это все понятно)

непонятно что есть "Frac(***)-Error ")


 
SergeyDon   (2003-12-09 17:14) [19]

Во первых прошу прощение опечатачка вышла правильно так:
if CompareDateTime(dt1,dt2)<>0 then
ShowMessage("Delphi no BAG");
if CompareTime(dt1,dt2)<>0 then
ShowMessage("Delphi BAG");

А вопроc та вовсе не по работе с памятью!
а втом что если посмотреть st1=st2 а
CompareDateTime <> CompareTime
при вызове CompareTime используется вызов Frac().
в масиве b и c (дамп памяти, я просто для примера упростил)
хранится представление дат равных между собой но при сравнении оказывается что это не так!!!
В принцыпе эта ветка пошла просто для информации вдруг кто сталкнётся с такой проблемой, чтобы долго не парились а знали что и так бывает. мне интересно было кто как борится с этой проблемой.


 
Digitman   (2003-12-09 17:18) [20]


> хранится представление дат равных между собой


не соответствует действительности


> вдруг кто сталкнётся с такой проблемой


проблемы вообще нет никакой - все вполне понятно и очевидно


 
KSergey   (2003-12-09 17:30) [21]

> [17] icWasya © (09.12.03 16:57)
> а вопрос был такой :

Не, ну можем же напрячь телепатические способности, когда хотим, а? ;)
А то вечно вопрос им разжуй, чуть что не так - "телепатов здесь нет!", а тут и вопроса-то нет - а какое обсуждение!! Или это только я недалекий ничего не понял? ;)


 
SergeyDon   (2003-12-10 09:29) [22]

для окончания могу лиш только сказать, что ситуация возникает по непонятным для меня причинам.
есть база в которой есть поле DateTime. Обращаюсь к базе например к полю 24 читаю дату и данные получаю дату в виде
"10.11.2003 / 0:0:0:0":$00,$00,$00,$00,$e0,$85,$e2,$40
а если в запросе читать поля 20-30 то в поле 24 получаю дату в виде
"10.11.2003 / 0:0:0:0":$ff,$ff,$ff,$ff,$df,$85,$e2,$40
при сравнении как CompareDateTime то всё ОК! так как нет вызова Frac, а сравнивается только (dt1-dt2)
при сравнении как CompareTime то всё noОК! так как есть вызов Frac, и при сравнении получаем сотые-милисикунды разници.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.008 c
9-75064
s-k
2003-05-26 07:45
2003.12.23
Квесты


14-75352
Sergeef
2003-11-28 00:19
2003.12.23
Написание игр на Delphi...Целесообразно ли это?


3-75114
BlackKing
2003-11-27 11:28
2003.12.23
Как составить SQL запрос?


7-75413
Санёк
2003-10-19 16:53
2003.12.23
Помогите плиз


14-75328
Мазут Береговой
2003-11-30 10:30
2003.12.23
Помните давки в магазинах?





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