|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.12.2011, 19:27 | #11 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Что-то не понял ваших проблем и что имеет ввиду Serge_Bliznykov тоже не понял. В выложеной болванке нет длинных символьных полей, FoxPro нормально открыл, VFoxPro нет, открыл тремя разными ADO-шными провайдерами без проблем, как насчет кодировки не вижу - данных нет. Возможно сами данные испорчены? Как это может привести к символьному полю 700 байт не догоняю
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 06.12.2011 в 19:29. |
06.12.2011, 19:44 | #12 |
Пользователь
Регистрация: 19.08.2010
Сообщений: 54
|
Табличка нормальная. Лично я в ней ничего левого не рассмотрел.
Записал в нее строку 400 символов в поле AD2_TXP и не чирикнула. Использовал VKDBF.
Ваша благодарность может быть материальной:
WM R103871054215, WM Z710411027344, ЯндД: 410011167596676 |
06.12.2011, 19:56 | #13 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
AD2_TXP интересное описание - символьное поле с длиной 188 и двумя знаками после точки. В этом наверно и загвоздка - dbf не стандартный, поле для знаков после точки используется для расширения длины символьного поля до 700. Тут точно пользоваться ADO не получится. Или ручками или выше предложенными компонентами
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
07.12.2011, 07:24 | #14 | |
Пользователь
Регистрация: 29.07.2011
Сообщений: 39
|
Цитата:
2.) эта дрянь у нас на предприятии активно используется 3.) Tdbf не пробовал но уверен что так же резать будет. сейчас попробую. самый парадокс в том (парадокс не база ;]) что в ручную можно написать все 700, а программно через Delphi режет( а как "напрямую" писать? |
|
07.12.2011, 07:36 | #15 | |
Пользователь
Регистрация: 29.07.2011
Сообщений: 39
|
Цитата:
кстати, работаю в RAD 2010, наверняка под него мало компонентов заточеных под DBF |
|
07.12.2011, 07:38 | #16 | |
Пользователь
Регистрация: 29.07.2011
Сообщений: 39
|
Цитата:
|
|
07.12.2011, 09:24 | #17 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Устройство dbf - в начале заголовок с описанием, а дальше записи фиксированной длины и структуры. Вот и читайте как бинарный файл, используя TFileStream или FileOpen с FileRead
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
07.12.2011, 09:40 | #18 |
Пользователь
Регистрация: 29.07.2011
Сообщений: 39
|
худшие опасения оправдались лучше уж какой-нибудь компанент левый подключить, через него попробовать, если нет то нет...буду вручную делать
|
07.12.2011, 10:02 | #19 | |
Пользователь
Регистрация: 29.07.2011
Сообщений: 39
|
Цитата:
Код:
|
|
07.12.2011, 15:05 | #20 | |||||||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Цитата:
потому что, в DBF можно запихнуть что-угодно. Но это будет понимать только та программа, разработчики которой и изменили DBF под свои нужды. Можно и связи между таблицами хранить, и дополнительные типы данных, и имеющиеся расширить диапазоны, всё это абсолютно нормально. НО! Подобные изменения приводят к отходу от стандарта. И сразу возникают проблемы со совместимостью. Что мы, собственно, и наблюдаем в данном случае! Справедливости ради надо сказать, что согласно википедии DBF уже допустимы различные значения для символьных полей: Цитата:
Поэтому, думаю, что и провайдеры, построенные на основе этих движков, тоже не обеспечат доступ к подобным полям. Цитата:
дело в том, что там (на месте, где задаётся размерность поля) в данном случае используется ДВА байта: BC 02 та программа, что "в курсе" про большой размер поля, читает эти два байта как Word: 0x02BC = 700 те же, кто не знает (FoxPro, например) считает, что первый байт длина (0xDC = 188), а второй байт - количество десятичных цифр (что, разумеется, БРЕД!) Цитата:
(кстати, я проверил, TDBF - НЕ понимает.. работает только со 188 символами поля) Цитата:
во-вторых, писать поле вручную - это работать с файлом как с обычными бинарным. (ну, грубо говоря, через TFileStream). Смещения высчитывать вручную (для DBF с его простым заголовком это делается на раз-два!). Я имею опыт подобной работы с DBF файлами и мог бы помочь с написанием подобного кода! НО! Я бы всё таки рассматривал этот вариант как крайний метод решения проблемы! Ибо данный способ - это всё таки костыли. Помимо неудобств, связанных с отстутствием в данном способе нормальных методов работы с датасетом (см. TDataSet ) и, как следствие, невозможности использовать DB ware компоненты! (отобразить данное поле в гриде, например), помимо крайней неэффективности в случае групповых модификаций и изменений, этот способ ещё и недопустимо использовать, если к данному файлу имеются индексные и мемо-файлы. И плюсов у данного способа всего два: - отсутствие зависимости от внешних компонентов, провайдеров, BDE, ADO, ODBC и т.д. и т.п. - возможность читать любые нестандартные DBF файлы. Хоть с длиной целой части в 50 знаков, хоть с длиной символьного поля в 64 килобайта... любые извраты.. а решать - Вам... |
|||||||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Импорт dbf таблицы в такую же dbf таблицу | betirsolt | БД в Delphi | 34 | 31.07.2011 20:43 |
dbf и tqueru, собрать несколько dbf файлов в одном, импорт вобщем | betirsolt | БД в Delphi | 16 | 10.07.2011 13:52 |
Есть ли ограничение в 97-2010 версиях Excel ограничение на размер массива? | clever77 | Microsoft Office Excel | 18 | 15.05.2011 00:50 |
ограничение кол-ва SQL запросов в BDE ?!!! | Qdesnik | БД в Delphi | 1 | 15.05.2009 17:24 |
сохранение результата выборки из DBF файла в DBF файл с такой же структурой таблицы | GazimagomedovM | БД в Delphi | 5 | 06.11.2007 17:58 |