Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 934

/ вопрос открыт /

Приветствую, уважаемые эксперты!

Есть таблица DBF программы на Visual FoxPro 9.
В нём первые три столбца типа Binary
(Частично разбиралось в вопросе № 1894)

Так вот этот тип отображается в StringGrid точно также как и в самом Visual FoxPro 9 (см. скриншоты) - в виде "палочек" и

Как мне получить нормальные числа?
Насколько мне известно из тех байтов, что в первых трёх столбцах получают запись вида

00080.00022.0000000005

Где числа - примерные.
Это какой-то внутренний идентификатор, по которому и происходит поиск, это первичные ключи вроде.
Т.е. ID - это вроде ключ таблицы, ID_PARENT - это вроде как ID у мастер-таблицы, а ID_GLOBAL - это что-то типа глобального ключа.

Если перевести не получится, я думаю просто сравнивать сами наборы байтов, тогда как мне лучше их выдирать из DBF?

К вопросу прикрепляю архив со скриншотами.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Anton (w) Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Anton (w) (статус: Посетитель)
Вопрос отправлен: 24 сентября 2008, 11:59
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 26 сентября 2008, 12:12; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 24 сентября 2008, 12:39 [#1]:

Судя с названий полей, их надо интерпретировать как число, а не как строка. В таком случае "палочки" никак не могут появиться. И если я правильно помню, то не просто число, а 64битное целое без знака (хотя может и 32битное без знака).
Выводить пользователю эти ключи вовсе не обязательно:)
Галочка "подтверждения прочтения" - вселенское зло.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 24 сентября 2008, 19:12 [#2]:

прежде, чем что-то откуда-то выдирать, надо определить как это используется на самом деле. В данном случае необходимо определить для связи с какими таблицами используются указанные поля. А насчет показа пользователю - Вадим К прав - такие вещи для пользователя знать совсем необязательно, позволять пользователю редактировать эти значения - "смерти подобно", как говорил один известный человек
Anton (w)

Anton (w) (статус: Посетитель), 25 сентября 2008, 06:20 [#3]:

Показа пользователю нет. Дело в том, что та база данных используется программой на 9 фоксе. Я же хочу сделать альтернативную программу, но чтобы подключиться к базе, нужно брать значения ключевых полей, которые храняться в Character Binary. А их я прочитать пока не могу.

Например, на адресе могут быть несколько договоров, соответственно
в таблице ADRESS есть атрибут ID
в таблице DOGOVOR есть атрибуты ID и ID_PARENT.

Вот по этому ID_PARENT надо найти адрес договора, т.е наоборот, отобразить все договоры по этому адресу.

А прочесть стандартными средствами невозможно.
Halcyon6, ADS9 не видят, программы просмотрщики(вроде DBF Viewer) тоже не видят этих полей.

Но вот в компоненте TDBF при загрузке этих полей в StringGrid - эти поля отобразились. Отобразились также, как и сама система разработки фокса их видит. Поэтому я думаю, что можно как-то их выдирать. Но как это сделать пока не знаю.

Поэтому у меня возник вопрос: почему StringGrid умеет показывать такой тип данных, а другие компоненты не могут?

P.S. Автор оригинальной программы, которая написана на фоксе, уволился и с ним невозможно связаться, поэтому встала необходимость в переработке.
Вадим К

Вадим К (статус: Академик), 25 сентября 2008, 11:21 [#4]:

Цитата:


почему StringGrid умеет показывать такой тип данных

А он и не умеет. Он показывает то, что ему дали. По мере сил.

Цитата:


А прочесть стандартными средствами невозможно.

А Fox9 - это разве не стандартное средство

Цитата:

Я же хочу сделать альтернативную программу, но чтобы подключиться к базе, нужно брать значения ключевых полей, которые храняться в Character Binary.

А кто сказал, что это именно Character Binary? Длина этого поля 8 байт? Это обычное целое, просто 8байтовое. Автор скорее всего был параноиком и решил,что 32бит (4 байта) ему не хватит. (программист-пессимист под запоминание года заводит 5 позиций - что бы не было проблемы 9999 года:) ).

Цитата:


А их я прочитать пока не могу.

А мне показалось, что Вы их читаете:) Надо писать "я не умею интерпретировать полученный результат."

Цитата:


Автор оригинальной программы, которая написана на фоксе, уволился и с ним невозможно связаться, поэтому встала необходимость в переработке.

Рекомендую переписать на любую другую удобоваримую базу. Access/SQLite/FireBird. Будет меньше проблем в будущем.
Галочка "подтверждения прочтения" - вселенское зло.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 25 сентября 2008, 22:17 [#5]:

да уж, если переписывать программу, то лучше сразу переделать и саму базу. Но тут, наверняка встанет вопрос импорта значений из существующей БД в новую - вряд ли кто из пользователей захочет вручную перебивать значения.
Anton (w)

Anton (w) (статус: Посетитель), 26 сентября 2008, 12:07 [#6]:

>>А он и не умеет. Он показывает то, что ему дали. По мере сил.
Ну по крайней мере он отображает, а Edit, например, совсем ничего не отображает.

>>Рекомендую переписать на любую другую удобоваримую базу. Access/SQLite/FireBird. Будет меньше проблем в будущем.
Это я и хочу сделать в будущем, да как, если я не могу "интерпретировать полученный результат"?

>>А кто сказал, что это именно Character Binary? Длина этого поля 8 байт? Это обычное целое, просто 8байтовое.
Это показывает сам фокс.
Вадим К

Вадим К (статус: Академик), 26 сентября 2008, 12:12 [#7]:

Цитата:

Ну по крайней мере он отображает, а Edit, например, совсем ничего не отображает.

Элементы для отображения текста обязаны показывать текст. А вот бинарные данные они могут показывать как угодно - кто палочками, кто точками. Поведение в этом случае не оговаривается. Это обычный UB (неопределённое поведение).

Цитата:

Это показывает сам фокс.

Значит я всё таки прав. Скорее всего в фоксе нет 64битных ключей,а программист был прогрессивным пессимистом и перестраховался.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:48
Выполнено за 0.02 сек.