|
Вопрос # 1 894/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Есть база данных с таблицами DBF, соданными в программе на Visual FoxPro 9. Так вот ключевые поля в этих таблицах сделаны с типом Character (Binary), соответственно их невозможно прочитать стандартным способом (Halcyon их тоже не видит). Вот тут указано, что такой тип требует совершенно другой способ чтения записей:
http://www.foxclub.ru/articles/art36.php
Подскажите, пожалуйста, как это можно реализовать?
Halcyon6, D7, WXPSP2.
 |
Вопрос задал: Anton (w) (статус: Посетитель)
Вопрос отправлен: 12 сентября 2008, 11:56
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 12 сентября 2008, 15:09; участников в обсуждении: 3.
|
Anton (w) (статус: Посетитель), 12 сентября 2008, 12:00 [#1]:
В статье забыл указать, что в разделе Типы данных -> Binary
|
|
Anton (w) (статус: Посетитель), 12 сентября 2008, 12:01 [#2]:
Лучше сам приведу отрывок оттуда:
Binary
Binary - это не тип поля, а реквизит поля. Может использоваться только с символьными полями. Т.е. возможны Character (binary) и Memo (binary). При программном создании полей данное свойство указывается при помощи ключевого слова "NOCPTRANS".
Для чего, собственно нужен этот реквизит.
Дело в том, что обычно предполагается, что в символьных полях хранится некоторый текст, записанный в одной из поддерживаемых FoxPro кодовых страниц. Соответственно, при чтении таких полей FoxPro автоматически транслирует содержимое таких полей в текущую кодовую страницу. Благодоря этому механизму Вы можете совершенно спокойно открыть в Visual FoxPro таблицу созданную в FoxPro for DOS в кодовой странице 866, и текст будет выглядеть нормально, а не как набор закорючек.
Однако в некоторых случаях этот автоматический механиз трансляции необходимо отключить. Т.е. нужно, чтобы транслировались данные из всех прочих символьных полей, а вот из этих - не надо. В принципе, это можно сделать программно, используя команду SET NOCPTRANS. Но уж больно это утомительно. Лучше указать это непосредственно в реквизитах таких полей.
В каких же случаях может возникнуть необходимость в запрете автотрансляции символов.
А в тех, когда в этих полях не содержится текст, который пользователь должен смотреть и править.
Ну, например, в разделе посвященном типу поле General, я привел пример записи файла с расширением DOC в поле типа Memo(Binary). Разумеется, пытаться прочитать такое содержимое как обычный текст бессмысленно.
Собственно и название "binary"(двоичный) говорит о том, что содержимое данных полей следует воспринимать не как текст, а как набор двоичных кодов, для расшифровки которых требуется какой-то нестандартный алгоритм. Нестандартный в том смысле, что это не просто другая кодовая страница.
А возможно данные коды и вообще не предназначены для расшифровки и применяются "как есть". Например, идентификатор записи. Хотя для FoxPro - это не очень хорошее решение.
|
|
Вадим К (статус: Академик), 12 сентября 2008, 12:11 [#3]:
а может взять компонент TDbf (http://tdbf.sourceforge.net/, пример программы можно взять здесь http://www.delphisources.ru/pages/sources/database/2005_year/comp_tdbf.html) и попробовать напрямую открыть. В любом случае код можно будет докрутить.
А FoxPro за такую самодеятельность надо наказывать - просто отказавшись от него.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 12 сентября 2008, 12:23 [#4]:
ключевые - в смысле "важные для Вас"? А то обычные люди под словом "ключевые поля" пониманют совсем другое.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Anton (w) (статус: Посетитель), 12 сентября 2008, 14:43 [#5]:
Ура! Tdbf открывает и видит! Но... только если таблицы небольшие, а тут нужно открывать и большие тоже. Большую таблицу открывает очень долго, а может и совсем не открывает (ждал пару минут - так и не открыла). Будем копаться дальше.
|
|
Вадим К (статус: Академик), 12 сентября 2008, 14:53 [#6]:
Ну теперь можно взять исходники компонента за основу и прогнав профайлером, понять, где тормозит. Учитывая, что dbf формат фактически линейный, то скорость открывания должна быть прямопропорциональна размеру файла.
Скорее всего падает на моменте добавления новой записи в внутреннюю структуру.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 12 сентября 2008, 15:09 [#7]:
Если есть желание поэкспериментировать, то можно попробовать открыть с помощью ADO. С VFP9 не проверял, но с FoxPro 2.5 for DOS и VFP6 работает.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|