Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменить LANGDRIVER для DBase


lightix ©   (2007-03-13 09:45:00) 

Как для всех наборов данных (таблицы DBASE) приложения изменить LANGDRIVER, не меняя при этом настройки в BDE, т.е. чтобы все остальные приложения работали с стандартным LANGDRIVER?

В настройках BDE для DBASE указано LANGDRIVER=dBASE RUS cp866 , а мне нужно, чтобы мое приложение работало с LANGDRIVER='ascii' ANSI, и при этом все остальные приложения работали с dBASE RUS cp866. Алиасы создавать нельзя.

Пробовал два способа:
1. На форме поставил TDatabase (DriverName=STANDART), прописал такие параметры:
DEFAULT DRIVER=DBASE
LANGDRIVER=DBWINUS0
У всех наборов данных указал его в качестве DatabaseName.
Кодировка не поменялась.

2. Перед открытием набора данных такой код:
var List:TStrings;
.......
BEGIN
.......
 List.Add ( 'LANGDRIVER=DBWINUS0 ');
.......
 Session.ModifyDriver( 'DBASE', List );
.......
END;

В таком случае меняются и настройки в БДЕ.


lightix   (2007-03-13 13:49:00) [1]


> Desdechado ©   (13.03.07 13:45) [12]
>  Tsession - там настройка LangDriver.Но, судя по всему, тебе просто >придется читать  байт кодировки из заголовка DBF и выставлять нужную >кодировку  в своем Session.

Не выставляется! Верней выставляется один раз, а потом уже не изменяется больше. TSession разные для двух таблиц.


Desdechado   (2007-03-13 13:45:00) [2]

> Нужен не запрос из двух таблиц
Ты вычитал совсем не то, что нужно. И пропустил нужное. Tsession - там настройка LangDriver.

Но, судя по всему, тебе просто придется читать байт кодировки из заголовка DBF и выставлять нужную кодировку в своем Session.


lightix   (2007-03-13 13:34:00) [3]


> Точно, у STANDARD c параметрами не густо, т.е. он как раз
> и работает, похоже с тем, что в NATIVE/DBASE стоит :(

Вот и я о том же... :(


ЮЮ   (2007-03-13 13:27:00) [4]

> А как менять у алиаса LANGDRIVER?

Точно, у STANDARD c параметрами не густо, т.е. он как раз и работает, похоже с тем, что в NATIVE/DBASE стоит :(


lightix   (2007-03-13 13:13:00) [5]


> ЮЮ ©   (13.03.07 12:10) [7]
> >Если все-таки посмотреть в сторону "виртуальных"
> алиасов и там устанавливать LANGDRIVER, а не менять глобальный
> LANGDRIVER для DBASE ?

А как менять у алиаса LANGDRIVER?

> если в приложении нужно будет создать
> 2 таблицы с разными > кодировкамиКому, интересно, такое
> нужно?Создавать две TDataBase и использовать для разных
> таблиц разные базы. Вот только запросом из двух таблиц сразу
> вряд ли что получишь путное.

Нужен не запрос из двух таблиц. В общем ПО работает на DBASE с кодировкой 866, а на вход могут прийти DBF как 866 так и ANSI, присылают каждый раз как захотят, и таблицы то DBASE то FOXPRO. Приходится каждый раз брать входной файл и вручную перекодировать, сохранять в "своем формате", и только тогда уже подсовывать его ПО. Хотелось бы, чтобы входной файл подхватывался автоматически.


Desdechado   (2007-03-13 12:22:00) [6]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1173690419&n=18


ЮЮ   (2007-03-13 12:10:00) [7]

> Как сделать так, чтобы смену кодировки не видели другие
> приложения??

Если все-таки посмотреть в сторону "виртуальных" алиасов и там устанавливать LANGDRIVER, а не менять глобальный LANGDRIVER для DBASE ?

> если в приложении нужнобудет создать 2 таблицы с разными
> кодировками

Кому, интересно, такое нужно?
Создавать две TDataBase и использовать для разных таблиц разные базы. Вот только запросом из двух таблиц сразу вряд ли что получишь путное.


lightix   (2007-03-13 11:50:00) [8]

И еще вопрос - если в приложении нужно будет создать 2 таблицы с разными кодировками, то как указать что для одной используй одну кодировку, для другой другую?
Пробовал с разными TSession для каждой таблицы - кодировка выставляется один раз , а второй раз уже не изменяется


lightix   (2007-03-13 11:50:00) [9]

И еще вопрос - если в приложении нужно будет создать 2 таблицы с разными кодировками, то как указать что для одной используй одну кодировку, для другой другую?
Пробовал с разными TSession для каждой таблицы - кодировка выставляется один раз , а второй раз уже не изменяется


lightix   (2007-03-13 11:11:00) [10]

Закрыл-открыл IDE, теперь в конфиге не сохраняется....
Но запускаю 2 приложения - одно должно использовать кодировку из конфига (866), а другое - использовать ANSI с помощью ModifyDriver.
Так вот, после ModifyDriver, первое приложение уже тоже с кодировкой ANSI....

Как сделать так, чтобы смену кодировки не видели другие приложения??


lightix   (2007-03-13 10:38:00) [11]

Может быть это потому, что я работаю с default session?


lightix   (2007-03-13 10:30:00) [12]

Странно, но почему-то у меня сохраняются настройки в конфиге, хотя SaveConfigFile не вызываю...
Перепробовал все ConfigMode


ЮЮ   (2007-03-13 10:10:00) [13]

> Алиасы создавать нельзя.

Алиасы можно создавать и на время работы приложениия. см. TSession.ConfigMode

Кстати и в топике о ModifyDriver об этом тоже говорится:


A session’s ConfigMode property determines whether a driver is local to the session, or is available to all applications in the BDE persistent store as long as any BDE clients are active. To save a driver permanently, call the SaveConfigFile method before ending the session.


Наверх

Титульная страница Поиск, карта сайта Написать письмо