| 
| 
 | Вопрос # 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 работает. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |