Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Интегрирование VB Code в T-SQL ?  [new]
magadan
Member

Откуда:
Сообщений: 14
Добрый день.
Может кто нибудь подсказать возможно ли исползовать код VB в SQL 2005 каким нибудь образом.
Есть код на VB :
public static long FromOleToArgb(long oleColor)
{
byte alpha = 0xff;
byte red = (byte)(oleColor & 0xff);
byte green = (byte)((oleColor >> 8) & 0xff);
byte blue = (byte)((oleColor >> 0x10) & 0xff);

if ((alpha < 0) || (alpha > 0xff))
throw new ArgumentException("Invalid oleColor - Alpha = " + alpha);
if ((red < 0) || (red > 0xff))
throw new ArgumentException("Invalid oleColor - Red = " + red);
if ((green < 0) || (green > 0xff))
throw new ArgumentException("Invalid oleColor - Green = " + green);
if ((blue < 0) || (blue > 0xff))
throw new ArgumentException("Invalid oleColor - Blue = " + blue);

return (long)(((ulong)((((red << 0x10) | (green << 8)) | blue) | (alpha << 0x18))) & 0xffffffffL);
}

который переводит RGB в ARGB, но хотят чтоб это делалось через SQL.

Или кто может подсказать как можно в SQL перевести RGB в ARGB.

Зарание спосибо.
11 окт 09, 16:58    [7770322]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
magadan,

как ни странно, в T-SQL тоже есть побитовые операции.
А уж используя их совершенно несложно провести нужные вам преобразования.
11 окт 09, 17:07    [7770332]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
magadan
Member

Откуда:
Сообщений: 14
locky
magadan,

как ни странно, в T-SQL тоже есть побитовые операции.
А уж используя их совершенно несложно провести нужные вам преобразования.


Я и не совневался в этом, просто есть определёная задача но я и ума не прилажу как это сделать.
11 окт 09, 17:10    [7770338]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Грозный locky дело говорит... но если такова постановка... тогда google -> SQL CLR или напрямки в MSDN :) How to: Create and Run a CLR SQL Server User-Defined Function туточки все степ бай степ...
11 окт 09, 17:46    [7770362]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
Нектотам
Guest
magadan
Есть код на VB :
public static long FromOleToArgb(long oleColor)
{
....
}

А разве это VB??? :)
12 окт 09, 06:02    [7771074]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
aleks2
Guest
Нектотам
magadan
Есть код на VB :
public static long FromOleToArgb(long oleColor)
{
....
}

А разве это VB??? :)


Дык и автор темы слабоват в программировании

--public static long FromOleToArgb(long oleColor)
create function FromOleToArgb(@oleColor int)
returns bigint
--{
as
begin
--byte alpha = 0xff;
declare @alpha tinyint
set @alpha = 255

--byte red = (byte)(oleColor & 0xff);
declare @red tinyint
set @red=oleColor%256

--byte green = (byte)((oleColor >> 8) & 0xff);
declare @green tinyint
set @green=(oleColor/256)%256

-- ну дальше тредстартер пусть сам напишет
--byte blue = (byte)((oleColor >> 0x10) & 0xff);


--if ((alpha < 0) || (alpha > 0xff))
--throw new ArgumentException("Invalid oleColor - Alpha = " + alpha);
if @alpha < 0 -- интересно, с какого бодуна @alpha могет стать меньше нуля... ну да видно тож спец писал
   OR 
   @alpha > 255	 -- ишо одно невероятное событие!
raiserror('Invalid oleColor - Alpha = %i',16,1,@alpha)
-- да уж...
if ((red < 0) || (red > 0xff))
throw new ArgumentException("Invalid oleColor - Red = " + red);
if ((green < 0) || (green > 0xff))
throw new ArgumentException("Invalid oleColor - Green = " + green);
if ((blue < 0) || (blue > 0xff))
throw new ArgumentException("Invalid oleColor - Blue = " + blue);

--return (long)(((ulong)((((red << 0x10) | (green << 8)) | blue) | (alpha << 0x18))) & 0xffffffffL);
--}
return cast(alpha as bigint)*256*256*256+cast(@red as bigint)*256*256+cast(@greeb as bigint)*256+@blue

Ведь ежели задуматься....
create function FromOleToArgb_RightWay(@oleColor int)
returns int
as
begin
  return cast(0xFF+cast(REVERSE(SUBSTRING(cast(cast(@oleColor as binary(4)) as char(4)), 2, 3)) as varbinary(4)) as int)
end
12 окт 09, 07:31    [7771111]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
AndrF
Member

Откуда:
Сообщений: 2194
Нет проблем - просто CLR-функция.
12 окт 09, 09:57    [7771406]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
AndrF
Member

Откуда:
Сообщений: 2194
Если, конечно, вообще нужен код на VB или C#
12 окт 09, 09:58    [7771412]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
aleks2
Guest
AndrF
Если, конечно, вообще нужен код на VB или C#

Глубокомысленно...

Без излишков CAST

create function FromOleToArgb_RightWay(@oleColor int)
returns int
as
begin
  return 0xff+cast(REVERSE(cast(cast(@oleColor as binary(4)) as char(4))) as binary(3))
end
go
declare @oleColor int
set @oleColor=0x11eeddcc

select @oleColor
, cast(@oleColor as binary(4))
, cast(cast(@oleColor as binary(4)) as char(4))
, REVERSE(cast(cast(@oleColor as binary(4)) as char(4)))
, cast(REVERSE(cast(cast(@oleColor as binary(4)) as char(4))) as binary(3))
, 0xff+cast(REVERSE(cast(cast(@oleColor as binary(4)) as char(4))) as binary(3))
, cast(0xff+cast(REVERSE(cast(cast(@oleColor as binary(4)) as char(4))) as binary(3)) as int)
, dbo.FromOleToArgb_RightWay(@oleColor)
12 окт 09, 10:28    [7771628]     Ответить | Цитировать Сообщить модератору
 Re: Интегрирование VB Code в T-SQL ?  [new]
magadan
Member

Откуда:
Сообщений: 14
Огромное всем спасибо.
12 окт 09, 12:39    [7772624]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить