Внутренний формат TDate [Решено]

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Внутренний формат TDate [Решено]

Сообщение sign » 15.07.2011 07:37:00

Тут возникла нужда напрямую прочитать файл *.db из парадокса.
С самим чтением и и вытаскиванием данных проблем нет, в сети есть структура таблиц БД парадокса.
Но, не могу (я не профессионал-программист, а так, для себя) распознать формат Дата в таблице.
Например, дата - 30.11.2011
В Лазарусе в кишках -
Код: Выделить всё
TDate: 0 0 0 0 60 F0 E3 40

в таблице парадокс та же дата
Код: Выделить всё
Data: 80 0B 35 25

Кто подскажет, как перевести одно в другое? Или где об этом почитать?

На всякий случай.
В Лазарусе смотрел вот так
Код: Выделить всё
procedure tst;
var i: Integer;
    V: array[1..16] of Byte;
    D: TDate;
begin
  FillByte(V, SizeOf(V), 0);
  D := StrToDate('30.12.2011');
  Move(D, V[1], SizeOf(D));
  StaticText1.Caption := '';
  for i := 1 to SizeOf(V) do
    StaticText1.Caption := StaticText1.Caption + IntToStr(V[i]) + ' ';
end; 


В таблице смотрел WinHex`ом.
Последний раз редактировалось sign 15.07.2011 12:20:00, всего редактировалось 1 раз.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Внутренний формат TDate

Сообщение Vadim » 15.07.2011 08:30:21

TDate в Лазарусе - это число типа Double, у которого отсутствует дробная часть, точнее, дробная часть равна нулю. А вот целая часть числа - это сколько дней прошло с даты 30 декабря 1899 года. Имеет размер, как Вы видите, 8 байт. На чём основано летоисчисление Paradox я не помню, уже лет 20 как не работал с этим типом данных :)
Хочу сказать, что Вы совершенно зря напрямую читаете парадоксовские файлы. В Лазарус есть специальный компонент для этого. Устанавливается из каталога components\paradox. И он читает парадоксовские файлы вполне пристойно, причём сразу же представляя данные из полей в паскалевском виде, т.е. Вам не надо ничего преобразовывать. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Внутренний формат TDate

Сообщение sign » 15.07.2011 09:49:33

Компонент-то есть, вот pxlib.dll, который он просит - нет.
Порыл по интернету, только для линукса нашёл, под ведро нет.

Нашёл исходники, но они на С.
Сейчас со страшным скрипом пытаюсь прочитать, где и как он переводит данные из формата Парадокса. :cry:
Может и получится, а может и нет, я в сях совсем никак.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Внутренний формат TDate

Сообщение Vadim » 15.07.2011 09:56:40

sign
TParadox : Dataset wich can handle paradox files, based on PXLib.
pxlib is an open source C library for handling paradox files. It is available from sourceforge:
http://pxlib.sourceforge.net/

;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Внутренний формат TDate

Сообщение sign » 15.07.2011 10:19:20

Не, не разберусь, много и дофига всякого.

Добавлено спустя 58 секунд:
Vadim писал(а):sign
TParadox : Dataset wich can handle paradox files, based on PXLib.
pxlib is an open source C library for handling paradox files. It is available from sourceforge:
http://pxlib.sourceforge.net/

;)

Я про это и говорил - исходники на С.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Внутренний формат TDate

Сообщение Vadim » 15.07.2011 10:27:06

sign писал(а):Я про это и говорил - исходники на С.

Обманываете, дружище. аяяй :-) Внутри сидит DLL-ка собственной персоной.
http://sourceforge.net/projects/pxlib/f ... z/download
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Внутренний формат TDate

Сообщение sign » 15.07.2011 10:32:18

О! Спасибо.
Видать я мимо промахивался и скачивал исходники, а до скомпилированных библиотек не смог добраться.
Сейчас, бум проверять!

Добавлено спустя 3 минуты 22 секунды:
И последний вопрос, а куда её воткнуть, чтоб Лазарус видел?

Добавлено спустя 13 минут 39 секунд:
Запустил пример, прилагаемый к компоненте - так там просит библиотеку libpx.so.0 :(
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Внутренний формат TDate

Сообщение Brainenjii » 15.07.2011 10:56:45

если в линуксе дело, то вполне вероятно в /usr/lib[64]. При необходимости - сделать соответствующий симлинк
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Внутренний формат TDate

Сообщение Vadim » 15.07.2011 11:07:17

sign писал(а):И последний вопрос, а куда её воткнуть, чтоб Лазарус видел?

В c:\windows\system32
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Внутренний формат TDate

Сообщение sign » 15.07.2011 11:55:22

Увы мне, и так проблемы.

Вот что происходит, когда в system32 кладу

Первое сообщение:
1.png


Следующее:
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Внутренний формат TDate

Сообщение Vadim » 15.07.2011 12:00:36

sign
Ну так дайте ему iconv.dll, чтоб не плакал...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Внутренний формат TDate

Сообщение sign » 15.07.2011 12:04:23

И точно.
И что я не догадался?
Пошел искать этот iconv.dll

Добавлено спустя 12 минут 16 секунд:
Всё, спасибо!!!

Нашел на компе эту штуку, аж кучу целую.
Взял от MySQL, закинул винвовсу во-внутрь и всё заработало!

Ещё раз спасибо, Vadim, за помощь.

Добавлено спустя 4 минуты 2 секунды:
Re: Внутренний формат TDate [Решено]

Решение (Win XP):

Установить компонент paradox из библиотеки компонент Лазаруса.

Пойти в интернет и скачать библиотеку pxlib.dll, вот отсюда - http://sourceforge.net/projects/pxlib/f ... z/download
Найти на компе (часто она всяко разно есть) библиотеку iconv.dll

Зкинуть обе их а windows\system32


Задача решена.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53


Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru