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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2011, 15:43   #1
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию Найти свободные строки Delphi 7

Здравствуйте, есть БД в, подключенная через ADO, в ней есть поле со списком ip, как вывести список свободных ip адресов. может через sql?
Вот сама программаhttp://turbobit.net/323v1ah29gw5.html
detalik вне форума Ответить с цитированием
Старый 23.05.2011, 15:53   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
А поиск устроить, слабо...
Например для начала можно найти
http://programmersforum.ru/showthread.php?t=150931
До свидания

Последний раз редактировалось OlegVE; 23.05.2011 в 16:30.
OlegVE вне форума Ответить с цитированием
Старый 24.05.2011, 07:55   #3
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Здравствуйте, тот пост, на который Вы мне дали ссылку, я уже смотрел, но почему то, не получается, собственно по этой причине я решил задать вопрос. Вернее при выполнении процедуры совсем ничего не происходит
Код:
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;
Код:
// Не забудьте предварительно сохранить куда-нибудь список, прежде чем отправить его в никуда
Может из-за этого? А куда его предварительно сохранить? И почему он не выводится в DBGrid?
Спасибо.
P.S программа с использованием вышеописанной процедуры http://hostfiles.ifolder.ru/23725036

Последний раз редактировалось detalik; 24.05.2011 в 08:08.
detalik вне форума Ответить с цитированием
Старый 24.05.2011, 08:14   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
но почему то, не получается
не получается - ЧТО?!
и как именно не получается? пустая выборка, ошибка при определении наличия адреса или что?

p.s. а почему не продолжить обсуждение в той же ветке? перенести туда Ваши сообщения?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.05.2011, 08:53   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
MyList := TStringList.Create;

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

MyList.Sort; { Find will only work on sorted lists! }
ЧИТАЙТЕ выделенное
Цитата:
// Не забудьте предварительно сохранить куда-нибудь список, прежде чем отправить его в никуда
Код:
Memo1.lines:=MyList;
или
Код:
Memo1.Text:=MyList.Text;
или другие варианты
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.05.2011 в 08:57.
evg_m вне форума Ответить с цитированием
Старый 25.05.2011, 08:19   #6
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Попробовал сохранить в Memo - не выводит ничего, или может быть выводит - пустой результат. Или я чего то неправильно делаю..
Код:
procedure TForm1.N4Click(Sender: TObject);
 var
 MyList: TStringList;
  Index: Integer;
begin
    MyList := TStringList.Create;
    Memo1.Text:=MyList.Text;
    MyList.Sort;    //Find will only work on sorted lists!

  ADOQuery1.Active:=false;
  ADOQuery1.SQL.Text := 'select [ip àäðåñ] from buh Where [ip àäðåñ] >'+ quotedstr(Edit1.Text) + ' AND [ip àäðåñ]<'+ quotedstr(Edit4.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;

end.
Спасибо.
detalik вне форума Ответить с цитированием
Старый 25.05.2011, 08:48   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
// Здесь сами генерируйте список
Если списка нет (пустой) то: из пустого удалить нечто получится пустой.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.05.2011, 09:11   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от evg_m
Если списка нет (пустой) то: из пустого удалить нечто получится пустой.
+1



detalik
Код:
когда Вы создаёте  MyList := TStringList.Create; - он создаётся, разумеется, ПУСТОЙ! (т.е. в нём нет ни одной записи!)

 Memo1.Text:=MyList.Text; - присваиваете Memo пустой список, Memo1 становится таким же пустым.

    MyList.Sort;    Сортируете пустой список. От этого он не перестаёт быть пустым!
....
   if MyList.Find(...) - ищете в пустом списке. И, разумеется, НИЧЕГО не находите!!
я уже не говорю о том, что результаты обработки MyList Вы никуда не присваиваете! (т.е. даже если бы он был не пустой, то Memo1.Text:=MyList.Text; надо делать в конце процедуры!)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.05.2011, 17:28   #9
detalik
Форумчанин
 
Регистрация: 05.04.2011
Сообщений: 115
По умолчанию

Спасибо, примерно понял, буду пробовать.

Подскажите, пожалуйста, как мне создать непустой список в диапазоне 192.168.110.10 - 192.168.110.255. Спасибо.

Последний раз редактировалось Stilet; 27.05.2011 в 14:57.
detalik вне форума Ответить с цитированием
Старый 27.05.2011, 10:34   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

примерно так
Код:
for n1:=192 to 192 do
for n2:=168 to 168 do
for n3:=110 to 110 do
for n4:=0 to 255 do
s:=format('%d.%d.%d.%d',[n1,n2,n3,n4]);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 27.05.2011 в 10:37.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти и выделить строки DimOwl Microsoft Office Excel 13 13.08.2011 01:07
Ввести имя, фамилию и отчество в строку. Найти длину строки, вывести фамилию в обратном порядке (Delphi) --PapaZi-- Помощь студентам 7 27.03.2011 22:44
Какое наимньшее число ферзей можно расставить на доске так, чтобы они держали под бонм все свободные поля alykaa Помощь студентам 4 01.12.2010 18:48
Строки, как найти слово с наименьшим количеством букв(Delphi) Dima-91 Помощь студентам 9 30.09.2010 17:37