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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2011, 11:38   #1
Молоток
Пользователь
 
Регистрация: 28.08.2010
Сообщений: 37
По умолчанию Поиск текста в Listbox-е

Уважаемые эксперты. Помогите с задачой.
Имеется Listbox, который заполняется при onactivate формы с sql таблицы. Имеется Timer, в событии onTimer имеется следующий код:

var i: integer;
begin
with Q5 do
begin
Q5.Close;
Q5.SQL.Clear;
Q5.SQL.Add('Select Otp from Chat');
Q5.SQL.Add('where Prin='+#39+Label3.Caption+#39);
Q5.Active:=true;
Q5.Open;
with ListBox5.Items do
for i := 0 to Count - 1 do
while not Q5.eof do
begin
if Strings[i]<>Q5.FieldByName('Otp').AsString then Listbox5.items.Add(Q5.FieldByName(' Otp').AsString);
Q5.Next;
end;
end;
end;

Здесь все нормально работает, но как сделать, чтобы имеющие значению в Listbox-е еще раз не добавлялись.
Закон программиста: Если тебе что-то не нравится, то не спеши это исправлять, если не помнишь, для чего это сделали.
Молоток вне форума Ответить с цитированием
Старый 16.03.2011, 11:56   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Есть метод IndexOf. В TListBox тоже (в Items). Ищет индекс по строке. Если возвращаемое значение -1, то строки в списке нет, если больше, то есть.
Прик вне форума Ответить с цитированием
Старый 16.03.2011, 12:07   #3
Молоток
Пользователь
 
Регистрация: 28.08.2010
Сообщений: 37
По умолчанию

если можно, опишите как писать и куда писать
Закон программиста: Если тебе что-то не нравится, то не спеши это исправлять, если не помнишь, для чего это сделали.
Молоток вне форума Ответить с цитированием
Старый 16.03.2011, 12:23   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
  with ListBox5.Items do begin
    while not Q5.eof do begin
      if IndexOf(Q5.FieldByName('Otp').AsString) = -1 then
        Add(Q5.FieldByName(' Otp').AsString);
      Q5.Next;
    end;
  end;
Наименование полей не могут начинаться с пробела (недосмотр).

Проще в запросе отбросить повторяющиеся строки, а не цедить их здесь в коде.
Хотя, конечно, все зависит от задачи, о деталях которой ничего не известно.

Последний раз редактировалось Прик; 16.03.2011 в 12:30. Причина: про оптимизацию
Прик вне форума Ответить с цитированием
Старый 16.03.2011, 12:45   #5
Молоток
Пользователь
 
Регистрация: 28.08.2010
Сообщений: 37
По умолчанию

Спасибо ограмное. Все получилось. Всего Вам хорошего.
Закон программиста: Если тебе что-то не нравится, то не спеши это исправлять, если не помнишь, для чего это сделали.
Молоток вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi 7] Добавление в ListBox выделенного текста Oldcentre Помощь студентам 2 17.11.2010 22:40
формат текста строк в listbox skalt12 Общие вопросы Delphi 8 30.06.2010 09:02
поиск по Listbox leonw Общие вопросы Delphi 9 07.06.2010 17:57
Получения текста из ListBox дочернего окна / Delphi itsme Помощь студентам 1 13.01.2010 14:14
Отправка Текста из ListBox в текстовые поля unicode Общие вопросы Delphi 5 14.05.2009 08:46