Форум: "Базы";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
ВнизПроблема с русскими полями в IB6 Найти похожие ветки
← →
Nazareth (2002-08-12 12:09) [0]Добрый день.
Столкнулся со следующей проблемой. В базе данных есть поля, содержащие русские символы. Эти поля созданы как character set WIN1251 collate WIN1251.
Есть процедура, в которой я из одной такой таблицы возвращаю в качестве выходного параметра значение одного из таких полей.
При выполнении процедуры как в Quickdesk"е и в Delphi выскакивает ошибка "...Cannot transliterate character between character sets."
Пробовал менять collate на pxw_cyrl - не помогло.
Что делать?
← →
gek (2002-08-12 12:12) [1]при соединении с базой надо указать кодировку
← →
Nazareth (2002-08-12 12:13) [2]Указываю Russian - в тот-то и дело
← →
SaS13 (2002-08-12 12:16) [3]в Params укажи:
lc_ctype=WIN1251
← →
gek (2002-08-12 12:18) [4]Я так понял, что указываешь lc_ctype=WIN1251 ?
Должно нормально быть.
← →
Nazareth (2002-08-12 12:20) [5]В Delphi указываю lc_ctype=WIN1251 - все равно ошибка.
Но она появляется и в Quickdeske.
← →
NickBat (2002-08-12 12:38) [6]А процедура случайно не делает преобразования этих строковых полей, типа upper? Если так, то лучше указать collate при открытии базы или при выполнении запросы/процедуры.
← →
Nazareth (2002-08-12 12:53) [7]Никаких преобразований не делаю. Пробовал устанавливать collate при запросе - не помогло.
← →
Desdechado (2002-08-12 13:13) [8]размер выходного параметра меньше размера поля?
← →
Nazareth (2002-08-12 13:25) [9]Размеры совпадают, но пробовал и увеличивать - не помогло...
← →
NickBat (2002-08-12 16:37) [10]Не мешало бы текст процедуры посмотреть.
Если просто сделать Query вида: select * from table и вывести в DBGrid, это работает?
← →
Nazareth (2002-08-12 19:19) [11]Запрос Select * from groups - работает.
Привожу текст процедуры:
CREATE PROCEDURE POWERK (
DAT TIMESTAMP)
RETURNS (
ACTPOWER FLOAT,
REACTPOWER FLOAT,
KDAY FLOAT,
KMAX FLOAT,
DATEMAX TIMESTAMP,
GRP_NAME1 VARCHAR(50),
GRP_NAME2 VARCHAR(50))
AS
declare variable k float;
declare variable pk float;
declare variable grp1 smallint;
declare variable grp2 smallint;
BEGIN
for select min(grp), max(grp)
from groups
where group_type > 0
group by group_type
into :grp1, :grp2
do
begin
select name
from groups
where grp = :grp1
into :grp_name1;
select name
from groups
where grp = :grp2
into :grp_name2;
select p
from get_graf("G", :grp1, :dat, :dat + 1, 288)
into :actpower;
select p
from get_graf("G", :grp2, :dat, :dat + 1, 288)
into :reactpower;
if (actpower <> 0) then
kday = reactpower / actpower;
select distinct max(a.p / b.p)
from get_graf("G", :grp2, :dat, :dat + 1, 6) a,
get_graf("G", :grp1, :dat, :dat + 1, 6) b
where (a.dt = b.dt) and (b.p > 0) and
(b.p is not null)
into :kmax;
select distinct min(a.dt)
from get_graf("G", :grp2, :dat, :dat + 1, 6) a,
get_graf("G", :grp1, :dat, :dat + 1, 6) b
where (a.dt = b.dt) and (b.p is not null) and
((a.p - b.p * :kmax) * (a.p - b.p * :kmax) < 0.0000001)
into :datemax;
if (actpower <> 0) then
SUSPEND;
end
END
Поле name таблицы groups имеет тим varchar(50) и содержит русские символы.
← →
NickBat (2002-08-13 10:33) [12]Если простая выборка из таблицы работает, то ищи ошибку в процедуре. Закоментируй все и открывай по одному селекту, найдешь в каком месте ошибка.
Какой тип параметра "G" у get_graf?
select p
from get_graf("G", :grp1, :dat, :dat + 1, 288)
into :actpower;
← →
Nazareth (2002-08-13 10:45) [13]Не работают следующие фрагменты:
select name
from groups
where grp = :grp1
into :grp_name1;
select name
from groups
where grp = :grp2
into :grp_name2;
name, :grp_name1, :grp_name2 имеют тип varchar(50)
← →
fnatali (2002-08-13 11:05) [14]Синтаксис оператора Select
SELECT [TRANSACTION transaction]
[DISTINCT | ALL]
{* | <val> [, <val> …]}
[ INTO :var [, :var …]]
FROM <tableref> [, <tableref> …]
[WHERE <search_condition>]
[GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]
[HAVING <search_condition>]
[UNION <select_expr> [ALL]]
[PLAN <plan_expr>]
[ORDER BY <order_list>]
[FOR UPDATE [OF col [, col …]]];
← →
NickBat (2002-08-13 11:10) [15]Ну с синтаксисом, на самом деле все нормально. :)))
А может что-то не так с grp1, тип тоже smallint?
← →
Nazareth (2002-08-13 17:44) [16]Тип поля и параметра - smallint, а ошибка звучит:
"...Cannot transliterate character between character sets."
← →
gray_k (2002-08-13 18:22) [17]У меня была такая же заморочка.
IB6 почему то не понимает wiin1251. Почему -х/з.
Я просто заново создал базу с неопределённой кодировкой (character set - none) и у всех символьных полей где стояла кодировка тоже убрал win1251. После этого всё заработало.
← →
Nazareth (2002-08-13 19:01) [18]Надо будет попробовать. Спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c