![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Классический вопрос про краказяблики в такблицах DBASE через BDE
Rule © (2004-09-01 12:44:00)Столкнулся с интересной ситуацией, в BDE язык NATIV драйвера на DBASE настроен 'ascii' ANSI,
в самих таблицах тоже кодировка такая стоит,
открываю последовательно три таблицы в своем приложении, через одни и теже компоненты класическая свлязка
TABLE-DATASOURCE-DBGRID, и мне показывает одна таблица нормально, а 2 с "краказябликами", вот помогите пожалуйста советом
компоненты использую родоные BDEшные, делфи у меня седьмое (лицензионное :) ), вот понять ничего не могу
Rule (2004-09-01 17:03:00) [1]продолжение:
не реагировала на изменения,которые я вносил в настройки драйвера на дбейз, а вот на фокспро реагировал и когда я добраюсь к таблице чрезе эти драйвера то все работает, хотя на других машинах что так что так все нормально, тоесть на моей машине накрылся бдешный драйвер на дбез, вот и все ... а я тут трагедию прям устроил :)
Rule (2004-09-01 17:01:00) [2]Val © (01.09.04 16:22) [20]
Нет, проблемм меньше, и кстати разобрался в чем у меня всетаки проблемма была
почемуто у меня BDE ин
Val (2004-09-01 16:22:00) [3]>[19] Роман Снегирев (01.09.04 16:07)
> кодировка win1251 _лучше_ читается
крупнее шрифт? ;)
Роман Снегирев (2004-09-01 16:07:00) [4]на самом деле DBASE версии до 4 и FoxPro (версии до 2.5) абсолютно ничем не отличаются. Кстати я тоже замечал что при установке tableType в ttFoxPro кодировка win1251 лучше читается
Rule (2004-09-01 15:55:00) [5]Reindeer Moss Eater © (01.09.04 15:43) [16]
:)
Роман Снегирев (01.09.04 15:48) [17]
то просто перепиши 29 байт в значение 87 и BDE будет работать нормально,
на других машинах работает, а на моей нет, вот я и говорю что аномалия, кончено я согласен что BDE не блеск, но под рукой ничего другово не было
короче если ты точно знаешь что у тебя кодировка win1251
точно знаю на 100%, при формировании в 1С-ке таблицы я явно указал кодировку
а вообще я ж говорю в моем случае я решение нашел, просто поставил свойство TTabl'a
tableType в ttFoxPro и нормально работает на всех машинах (вот природа такого поведения не совсем понятна, наверное всетаки чемто отличаются у меня эти три таблицы, иначе и быть не может) ...
Всем огромное спасибо за участие и оказаную мне помощь
Роман Снегирев (2004-09-01 15:48:00) [6]короче если ты точно знаешь что у тебя кодировка win1251, то просто перепиши 29 байт в значение 87 и BDE будет работать нормально, а вообще я бы посоветывал отказаться от BDE
Reindeer Moss Eater (2004-09-01 15:43:00) [7]В компьютере есть процессор.
Он умеет считать.
Не надо руками.
Rule (2004-09-01 15:38:00) [8]А тогда вопрос, чес сбрасывется, дбфвьювер сбрасываеть не хочет, а дбдесктопе нет даже такой возможности, ручкам чтоли отсчитывать байты ?
Rule (2004-09-01 15:32:00) [9]Reindeer Moss Eater © (01.09.04 15:29) [12]
щас попробую
Rule (2004-09-01 15:31:00) [10]Reindeer Moss Eater © (01.09.04 15:29) [12]
И чего, помогает ?
Reindeer Moss Eater (2004-09-01 15:29:00) [11]С таблицами от 1с я борюсь так:
Всегда сбрасываю 29 байт в ноль.
Если данные в DOS использую драйвер dbase 866 rus
Если данные в Win использую драйвер ascii
Rule (2004-09-01 15:23:00) [12]Reindeer Moss Eater © (01.09.04 15:18) [9]
Мы говорим про четвертую версию, так что тут полная правда
Rule (2004-09-01 15:22:00) [13]Роман Снегирев (01.09.04 15:15) [8]
а что в этом случае 'ascii' ANSI не помогает?
вот в том то и дело, что всегда работало и на одну таблицу подействовало а на две нет
Так вот, если этот самый байт обнулен
В моем случае и 29 байт во всех таблицах и настройки драйвера были 'ascii' ANSI проверял в дбфвьювере и в датабейздесктопе
все равно кодировку 866 вам ей не придать
так и не нада, надо наоборот чтоб он значит эту кодировку не трогал вообще, как есть пусть так и показывает, если явно отключить transliterate, то все нормально, но видимо все дело обстояло в типе таблицы типа фокспро, ну вобщем все нормально, спасибо за разьяснения, но думаю скорее всего у меня на машине глюк какойто нехороший, потомучто я толькочто попробовал на другой машине, с такимиже настройками БДЕ и с темиже файлами, то все нормально, бред какойто, как всегда (поэтому не пользуюсь БДЕ, много необьяснимых сюрпризов)
Reindeer Moss Eater (2004-09-01 15:18:00) [14]Короче, наконец то придется мне объяснить популярно (может быть первый и последний раз)
Все это полуправда.
Кому действительно было интересно, тот знает, что не во всех версиях DBASE кодировка указана в 29 байте заголовка.
Роман Снегирев (2004-09-01 15:15:00) [15]эх...., просмотрел. а что в этом случае 'ascii' ANSI не помогает? Короче, наконец то придется мне объяснить популярно (может быть первый и последний раз) как BDE читает кодировку из таблиц DBASE. В первую очередь она читает 29 байт dbf файла. Кому интересно
38-кодовая страница 866 DOS Russian
87-кодовая страница 1251 Windows ANSI
и т.д.
Так вот, если этот самый байт обнулен (что чаще всег бывает), тогда BDE смотрит в свои настройки: Configuration->Drivers->Native->LangDriver. Вот собственно и все. Хочу только заметить, что на самом деле все зависит от кодировки, в которой реально создавалась и заполнялась таблица, т.е. если например база 1с-овская (win1251), то как уж вы не переписывайте 29 байт в значение 38, не настраивайте BDE, все равно кодировку 866 вам ей не придать
Rule (2004-09-01 14:45:00) [16]Роман Снегирев (01.09.04 14:32) [6]
Хех, а толку, смотри
Rule © (01.09.04 12:46) [1]
Ой забыл сказать что информация в таблицах в кодировке Win1251, заносил информацию с 1С, при просмотре утилитой DBFViuwer все показывает нормально и говорит что кодировка Win1251
Я кстати нашел выход, в TTable надо выбрать в свойстве tableType - ttFoxPro
глубины смысла не понимаю но так понимаю что 1С-ка создает фокспрошные таблицы, вот поэтому и карявается все, но все же до сих пор интересно, почему одна нормально показывалась а 2 нет, а щас все три нормально, когда установил такое значение
Роман Снегирев (2004-09-01 14:32:00) [17]ну вообщем надо в BDEAdministrator поставить Configuration->Drivers->DBASE->langdriver=dBASE RUS cp866
Rule (2004-09-01 14:22:00) [18]Роман Снегирев (01.09.04 13:32) [4]
ну вот, а если ещё раз, буду очень благодарен, перерыл всю базу в этом направлении (за последнюю неделю), и никто не отвечал на такой вопрос, хотя точно помню что было вот только тогда не обращал внимания
Роман Снегирев (2004-09-01 13:32:00) [19]я уже устал отвечать на этот вопрос
Rule (2004-09-01 13:13:00) [20]И ещё интересный факт, отменил в текстовом поле transliterate, и все заработало нормально, а почему в другой таблице он не перекодирует, и как сделать так чтобы оно автоматчиески не прекодировало, ведь я щас использую TTABLE, а если менять таблицы динамически, неужели надо и свойство менять постоянно ?