Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / О повторяющихся значениях / 15 сообщений из 15, страница 1 из 1
02.10.2003, 15:48
    #32282200
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
Есть функция для заполнения Rowsource поля со списком:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Sub List(frm As Form, Ctrl As Control, i As Long)

    Dim rs As DAO.Recordset
    Dim Str As String
    Dim strSQL As String
     
    Set rs = frm.RecordsetClone
    Str =  "" "  - третья кавычка отсутствует :)
    If rs.RecordCount <>  0  Then
        rs.MoveFirst
        Do Until rs.EOF
            Str = Str & rs.Fields(i).Value &  "; " 
            rs.MoveNext
        Loop
            Ctrl.RowSource = Str
        rs.Close
    End If

End Sub

Rowcource, что естесственно, заполняется всеми значениями из соответствующего поля. Но в этом поле слишком много повторяющихся значений. Как мне это исправить???
...
Рейтинг: 0 / 0
02.10.2003, 15:54
    #32282223
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
самый простой способ:

рекордсету сказать, чтобы он был DISTINCT или GROUP BY

- получишь уникальный набор.

способ сложнее:

брать в МАССИВ, потом сортировать, затем проходить по массиву, вытирать повторы
...
Рейтинг: 0 / 0
02.10.2003, 15:58
    #32282232
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
рекордсет - это ЛОГ, т.е там все нужно :)

А вот как работать с массивом я понятия не имею :)
...
Рейтинг: 0 / 0
02.10.2003, 16:02
    #32282238
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
запонять Rowsource
таким способом
не советую - ограничение
по длинне.
лучше подсунь
рекордсет или запрос
...
Рейтинг: 0 / 0
02.10.2003, 16:05
    #32282246
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
1)Для проверки уникальности можно использовать класс Scripting.Dictionary
2)RowSource в виде строки ограничен 2048 символами.
3)Использовать в качестве имени переменной Str имя функции не очень удачное решение
...
Рейтинг: 0 / 0
02.10.2003, 16:07
    #32282260
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
Хам трамвайный
Согласен :)
Но:
1) Нихрена у меня не получилось такой запрос сделать, что выбирал отображающиеся в подчиненной форме записи
2) если значения не будут повторяться, то до ограничения по длине я не доберуусь :)
...
Рейтинг: 0 / 0
02.10.2003, 16:10
    #32282268
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
PA
Первое не понял
Второе знаю
С третьим согласен
...
Рейтинг: 0 / 0
02.10.2003, 16:13
    #32282275
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
работать с массивом просто

в заголовке процедурки

dim myArray()

когда получишь длину своего рекорсета

ReDim myArray(длина)

а потом НЕ STR$() =

!!! ЭТО ФУНКЦИЯ, народ праильно взмущается!!!!


а
i=i+1
myArray(i)=данные


А вот после заполнения будешь дого радоваться.

в частности по поводу сортировки - очень долго вб ее будет делать если данных много

и алгоритм искать нужно

рекомендую пузырьковую если найдешь
...
Рейтинг: 0 / 0
02.10.2003, 16:16
    #32282281
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
подсунь полю со списком
то же выражение, что
и форме, но только добавь
distinct и убери лишние
столбцы
...
Рейтинг: 0 / 0
02.10.2003, 16:28
    #32282297
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
Хам трамвайный
Интересно о чем я думал, когда пытался сделать такой запрос :)
Спасибо!
Но все же я лучше с массивами по играю - писанины меньше :)
Уже доделал почти
...
Рейтинг: 0 / 0
02.10.2003, 16:56
    #32282336
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
Вот эт ты здря. щаз будешь сортировать да копии ловить.
Легче было повесить подч форму на запрос,
а на него (запрос) навесить новый с дистинкт - и получил бы что нада.

кстати, глянь правда есь ли в вба спец коллекции "словарь"
(dictionary) - они не дают ввести одинаковые элементы,
избавишься сразу и от массивов и от соритовки-отлова повторов.
...
Рейтинг: 0 / 0
02.10.2003, 18:01
    #32282470
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
Alexus12
Насчет запросов скажу только, что НЕ ПОКАТИТ стопудово. От объяснений воздержусь.

По поводу Dictionary
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Public Sub List(frm As Form, Ctrl As Control, i As Long)

    Dim rs As DAO.Recordset
    Dim StrArr, StrRow, ArrRow
    Dim x As Integer

    Set StrArr = CreateObject( "Scripting.Dictionary" )
    Set rs = frm.RecordsetClone
    StrArr.removeall
    StrRow =  ""
    ArrRow = "  "
    x = 1 

    rs.MoveFirst
        Do Until rs.EOF
            x = x +  1 
            StrArr.Add x, rs.Fields(i).Value & "; "
            rs.MoveNext
        Loop
        
        ArrRow = StrArr.items
        For x =  0  To StrArr.Count -  1 
             StrRow = StrRow & ArrRow(x)
        Next
        Debug.Print StrRow
End Sub

Этот код вполне позволяет вводить одинаковые значения

С этим Dictionary у меня два вопроса:
1) где посмотреть его свойства
2) как сравнивать добавляемые значения с уже имеющимися в масиве?
...
Рейтинг: 0 / 0
02.10.2003, 19:22
    #32282573
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
Убедительно всех прошу проявить активность :)
...
Рейтинг: 0 / 0
02.10.2003, 20:24
    #32282601
Vsevolod V
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
У меня появился вариант и я никак не пойму почему он не работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Public Sub List(frm As Form, Ctrl As Control, i As Long)

    Dim rs As DAO.Recordset
    Dim StrArr, StrRow, ArrRow
    Dim X As Integer
    
    Set StrArr = CreateObject( "Scripting.Dictionary" )
    Set rs = frm.RecordsetClone
    StrArr.removeall
    StrRow =  ""
    ArrRow = "  " " 
    X =  0 

    rs.MoveFirst
        Do Until rs.EOF
            X = X +  1 
            StrArr.Add X, rs.Fields(i).Value &  "; " 
            rs.MoveNext
        Loop
        
        ArrRow = StrArr.Items

        rs.MoveFirst
        For X =  0  To StrArr.Count -  1  And rs.EOF
            If rs.Fields(i).Value &  "; "  = ArrRow(X) Then
                rs.MoveNext
            Else
                StrRow = StrRow & ArrRow(X)
                rs.MoveNext
            End If
        Next X
            
Debug.Print StrRow
End Sub

Debug.Print StrRow = ПУСТО :(
В чем тут дело??
...
Рейтинг: 0 / 0
03.10.2003, 12:55
    #32283136
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О повторяющихся значениях
> StrArr.Count - 1 And rs.EOF

На каком это языке??? Это логическое выражение, оно может дать в результате только или 0, или -1.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / О повторяющихся значениях / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]