Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-3479
stas_a
2002-08-21 10:28
2002.09.02
Копирование в буфер из разных обектов.


14-3576
s-gorbachev
2002-08-05 16:55
2002.09.02
Помогите купить сервер(железку) для IB6 на 50 юзеров


1-3427
Netizen
2002-08-22 23:00
2002.09.02
Как найти подстроку в строке???


1-3343
alex_x
2002-08-21 18:14
2002.09.02
Дата Project Build


4-3666
ZZ
2002-06-28 13:57
2002.09.02
Проблема с юникодом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский