powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / создание базы через ZEOSDB
3 сообщений из 3, страница 1 из 1
создание базы через ZEOSDB
    #39653851
maxfox111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день осваиваю Постгрес, через использование дельфи компонент ZEOSDB, и при попытке создания базы через использование ZSQLProcessor
вылетает ошибка. Ошибка на комментарий на русском COMMENT ON ROLE FMBZ_Fokin_A IS 'борисыч'; в скрипте. Если комментарий на английском то все замечательно работает. Может ли кто нибудь подсказать как программно добавлять комментарии на русском языке?

вот фрагмент кода
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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;




вот скрипт при помощи которого пытаюсь создать базу.
[SRC PLSQL]----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 'фокин';
...
Рейтинг: 0 / 0
создание базы через ZEOSDB
    #39654094
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxfox111,

Тут надо смотреть какую ошибку дает база.
И в какой кодировке она инициализирована.
Так как в нормальных условиях все работает:
***=# create role test;
CREATE ROLE
***=# comment on role test is 'проверка';
COMMENT


--
Maxim Boguk
dataegret.ru
...
Рейтинг: 0 / 0
создание базы через ZEOSDB
    #39655570
maxfox111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день осваиваю Постгрес, через использование дельфи компонент 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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
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 скрипт

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--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 скрипт

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
--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;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / создание базы через ZEOSDB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]