On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 89
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 19.05.09 14:42. Заголовок: глюк в LUpdate()?


Пользую HMG 1.6.63 (Harbour 1.1.0dev) (2009-02-25)

Хотел банально узнать дату последней модификации базы - LUpdate() возвращает (вне зависимости от SET EPOCH) дату на 100 лет раньше (не 2009, а 1909)

Для примера - кусок кода из DBFView (Григория) и скриншот результата (база, естественно, последний раз правилась в 2009-м):
    DEFINE LABEL Label_33 
ROW 66
COL 100
WIDTH 120
HEIGHT 21
VALUE DtoC( (aArea[nFocus])->( LupDate() ) )
VISIBLE .T.
AUTOSIZE .F.
END LABEL

...и имеем такое (в окне "Table Properties"):

 Created:       15.04.1909 
Modified: 15.04.2009 13:01:10


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]


Администратор




Пост N: 1143
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.05.09 15:24. Заголовок: Возможно, этот файл ..


Возможно, этот файл создан не харбором, в харборе я глюка не увидел
Согласно спецификации xBase, 2-й байл заголовка - это год модификации - 1900, т.е. в диапазоне 1900 - 2155

Харбор формирует этот байт правильно:

см. hb_dbfWriteDBHeader:

pArea->dbfHeader.bYear = ( BYTE ) ( iYear - 1900 );

и считывает тоже правильно:

case DBI_LASTUPDATE:
hb_itemPutD( pItem, 1900 + pArea->dbfHeader.bYear,
pArea->dbfHeader.bMonth,
pArea->dbfHeader.bDay );



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1144
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.05.09 16:57. Заголовок: Я посмотрел нескольк..


Я посмотрел несколько программ, созданных с помощью vfp, delphi и clipper
Там байт года после 2000 формируется по правилам: iYear - 2000
А в Харборе: iYear - 1900


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 90
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 20.05.09 12:46. Заголовок: База создана то ли в..


База создана то ли в DBU, то ли в старом Foxpro... но это неважно - просто получается, что, не зная, в чем создана (или чем последний раз "трогалась") база, не имеем возможности получить верный результат из LUpdate().

Видимо, придется делать банально - что-то типа:
 set date british 
set century on
set epoch to 1905
...
d1:=BAZA->(LUpdate())
if year(d1)<1990
d1:=ctod( stuff( dtoc(d1), 7, 1, "2" ) )
endif

или вообще ориентироваться (как там же - в DBFView, в строчке с "Modified:" - сделано) на дату файла, а не на дату в заголовке базы...

небольшой лишний геморройчик - но что делать :)

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1145
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.05.09 13:07. Заголовок: Проблема 2000 года :..


Проблема 2000 года :) однако

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 16
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет