Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ip адреса, как их представить? 
:(
    Опции темы
kobra
Дата 26.7.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Цитата(sgentstuff @  26.7.2006,  09:43 Найти цитируемый пост)
Искал. Скорее всего в MSSQL таких функций нет. 
эти функции не из MSSQL.
мне кажется что нужно написать функцию, каторая будет приводить запис к формату ххх.ххх.ххх.ххх. соответственно условие филтра тоже нада также форматировать.  
 
PM MAIL   Вверх
Vit
Дата 27.7.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Вот реализация конвертации строки с адресом в число:

Код

Create Function dbo.IP_to_Int (@IP varchar(16))
Returns bigint
begin
/*Copyright (c) Vit, 2006*/
Declare @temp1 varchar(3), @Result bigint, @i int

Set @i=patindex('%.%', @IP)
Set @temp1=substring(@IP, 1, @i)
Set @Result=cast(@temp1 as bigint)*256*256*256
Set @IP=substring(@IP, @i+1, 100)

Set @i=patindex('%.%', @IP)
Set @temp1=substring(@IP, 1, @i)
Set @Result=@Result+cast(@temp1 as bigint)*256*256
Set @IP=substring(@IP, @i+1, 100)

Set @i=patindex('%.%', @IP)
Set @temp1=substring(@IP, 1, @i)
Set @Result=@Result+cast(@temp1 as bigint)*256
Set @IP=substring(@IP, @i+1, 100)

Set @Result=@Result+cast(@IP as bigint)

  Return @Result
end


Этим кодом надо создать функцию а потом можно использовать типа такого:
Код


Select * From MyTable 
Where dbo.IP_to_Int (MyAddressField) between dbo.IP_to_Int ('255.255.255.2') and dbo.IP_to_Int ('255.255.255.6')

  


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
sgentstuff
Дата 28.7.2006, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: 1
Всего: 1



Vit cпасибо, вот попроще 

Код

CREATE FUNCTION ip_tobigint  
(
   @ip varchar(15) 
)
RETURNS bigint
AS
BEGIN
RETURN
(
   CAST(PARSENAME(@ip, 4) as bigint) * 16777216 +
   CAST(PARSENAME(@ip, 3) as bigint) * 65536 +
   CAST(PARSENAME(@ip, 2) as bigint) * 256 +
   CAST(PARSENAME(@ip, 1) as bigint)
)
END
GO
 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Vit
Дата 28.7.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



sgentstuff, Круто! Я не додумался использовать PARSENAME таким нетрадиционным способом! Класс! Восхрищён!  


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
kostas
Дата 29.7.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 1
Всего: 4



Ну вот и решение вопроса smile Я почему то был уверен что эти функции уже есть в mssql...
PS. Кстати если кому нужна их реализация в делфи, могу поделится ;) 
PM ICQ   Вверх
sgentstuff
Дата 1.8.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: 1
Всего: 1



kostas - если не трудно выложи в реализацию в делфях, думаю мне и много кому пригодится.
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
kostas
Дата 1.8.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 1
Всего: 4



Код

function GiveIP(a: integer): string;
begin
  result:=IntToStr(a shr 24)+'.'+IntToStr((A and $00ff0000) shr 16)+'.'+IntToStr((A and $0000FF00) shr 8)+'.'+IntToStr(A and $000000FF);
end;

function GetIP(a: string): Integer;
Var tt:TStringList;
    i: integer;
begin
  if a='' then
   begin
    Result:=0;
    exit;
   end;
  tt:=TStringList.Create;
  try
   tt.text:=stringReplace(a,'.',#13#10,[rfReplaceAll]);

   i:=0;
   for i:=4 downto 1 do
    Result:=(Result shl 8) or (StrToInt(tt[4-i]));
  finally
   tt.Free;
  end;
end;

Между прочим в делфи где то есть эти функции, по крайней мере в семерке, но когда писал эти о тех еще не знал  smile 
PM ICQ   Вверх
sgentstuff
Дата 2.8.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 13.9.2005

Репутация: 1
Всего: 1



Туда.
Код

CREATE FUNCTION ip_tobigint  
(
   @ip varchar(15) 
)
RETURNS bigint
AS
BEGIN
RETURN
(
   CAST(PARSENAME(@ip, 4) as bigint) * 16777216 +
   CAST(PARSENAME(@ip, 3) as bigint) * 65536 +
   CAST(PARSENAME(@ip, 2) as bigint) * 256 +
   CAST(PARSENAME(@ip, 1) as bigint
)
END
GO


Обратно.
Код

CREATE FUNCTION dbo.bigint_toip
(
   @bigint bigint
)
RETURNS varchar(15)
AS
BEGIN
RETURN
(
selectconvert(varchar, convert(int, substring(ip, 5, 1))) + '.' +
convert(varchar, convert(int, substring(ip, 6, 1))) + '.' +
convert(varchar, convert(int, substring(ip, 7, 1))) + '.' +
convert(varchar, convert(int, substring(ip, 8, 1)))
from (
select convert(varbinary(8), @bigint) as ip
) as i
)
END


--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Демо
Дата 5.8.2006, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 2
Всего: 50



Цитата(sgentstuff @  1.8.2006,  08:30 Найти цитируемый пост)
если не трудно выложи в реализацию в делфях, думаю мне и много кому пригодится.


Реализация в сетях есть:

Код

type

  SunB = packed record
    s_b1, s_b2, s_b3, s_b4: Char;
  end;

  SunW = packed record
    s_w1, s_w2: word;
  end;

  TInAddr = record
    case integer of
      0: (S_un_b: SunB);
      1: (S_un_w: SunW);
      2: (S_addr: LongInt);
  end;

  function inet_addr(cp: PChar): LongInt; stdcall; external 'wsock32.dll' name 'inet_addr';
  function inet_ntoa(inaddr: TInAddr): PChar; stdcall; external 'wsock32.dll' name 'inet_ntoa';
  function htonl(hostlong: LongInt): LongInt; stdcall; external 'wsock32.dll' name 'htonl';
  function ntohl(netlong: LongInt): LongInt; stdcall; external 'wsock32.dll' name 'ntohl';

function IP2D(ip: String): LongInt;
begin
    Result := inet_addr(PChar(ip));
end;

function D2IP(ip: LongInt):String;
var
    p: PChar;
    d: TInAddr;
begin
  d.S_addr := ip;
  p := inet_ntoa(d);
  Result := p;
end;

function IncIp(ip: String; IncValue: Integer=1):String;
var
    d: TInAddr;
begin
  d.S_addr := ntohl(htonl(IP2D(ip))+IncValue);
  Result := String(inet_ntoa(d));
end;

function DecIp(ip: String; DecValue: Integer=1):String;
var
    d: TInAddr;
begin
  d.S_addr := ntohl(htonl(IP2D(ip))-DecValue);
  Result := String(inet_ntoa(d));
end;



--------------------
    
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1500 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.