Автор | Сообщение |
|
| постоянный участник
|
Пост 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
|
|
|
Ответов - 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 );
|
|
|
|
| Администратор
|
Пост N: 1144
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.05.09 16:57. Заголовок: Я посмотрел нескольк..
Я посмотрел несколько программ, созданных с помощью vfp, delphi и clipper Там байт года после 2000 формируется по правилам: iYear - 2000 А в Харборе: iYear - 1900
|
|
|
|
| постоянный участник
|
Пост 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:" - сделано) на дату файла, а не на дату в заголовке базы... небольшой лишний геморройчик - но что делать :)
|
|
|
|
| Администратор
|
Пост N: 1145
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.05.09 13:07. Заголовок: Проблема 2000 года :..
Проблема 2000 года :) однако
|
|
|
|