Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

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

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

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

Добрый день осваиваю Постгрес, через использование дельфи компонент 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, 13:14   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,107
Репутация: 6385
По умолчанию

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

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

Добрый день осваиваю Постгрес, через использование дельфи компонент 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 скрипт

[code=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';
[/code]

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

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

[code=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;
[/code]
maxfox123 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


14:09.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru