|
Вопрос # 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) (статус: Посетитель)
Вопрос отправлен: 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) (статус: Посетитель), 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) (статус: Посетитель), 26 сентября 2008, 12:07 [#6]:
>>А он и не умеет. Он показывает то, что ему дали. По мере сил.
Ну по крайней мере он отображает, а Edit, например, совсем ничего не отображает.
>>Рекомендую переписать на любую другую удобоваримую базу. Access/SQLite/FireBird. Будет меньше проблем в будущем.
Это я и хочу сделать в будущем, да как, если я не могу "интерпретировать полученный результат"?
>>А кто сказал, что это именно Character Binary? Длина этого поля 8 байт? Это обычное целое, просто 8байтовое.
Это показывает сам фокс.
|
|
Вадим К (статус: Академик), 26 сентября 2008, 12:12 [#7]:
Цитата:
Ну по крайней мере он отображает, а Edit, например, совсем ничего не отображает.
Элементы для отображения текста обязаны показывать текст. А вот бинарные данные они могут показывать как угодно - кто палочками, кто точками. Поведение в этом случае не оговаривается. Это обычный UB (неопределённое поведение).
Цитата:
Это показывает сам фокс.
Значит я всё таки прав. Скорее всего в фоксе нет 64битных ключей,а программист был прогрессивным пессимистом и перестраховался.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|