Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2011, 15:27   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Вывести список отсутствующих в базе значений.

Есть база refbook с IP. Как вывести список всех свободных IP, интервал задается с помощью MaskEdit1 и MaskEdit2.
Код:
var
   str : string ;
   i:Integer;
begin
for i:=0 to MaskEdit2.Text do
 begin
ADOQuery1.Active:=false;
ADOQuery1.Parameters.ParamByName('Ip').Value:=MaskEdit1.Text+i;
ADOQuery1.Active:=true;
// ADOQuery1.First;
while not ADOQuery1.Eof do begin
           str :=str+ MaskEdit1.Text + #13 ;
           ADOQuery1.Next ;
   end ;
if str<>'' then
   Application.MessageBox(PChar(str), 'Список свободных IP адресов');
end;

Последний раз редактировалось Aleksandr; 10.05.2011 в 16:04.
Aleksandr вне форума Ответить с цитированием
Старый 10.05.2011, 16:03   #2
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Вот пробовал через SQL
Код:
ADOQuery1.Active:=false;
 ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'select * from refbook Where IP='+ quotedstr(MaskEdit1.Text );
ADOQuery1.Active:=true;
ADOQuery1.First;
while not ADOQuery1.Eof do begin
           str :=str+ MaskEdit1.Text + #13 ;
           ADOQuery1.Next ;
   end ;
if str<>'' then
   Application.MessageBox(PChar(str), 'Список свободных IP адресов');
end;
Но не знаю как реализовать цикл пока IP будет равно значению MaskEdit2.

Последний раз редактировалось Aleksandr; 10.05.2011 в 16:51.
Aleksandr вне форума Ответить с цитированием
Старый 10.05.2011, 16:36   #3
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Попробуйте такой запрос
Код:
 ADOQuery1.Active:=false;
 ADOQuery1.SQL.Text := 'select * from refbook Where IP>'+ quotedstr(MaskEdit1.Text) + ' AND IP<'+ quotedstr(MaskEdit2.Text);
 ADOQuery1.Active:=true;
и посмотрите результат, например, в DBGrid
До свидания
OlegVE вне форума Ответить с цитированием
Старый 10.05.2011, 16:48   #4
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

С помощью этого зпроса выводит все значения в заданном интервале. А как сделать чтобы вывести которых нет?
Aleksandr вне форума Ответить с цитированием
Старый 10.05.2011, 16:51   #5
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Как вывести список всех свободных IP, интервал задается с помощью MaskEdit1 и MaskEdit2
Цитата:
Сообщение от Aleksandr Посмотреть сообщение
... А как сделать чтобы вывести которых нет?
OlegVE вне форума Ответить с цитированием
Старый 10.05.2011, 17:00   #6
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

сейчас попытаюсь объяснить. Есть интервал от MaskEdit1 до MaskEdit2. Берем первое значение с этого интервала, если его нет в базе то его выводим, берем второе значение опять проверяем и т.д пока значение не будет равно MaskEdit2
Aleksandr вне форума Ответить с цитированием
Старый 10.05.2011, 17:03   #7
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Может сгенерировать список всех адресов от MaskEdit1 до MaskEdit2, а затем в цикле выкинуть из него адреса полученные в запросе? Что-то вроде этого
Код:
...
var
  MyList: TStringList;
  Index: Integer;
begin
  MyList := TStringList.Create;

// Здесь сами генерируйте список

  MyList.Sort;   { Find will only work on sorted lists! }

  ADOQuery1.Active:=false;
  ADOQuery1.SQL.Text := 'select ИмяПоляСIPАдресом from refbook Where IP>'+ quotedstr(MaskEdit1.Text) + ' AND IP<'+ quotedstr(MaskEdit2.Text);
  ADOQuery1.Active:=true;

  ADOQuery1.First;
  while not ADOQuery1.Eof do begin
   if MyList.Find(ADOQuery1.FieldByName('ИмяПоляСIPАдресом').AsString, Index) then MyList.Delete(Index);
   ADOQuery1.Next;
  end;

// Не забудьте предварительно сохранить куда-нибудь список, прежде чем отправить его в никуда

  MyList.Free;
end;

Последний раз редактировалось OlegVE; 10.05.2011 в 17:31.
OlegVE вне форума Ответить с цитированием
Старый 10.05.2011, 19:53   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

С помощью этого зпроса выводит все значения в заданном интервале. А как сделать чтобы вывести которых нет?

Код:
select <все в интервале>
where IP not exists in (select <те которые есть> )
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.05.2011, 11:30   #9
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Код:
select <все в интервале>
where IP not exists in (select <те которые есть> )
Ваш запрос выведет свободные адреса, если они уже есть в базе данных, но, как я понял, у него в базу данных заносятся адреса по мере поступления... А если ввести в базу данных все адреса и ввести поле указывающее на занятьсть адреса, тогда жизнь упроститься
До свидания
OlegVE вне форума Ответить с цитированием
Старый 11.05.2011, 11:48   #10
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Не получается.
Aleksandr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести список файлов assch Общие вопросы C/C++ 1 21.10.2010 03:16
Delphi вывести на экран таблицу значений функции rager06 Помощь студентам 6 11.09.2010 15:51
Список уникальных значений PARTOS Microsoft Office Excel 13 18.12.2009 11:14
Раскрывающийся список значений, макросом. Flangini Microsoft Office Excel 13 22.06.2009 17:01
Элементы управления и список значений tomasmazas Microsoft Office Excel 1 26.12.2007 09:20