Мемо поле

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Мемо поле

Сообщение Mekhtiev »

Не подскажите как мемо поле в галактике (характеристика ОС в ИК) т-sql -ем нормально вытащить в запросе?
ВБР РУЛИТ)))ИС3
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Мемо поле

Сообщение RAJAH »

Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: Мемо поле

Сообщение Mekhtiev »

Так иероглифы вместо русских букв вываливаются :-)
ВБР РУЛИТ)))ИС3
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Мемо поле

Сообщение RAJAH »

Кодировка в "Галактике" - 866.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Мемо поле

Сообщение edward_K »

RAJAH писал(а):Кодировка в "Галактике" - 866.
ну тут вы правы на 30%.В MS SQL и в oracle может быть и 1251 или национальная. Для данного случая интересно иероглифами выводиться только мемополе или наименование ос тоже? Если да то либо попробуйте шрифт terminal либо покопайтесь в настройке вывода вашей СУБД
Mekhtiev
Постоянный гость
Сообщения: 92
Зарегистрирован: 24 янв 2013, 16:33

Re: Мемо поле

Сообщение Mekhtiev »

только мемо поле у меня иероглифами выводится.visual studio у меня не поддерживает терминал. :-(
ВБР РУЛИТ)))ИС3
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Мемо поле

Сообщение edward_K »

Тут тогда дело в том, что галка данные в обычных таблах может хранить в 1251, а при отображении, выводе в отчеты и при вводе мемо полей использует 866.
Вариант написать функцию в MSSQL для преобразования
Здесь для VB
http://www.gotdotnet.ru/forums/4/102961/
Вот простейшая для галки

Код: Выделить всё

const 
  ansistr='╕щЎєъхэу°∙чї·Ї√тряЁюыфц¤ ўёьшЄ№с■и╔╓╙╩┼═├╪┘╟╒┌╘█┬└╧╨╬╦─╞▌▀╫╤╠╚╥▄┴▐' ;
  oemstr ='ёйцукенгшщзхъфывапролджэячсмитьбюЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ' ;
end ;
Function AnSiOem(wstr:string) : string ;
var w : string ;
    k,i :longint ;
begin
 w:='' ;
 for(i:=1;i<=length(wstr);i:=i+1)
 begin
   k:=pos(substr(wstr,i,1),ansistr)
   if k>0 then
     w:=w+substr(oemstr,k,1) 
   else 
     w:=w+substr(wstr,i,1) ;
 end ;
 AnsiOem:=w ;
end ;


Function OemAnSi(wstr:string) : string ;
var w : string ;
    k,i :longint ;
begin
 w:='' ;
 for(i:=1;i<=length(wstr);i:=i+1)
 begin
   k:=pos(substr(wstr,i,1),oemstr)
   if k>0 then
     w:=w+substr(ansistr,k,1) 
   else 
     w:=w+substr(wstr,i,1) ;
 end ;
 OemAnsi:=w ;
end ;
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Мемо поле

Сообщение Masygreen »

Пользуйтесь на здоровье .. писал 100 лет назад, так что не оптимально, но рабоче ))

Код: Выделить всё

FUNCTION fnReadMemoTXT (@NrecInf binary(8))
RETURNS VARCHAR(8000) AS
BEGIN
DECLARE @SMEM varchar(8000)
DECLARE @VMEM varchar(8000)
DECLARE @position bigint
DECLARE @ncod bigint 
DECLARE @dcod bigint

SET @VMEM=(SELECT 
CAST(SUBSTRING(XX$Memo.m#Data, 4,8000) AS char(8000))
FROM XX$Memo
WHERE dbo.FnNrToChBin(XX$Memo.m#nrec)=dbo.FnNrToChBin(@NrecInf) AND m#code=1705)
SET @VMEM=RTRIM(@VMEM)

SET @position = 1
SET @SMEM=''

WHILE @position <= DATALENGTH(@VMEM)
BEGIN
SET @ncod=ASCII(SUBSTRING(@VMEM, @position, 1))
IF @ncod=240 SET @dcod=ASCII('Ё')
IF @ncod=241 SET @dcod=ASCII('ё')
IF @ncod<=127 SET @dcod=@ncod
IF @ncod>127 AND @ncod<160 SET @dcod=@ncod+64
IF @ncod>159 AND @ncod<177 SET @dcod=@ncod+64
IF @ncod>220 AND @ncod<240 SET @dcod=@ncod+16
SET @SMEM=@SMEM+char(@dcod)
SET @position = @position+1
END
RETURN @SMEM
END
Время ведет!
Ответить