Путь к базе Firebird с русскими символами

Модератор: Модераторы

Ответить
lordgray
новенький
Сообщения: 66
Зарегистрирован: 10.10.2010 00:19:11

Путь к базе Firebird с русскими символами

Сообщение lordgray »

Здравствуйте!
Компонент TFIBDatabase, Win7x64, Firebird2.5x64, Lazarus 1.6rc2x64, собираю x64.
Если путь к базе на английском, все ОК. Если на русском - ошибка.
Пробовал:

Код: Выделить всё

var
  St: String;
begin
  St := 'E:\База\rcdb_lite.fdb';
  FIBDatabase.DBName := St;//ошибка
  FIBDatabase.DBName := UTF8toSys(St);//ошибка
  FIBDatabase.DBName := LazUTF8.UTF8toWinCP(St);//ошибка
  FIBDatabase.DBName := UTF8Decode(St);//ошибка
  FIBDatabase.Open;

проект собирается без "Использовать Ansistring"
Уже несколько часов убил, результат = 0. ПОМОГИТЕ!
P.S. IBExpert коннектится без проблем.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

UTF8ToSys теперь отключен. Под Win, попробуйте WinCPToUTF8 и UTF8ToWinCP вместо UTF8ToSys и SysToUTF8 в тех случаях, если что-то где-то само не сконвертировалось. В FPC 3 строки из UTF в Ansi должны сами не явно конвертироваться..
lordgray
новенький
Сообщения: 66
Зарегистрирован: 10.10.2010 00:19:11

Сообщение lordgray »

*Rik* писал(а):UTF8ToSys теперь отключен. Под Win, попробуйте WinCPToUTF8 и UTF8ToWinCP вместо UTF8ToSys и SysToUTF8 в тех случаях, если что-то где-то само не сконвертировалось. В FPC 3 строки из UTF в Ansi должны сами не явно конвертироваться..

UTF8toSys из LazUTF8 не отключет.
UTF8ToWinCP пробовал, безрезультатно.
kosteek
постоялец
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Сообщение kosteek »

uses ...,LConvEncoding...
CP1251ToUTF8 или UTF8ToCP1251
lordgray
новенький
Сообщения: 66
Зарегистрирован: 10.10.2010 00:19:11

Сообщение lordgray »

kosteek писал(а):uses ...,LConvEncoding...
CP1251ToUTF8 или UTF8ToCP1251


Спасибо. Только что докопался сам. Это хорошо, НО.
А если путь на арабском? Или китайском? Как определить ANSI codepage системы.
...
Все, сам разобрался!

Код: Выделить всё

var tmp: RawByteString;
begin
  tmp :=UTF8toAnsi(Path);
  SetCodePage(tmp, GetACP, true);
  FIBDatabase.DBName := tmp;
  ...
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

lordgray писал(а):
kosteek писал(а):uses ...,LConvEncoding...
CP1251ToUTF8 или UTF8ToCP1251


Спасибо. Только что докопался сам. Это хорошо, НО.
А если путь на арабском? Или китайском? Как определить ANSI codepage системы.
...
Все, сам разобрался!

Код: Выделить всё

var tmp: RawByteString;
begin
  tmp :=UTF8toAnsi(Path);
  SetCodePage(tmp, GetACP, true);
  FIBDatabase.DBName := tmp;
  ...

lordgray Вам респект, я это в своем форке использую, сейчас проверил, он с FB то-же под Win с русскими путями не работает..
Zhanat
новенький
Сообщения: 21
Зарегистрирован: 06.09.2013 08:46:40

Сообщение Zhanat »

lordgray писал(а):Если на русском - ошибка.

1) открыл файл c:\Program Files\Firebird\Firebird_2_5\aliases.conf
2)прописал "dummy = D:\Test 3\Русский.FDB" без ковычек
3) указал в компоненте IBConnection1.DatabaseName:='localhost:dummy';

так подключается
Аватара пользователя
*Rik*
постоялец
Сообщения: 453
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал
Контактная информация:

Сообщение *Rik* »

Zhanat писал(а):
lordgray писал(а):Если на русском - ошибка.

1) открыл файл c:\Program Files\Firebird\Firebird_2_5\aliases.conf
2)прописал "dummy = D:\Test 3\Русский.FDB" без ковычек
3) указал в компоненте IBConnection1.DatabaseName:='localhost:dummy';

так подключается

Алиасы несомненно лучший вариант, но не всегда есть доступ в системные каталоги и приходится оперировать исключительно в папке пользователя...
Zhanat
новенький
Сообщения: 21
Зарегистрирован: 06.09.2013 08:46:40

Сообщение Zhanat »

v-t-l писал(а):v-t-l

v-t-l писал(а):v-t-l » 07.06.2009 18:56:23

lexa_bear писал(а):
Что, TIBConnection не понимает русских символов в Databasename?

Если версия Lazarus > 0.9.26, то в IDE русские буквы вводятся в кодировке UTF8, которую fbclient.dll не понимает.
Если очень надо, чтобы база лежала в путях с русскими буквами, воспользуйтесь файликом aliases.conf в папке firebird, и впишите туда что-то вроде
КОД: ВЫДЕЛИТЬ ВСЁ
mybase1=C:\ПутьКМоейБазе\База.fdb

а в IBConnection.Databasename напишите mybase1


http://www.freepascal.ru/forum/viewtopic.php?f=26&t=4436
Ответить