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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание БД с комментариями на русском, создание БД с комментариями на русском 
:(
    Опции темы
maxfox111
Дата 1.6.2018, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



Добрый день осваиваю Постгрес, через использование дельфи компонент ZEOSDB, и при попытке создания базы через использование ZSQLProcessor
вылетает ошибка. Ошибка на комментарий на русском COMMENT ON ROLE FMBZ_Fokin_A IS 'борисыч'; в скрипте. Если комментарий на английском то все замечательно работает. Может ли кто нибудь подсказать как программно добавлять комментарии на русском языке?

вот фрагмент кода 
Код

FMBZ_ZSQLProcessor.Connection :=FMBZ_ZConnection;
FMBZ_ZSQLProcessor.Delimiter := ';';
FMBZ_ZSQLProcessor.DelimiterType := dtDelimiter;
FMBZ_ZSQLProcessor.Script.LoadFromFile('script.sql');
try
FMBZ_ZSQLProcessor.Execute;
ShowMessage('выполнен!');
except
ShowMessage('Ошибка!');
end;




вот скрипт при помощи которого пытаюсь создать базу.
Код

----Creating Role
SET client_encoding = 'UNICODE';
DROP ROLE IF EXISTS FMBZ_Fokin_A;
CREATE ROLE FMBZ_Fokin_A WITH LOGIN PASSWORD 'FMBZ_Fokin_A' SUPERUSER CREATEDB CREATEROLE;
UPDATE pg_authid SET rolcatupdate=false WHERE rolname='FMBZ_Fokin_A';
COMMENT ON ROLE FMBZ_Fokin_A IS 'борисыч';

CREATE DATABASE "FMBZ_Fokin_A"
WITH OWNER=FMBZ_Fokin_A ENCODING='UNICODE' TABLESPACE = DEFAULT;
COMMENT ON DATABASE "FMBZ_Fokin_A" IS 'фокин';

 

PM MAIL   Вверх
Akina
Дата 1.6.2018, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 453



Цитата(maxfox111 @  1.6.2018,  12:54 Найти цитируемый пост)
Ошибка на комментарий на русском COMMENT ON ROLE FMBZ_Fokin_A IS 'борисыч'; в скрипте.
Ошибку даёт сам клиент? не Постгресс? 



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Snowy
Дата 1.6.2018, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Какую ошибку возвращает?

В PostgreSQL нет кодировки UNICODE.
Используй UTF8
PM MAIL   Вверх
maxfox111
Дата 5.6.2018, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 9.11.2008

Репутация: нет
Всего: нет



Попытаюсь заново, не убивайте сильно

Добрый день осваиваю Постгрес, через использование дельфи компонент ZEOSDB, и при попытке создания базы через использование ZSQLProcessor вылетает ошибка. Ошибка на попытку создания комментария на русском COMMENT ON ROLE FMBZ_userA IS 'борисыч';. (скрипты и код приведен ниже. Скрипты сохранены в кодировке UTF8)

Действия:
1)как супер пользователь подключаюсь к постгресу через использование TZConnection
2)и пытаюсь выполнить свой скрипт через использование TZSQLProcessor
3)при выполнении строки кода FMBZ_ZSQLProcessor.Execute в дебагере можно видеть что в цикле
for I := 0 to Pred(StatementCount) do

на выполнении вызова Statement.ExecuteUpdatePrepared;  происходит ошибка при попытке выполнить строку создания комментария. И пользователь не создается.
Если же комментарий и весть остальной текст написан по английски то скрипт выполняется совершенно нормально. 

Эта ошибка происходит только в том случае если в "Региональных стандартах" в текущем языке программ  не поддерживающих юникод установлен Английский (любой). Если же в этом пункте установлен Русский язык то данной ошибки при выполнении через компоненты ZEOSDB нет.

Так же нет этой ошибки, если выполнять sql скрипты не через дельфи, а просто в среде через вызов cmd.
ВОПРОСЫ:
1) можно ли как избежать этой ошибки? То есть существуют ли пути обхода этой "региональной ситуации"?
2) можно ли где то прочитать или просмотреть код, который бы позволял бы запустить скрипт на моей машине, а результат выполнения скрипта был бы на другой машине где стоит постгрес?
ZSqlProcessor.pas

фрагмент кода:

Код

Var
FMBZ_ZConnection : TZConnection;
FMBZ_ZSQLProcessor: TZSQLProcessor;
...
FMBZ_ZConnection.HostName := 'localhost';
FMBZ_ZConnection.Database := 'postgres';
FMBZ_ZConnection.User := 'postgres';
FMBZ_ZConnection.Password := 'bars1234';
FMBZ_ZConnection.Protocol := 'postgresql-9';
FMBZ_ZConnection.Port := 5432;
FMBZ_ZConnection.LoginPrompt := False;
FMBZ_ZConnection.Properties.Add('codepage=win1251');
FMBZ_ZConnection.Connect;
sleep(100);
FMBZ_ZSQLProcessor.Connection :=FMBZ_ZConnection;
FMBZ_ZSQLProcessor.Delimiter := ';';
FMBZ_ZSQLProcessor.DelimiterType := dtDelimiter;
FMBZ_ZSQLProcessor.Script.LoadFromFile('settings30.sql');
try
FMBZ_ZSQLProcessor.Execute;
ShowMessage('база данных создана!');
except
ShowMessage('база данных НЕ создана!');
end;


cmd запускалка для первого sql скрипта
chcp 1251
SET PGPASSWORD=bars1234
"c:\Program Files\PostgreSQL\9.3\bin\psql.exe" -U postgres --no-password -f settings30.sql
pause

первый sql скрипт

Код

--Creating Role

SET client_encoding = 'UTF8';
DROP ROLE IF EXISTS FMBZ_userA;
CREATE ROLE FMBZ_userA WITH LOGIN PASSWORD 'FMBZ_userA' SUPERUSER CREATEDB CREATEROLE;
UPDATE pg_authid SET rolcatupdate=false WHERE rolname='FMBZ_userA';
COMMENT ON ROLE FMBZ_userA IS 'борисыч';

CREATE DATABASE "FMBZ_BaseA"
WITH OWNER=FMBZ_userA ENCODING='UTF8' TABLESPACE = DEFAULT;
COMMENT ON DATABASE "FMBZ_BaseA" IS 'database';


cmd запускалка для второго sql скрипта
chcp 1251
"c:\Program Files\PostgreSQL\9.3\bin\psql.exe" --dbname FMBZ_BaseA --username fmbz_usera -f settings31.sql
pause

второй sql скрипт 

Код

--Creating Role
SET client_encoding = 'UTF8';
CREATE SCHEMA FMBZ_userA AUTHORIZATION FMBZ_userA;
COMMENT ON SCHEMA FMBZ_userA IS 'contains таблицы';

CREATE TABLE FMBZ_userA.Table_AccountFIO (
id SERIAL NOT NULL,
id_AccountIdentifier numeric CONSTRAINT firstkey PRIMARY KEY,
id_LastName varchar(100),
id_FirstName varchar(100),
id_MiddleName varchar(100),
id_BirthDay varchar(10),
id_Center varchar(100),
id_State varchar(100),
id_Specialist varchar(100),
id_Manager varchar(100)
);
ALTER TABLE FMBZ_userA.Table_AccountFIO OWNER TO FMBZ_userA;

CREATE TABLE FMBZ_userA.Table_AccountMarried (
id SERIAL NOT NULL PRIMARY KEY,
id_AccountIdentifier numeric,
id_Married_LastName text,
id_Married_FirstName text,
id_Married_MiddleName text,
id_Married_Birthday text
);
ALTER TABLE FMBZ_userA.Table_AccountMarried OWNER TO FMBZ_userA;

PM MAIL   Вверх
Snowy
Дата 5.6.2018, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(maxfox111 @  5.6.2018,  14:51 Найти цитируемый пост)
Эта ошибка происходит только в том случае если в "Региональных стандартах" в текущем языке программ  не поддерживающих юникод установлен Английский (любой). Если же в этом пункте установлен Русский язык то данной ошибки при выполнении через компоненты ZEOSDB нет.

Ну это проблема с дельфи, а не постгресом. Тут налицо ошибка кодировки при конвертировании в utf8.
Попробуй при запуске приложения выполнить функцию:
Код
SetThreadLocale(1049);

Но лучше будет перейти на юникодную версию (delphi 2009 или выше)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1358 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.