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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2018, 12:05   #1
maxfox123
Пользователь
 
Регистрация: 07.07.2013
Сообщений: 15
По умолчанию создание БД с комментариями на русском

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

вот фрагмент кода
FMBZ_ZSQLProcessor.Connection :=FMBZ_ZConnection;
FMBZ_ZSQLProcessor.Delimiter := ';';
FMBZ_ZSQLProcessor.DelimiterType := dtDelimiter;
FMBZ_ZSQLProcessor.Script.LoadFromF ile('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 'фокин';
maxfox123 вне форума Ответить с цитированием
Старый 01.06.2018, 12:14   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

SET client_encoding = 'UTF8' не пробовал?
И сам скрипт тоже в этой кодировке
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2018, 13:53   #3
maxfox123
Пользователь
 
Регистрация: 07.07.2013
Сообщений: 15
По умолчанию

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

Добрый день осваиваю Постгрес, через использование дельфи компонент 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('co depage=win1251');
FMBZ_ZConnection.Connect;
sleep(100);
FMBZ_ZSQLProcessor.Connection :=FMBZ_ZConnection;
FMBZ_ZSQLProcessor.Delimiter := ';';
FMBZ_ZSQLProcessor.DelimiterType := dtDelimiter;
FMBZ_ZSQLProcessor.Script.LoadFromF ile('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;
maxfox123 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с комментариями из ВК bilibian Общие вопросы Delphi 2 14.08.2014 07:52
Проблема с комментариями в WP LeoN WordPress и другие CMS 0 05.12.2009 18:11
Игрушки с комментариями Mishelka Общие вопросы Delphi 0 18.11.2009 20:49
Нужна книга на русском создание MFC приложений на C++ sergey113 Свободное общение 2 24.03.2009 13:25
Помогите с комментариями Cyberbest Помощь студентам 1 26.04.2008 16:46