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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 894

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

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

Есть база данных с таблицами DBF, соданными в программе на Visual FoxPro 9. Так вот ключевые поля в этих таблицах сделаны с типом Character (Binary), соответственно их невозможно прочитать стандартным способом (Halcyon их тоже не видит). Вот тут указано, что такой тип требует совершенно другой способ чтения записей:

http://www.foxclub.ru/articles/art36.php

Подскажите, пожалуйста, как это можно реализовать?

Halcyon6, D7, WXPSP2.

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

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


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

Всего сообщений: 7; последнее сообщение — 12 сентября 2008, 15:09; участников в обсуждении: 3.
Anton (w)

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

В статье забыл указать, что в разделе Типы данных -> Binary
Anton (w)

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)

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 работает.

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

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