Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.02;
Скачать: CL | DM;

Вниз

Проблема с русскими полями в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
14-3574
AL2002
2002-08-05 18:25
2002.09.02
А есть в И-нете летописи о конкурсах КВН?


7-3652
Naik
2002-06-21 06:27
2002.09.02
Как зарегестрировать за своей программой новый типа файлов?


1-3456
HemeC
2002-08-20 19:04
2002.09.02
ошибка Exception EDBEngineError............! и вопрос........!


3-3259
kserg@ukr.net
2002-08-12 13:42
2002.09.02
Можно ли подставить только QReport ?


7-3634
Zavdim
2002-06-21 12:01
2002.09.02
Иконки в разных windows