Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2011, 17:52   #1
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
Печаль Определение спец.символов в DBF базе

Здравствуйте.
У меня такая проблема, если DBF файл в нем есть поле KOD (character) значения в этом поле не повторяются, т.е. уникальные, вид данных в поле все символы из таблицы ASCII от 0 до 255, в Win кодировке некоторые не отображаются, а некоторые отображаются не правильно, но если я открываю DBF в FoxPro 2.6 то там все хорошо и разборчиво видно.
Вообщем в Win мне эти символы и не нужны (я их хочу перевести в цифры), подскажите как это можно сделать.
Пробовал переводить при помощи функции Ord но переводятся не все символы такие символы как 176, 177, 178 (dec из таблицы ASCII), в Win вообще нет и Win отображает их как #
Как я понял все дело в кодировке и при обращении к данным из DBF я их оттуда беру уже в Win кодировке... Как вариант можно было бы получить Hex.
Кто что посоветует???
Gulik вне форума Ответить с цитированием
Старый 25.04.2011, 09:05   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

много-много лет назад, при проектировании системы я придумал классную оптимизацию - вместо 8 значного числа переводить его в бинарный вид и хранить 3 байта. Чистой экономии 5 байт на одном числе. Таких чисел в одной записи - 12 итого - 60 байт. С учётом того, что таблица содержала от 100 тыс. записей, получается видимая экономия...
Но сейчас бы я так никогда не стал делать!
Ибо, когда потребовалось получить данные из этого поля под Windows - выяснилось, что ADO просто напросто НЕ МОЖЕТ правильно передавать подобные величины (оно их поганит при передаче. причём так, что из полученной величины исходную уже не восстановишь!).
Пришлось написать приблуду, которая по физическому номеру записи (это легко можно получить и через ADO) открывает файл как бинарный и вытаскивает нужное поле... Если интересно, то могу с этим помочь.

кроме этого. Чтобы я ещё предложил.
1) если возможно (работа разовая, таблица не меняется) - то лучше всего конвертнуть эту базу(таблицу) в нормальную. (если надо - помогу и с этим вариантом)

2) попробовать читать таблицу через TDBF (или через другие компоненты. Например, через "Halcyon" )


не исключено, что есть и другие варианты решения...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2011, 12:55   #3
Gulik
Холост/Не замужем
Форумчанин
 
Аватар для Gulik
 
Регистрация: 13.11.2007
Сообщений: 283
По умолчанию

Спасибо что откликнулись, хотя я уже решил задачу...

В dbf файлах есть байт который отвечает за кодировку установленную в нем, вообщем у меня в файле изначально этот байт был выставлен как (cp866) после исправления этого байта на (cp1251) и установки шрифта Terminal все символы отобразились правильно

А тема по вытаскиванию из бинарного файла нужного поля очень интересна...
Gulik вне форума Ответить с цитированием
Старый 25.04.2011, 13:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Спасибо что откликнулись, хотя я уже решил задачу...
да не за что.
Хорошо, что решили.


Цитата:
А тема по вытаскиванию из бинарного файла нужного поля очень интересна...
уж очень это неправильно и извращённо... Хотя технически это весьма просто - структура DBF уж очень проста и поэтому сложностей никаких не возникает. я бы не рекомендовал подобный подход. Да и пользоваться подобными "хакерскими" приёмами надо крайне осторожно (и только в случае наикрайнейшей необходимости!).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2011, 13:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Кто что посоветует???
Достать ФоксПрос и его утилитой CPZERO поменять кодировку.
Либо же в том же фокспро его командами поменять.
А вообще я лично выбрал вот что:http://pblog.ru/?p=364
И до сих пор не жалуюсь ни на скорость ни на кодировку.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в базе данных в dbf формате Slimav41 Помощь студентам 7 12.03.2011 19:56
Определение таблиц в базе данных gessi SQL, базы данных 2 22.11.2010 22:11
Вывод спец. символов в строку. Delphi Horus92 Помощь студентам 2 27.08.2010 08:54