Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перебор значений поля запроса и сравнения его с массивом / 12 сообщений из 12, страница 1 из 1
20.08.2004, 18:18:17
    #32659748
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
В процедуру через аргумент ParamArray передается массив содержащий текст.величины.
В этой процедуре:
Код: plaintext
1.
2.
3.
4.
Set rst = CurrentDb.OpenRecordset...
rst.MoveFirst
Do While Not rst.EOF
........
Loop
вместо многоточия хочу организовать сравнение "не содержит ли очередная запись текст, который имеется в массиве ?" Это надо на каждой записи rst бегать по всем элементам массива?
...
Рейтинг: 0 / 0
20.08.2004, 18:42:55
    #32659776
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
BenzinЭто надо на каждой записи rst бегать по всем элементам массива?
Угу.

Если и массив, и рекордсет рассортированы, то можно попытаться оптимизировать.

Если тип данных строковой, то можно один раз пройтись по массиву и слепить стринг типа ";aaa;bbb;ccc;", а потом проверять mystring like "*;" & myfield & ";*"
...
Рейтинг: 0 / 0
20.08.2004, 18:53:46
    #32659785
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
Это что-то типа:
Код: plaintext
1.
2.
3.
4.
For intI =  0  To UBound(varParam())
      If  rst!Поле1 = Nz(varParam(intI), "") then
         .....
      end if
 Next intI
...
Рейтинг: 0 / 0
20.08.2004, 19:01:23
    #32659797
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
Если это вопрос к первому из трех моих ответов, то почти. Я бы убрал Nz - как-то оно противоречит постановке задачи...
...
Рейтинг: 0 / 0
20.08.2004, 19:02:53
    #32659799
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
А вот так будет работать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Set rst = CurrentDb.OpenRecordset...
rst.MoveFirst
Do While Not rst.EOF
    For intI =  0  To UBound(varParam())
      If rst!Поле1 = Nz(varParam(intI), "") Then
         rst.Edit
         rst!Флажок = True
         rst.Update
      Else
         rst.Edit
         rst!Флажок = False
         rst.Update
      End If
    Next intI
rst.MoveNext
Loop
....посмотрел - что-то не так.
Идея такая:если содержимое Поля1 входит в массив, то у этой записи поле Флажок устанавливается, если не входит - сбрасывается. Или, по другому: установить Флажок у тех записей, где значение Поля1 присутствует в массиве, у остальных - сбросить.
...
Рейтинг: 0 / 0
20.08.2004, 19:17:51
    #32659818
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
dim b as boolean
Set rst = CurrentDb.OpenRecordset...
rst.MoveFirst
Do While Not rst.EOF
    b=false
    For intI =  0  To UBound(varParam())
      If rst!Поле1 = varParam(intI) Then b=true
    Next intI
    rst.Edit
    rst!Флажок = b
    rst.Update
rst.MoveNext
Loop

Я убрал-таки Nz.

Хотя можно и по-другому. Сделать внешний цикл не по рекордсету, а по массиву. Тогда внутренний цикл не нужен совсем.

Код: plaintext
1.
2.
    For intI =  0  To UBound(varParam())
      currentdb.execute "update ... set Флажок=true where Поле1=" & cstr(varParam(intI))
    Next intI

Или:

Код: plaintext
1.
2.
3.
4.
5.
    dim s as string
    For intI =  0  To UBound(varParam())
      if s>"" then s=s & ","
      s=s & cstr(varParam(intI))
    Next intI
    currentdb.execute "update ... set Флажок=true where Поле1 in (" & s & ")"
...
Рейтинг: 0 / 0
20.08.2004, 19:20:44
    #32659826
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
Сорри, поправка.

Код: plaintext
1.
2.
3.
      currentdb.execute "update ... set Флажок=false"
    For intI =  0  To UBound(varParam())
      currentdb.execute "update ... set Флажок=true where Поле1=" & cstr(varParam(intI))
    Next intI

И:

Код: plaintext
1.
2.
3.
4.
5.
6.
    dim s as string
    For intI =  0  To UBound(varParam())
      if s>"" then s=s & ","
      s=s & cstr(varParam(intI))
    Next intI
    currentdb.execute "update ... set Флажок=true where Поле1 in (" & s & ")"
    currentdb.execute "update ... set Флажок=false where not Поле1 in (" & s & ")"
...
Рейтинг: 0 / 0
20.08.2004, 19:35:23
    #32659842
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
массив - отсортировать и для каждой записи - бинарным поиском
...
Рейтинг: 0 / 0
21.08.2004, 10:16:03
    #32659995
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
Спасибо!
...
Рейтинг: 0 / 0
21.08.2004, 13:15:56
    #32660058
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
К моему последнему варианту подвариант.

Код: plaintext
1.
2.
3.
4.
5.
    dim s as string
    For intI =  0  To UBound(varParam())
      if s>"" then s=s & ","
      s=s & cstr(varParam(intI))
    Next intI
    currentdb.execute "update ... set Флажок=Поле1 in (" & s & ")"
...
Рейтинг: 0 / 0
23.08.2004, 10:34:06
    #32660728
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
подозреваю, что быстрее будет выгрузить этот массив в таблицу и использовать запрос с like?
...
Рейтинг: 0 / 0
23.08.2004, 10:51:19
    #32660758
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор значений поля запроса и сравнения его с массивом
Способ(от ВС):
Код: plaintext
1.
2.
3.
CurrentDb.Execute "update tblQuery set tblQuery.Execute=false"
For intI =  0  To UBound(varParam())
     CurrentDb.Execute "update tblQuery set tblQuery.Execute=true where tblQuery.NameQuery='" & CStr(varParam(intI)) & "'"
Next intI
работает как часы...
Теперь проблема - как "красиво" заполнить этот ParamArray(топик где-то на этой странице).
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перебор значений поля запроса и сравнения его с массивом / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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