Как удалить из ComboBox повторяющиеся значения?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ganz
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.12.2003 (Пт) 9:46

Как удалить из ComboBox повторяющиеся значения?

Сообщение Ganz » 26.12.2003 (Пт) 9:54

Как удалить из ComboBox повторяющиеся значения?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.12.2003 (Пт) 10:16

Код: Выделить всё
Private Sub Unique(ByVal cb As ComboBox)
  Dim a As New Collection, i As Long
  On Error GoTo rmv
  For i = cb.ListCount - 1 To 0 Step -1
    a.Add 1, cb.List(i)
  Next
  On Error GoTo 0
  Set a = Nothing
  Exit Sub
rmv:
  cb.RemoveItem i
  Resume Next
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.12.2003 (Пт) 10:40

А еще лучше не загружать элемент, если он уже есть в списке. Если комбобокс заполняется из базы данных, то для этого используется ключевое слово DISTINCT, если заполняется вручную, то просто перед добавлением элемента ищешь в списке такой элемент, и если он существует, то не добавляешь его.
Lasciate ogni speranza, voi ch'entrate.

Ganz
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.12.2003 (Пт) 9:46

Сообщение Ganz » 26.12.2003 (Пт) 10:54

! Куда нужно эту процедуру вставить?

Ganz
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.12.2003 (Пт) 9:46

Сообщение Ganz » 26.12.2003 (Пт) 10:58

2 alibek
Насколько я понимаю, distinсt применяется при использовании sql. Я Данные беру из access файла, из запроса. Вставляю в прогу с помощью компонента Data. В этом случае можно воспользоваться ключевым словом distinсt? Если да, то как? :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.12.2003 (Пт) 11:09

  1. В любое из тех мест, откуда ты сможешь потом её вызвать...
  2. Синтаксис

    SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
    FROM таблица

    Ниже перечислены аргументы инструкции SELECT, содержащей эти предикаты:

    ALL
    Если инструкция SQL не содержит ни одного предиката, то подразумевается предикат ALL. Ядро базы данных Microsoft Jet отбирает все записи, соответствующие условиям, заданным в инструкции SQL. Приведенные ниже инструкции SQL эквивалентны; они возвращают все записи из таблицы "Сотрудники":
    Код: Выделить всё
    SELECT ALL *
    FROM Сотрудники
    ORDER BY КодСотрудника

    Код: Выделить всё
    SELECT *
    FROM Сотрудники
    ORDER BY КодСотрудника;

    DISTINCT
    Исключает записи, которые содержат повторяющиеся значения в выбранных полях. Чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными. Например, в таблице "Сотрудники" есть однофамильцы. Если две записи содержат значение "Иванов" в поле "Фамилия", то следующая инструкция SQL возвратит только одну из них:
    Код: Выделить всё
    SELECT DISTINCT
    Фамилия
    FROM Сотрудники;

    Если опустить предикат DISTINCT, этот запрос возвратит обе записи для фамилии Иванов.Если предложение SELECT содержит более одного поля, то для включения записи в результат выполнения запроса необходимо, чтобы совокупность значений во всех этих полях была уникальной.Результат выполнения инструкции SQL, содержащей предикат DISTINCT, является необновляемым и не отражает последующие изменения, внесенные другими пользователями.

    DISTINCTROW
    Опускает данные, основанные на целиком повторяющихся записях, а не отдельных повторяющихся полях. Например, создан запрос, объединяющий таблицы "Клиенты" и "Заказы" по полю "Клиент". В поле "Клиент" таблицы "Клиенты" нет повторяющихся значений, однако, они есть в одноименном поле таблицы "Заказы", поскольку каждый клиент может разместить несколько заказов. Следующая инструкция SQL показывает, как можно использовать предикат DISTINCTROW для получения списка клиентов, разместивших хотя бы один заказ, без включения сведений о самих заказах:
    Код: Выделить всё
    SELECT DISTINCTROW Название
    FROM Клиенты INNER JOIN Заказы
    ON Клиенты.КодКлиента= Заказы.КодКлиента
    ORDER BY Название

    Если опустить предикат DISTINCTROW, в результат выполнения запроса будет включено несколько строк о каждом клиенте, сделавшем несколько заказов.Предикат DISTINCTROW влияет на результат только в том случае, если в запрос включены не все поля из анализируемых таблиц. Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу или все поля всех таблиц.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ganz
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 26.12.2003 (Пт) 9:46

Сообщение Ganz » 26.12.2003 (Пт) 12:11

distinct не прокатит, я не использую sql.
mbd файл подключен компонентом data

процедуру (см. выше) я закинул в form_load, при запуске спотыкается о строку Combo.RemoveItem(i)

:(


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 6

    TopList  
cron