Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Анализ 31-го числового поля для каждой записи / 15 сообщений из 15, страница 1 из 1
24.05.2004, 07:30
    #32529893
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Боевая задача:

Таблица MyTable...поля f1,f2,f3,f4,f5...d1-d31

d1-d31 (дни месяца)...

В каждом из полей d1-d31 содержатся числа (например 22, 23, 22, 24, 22...)

Заранее известно, что в этот конкретный месяц в каждом из полей d1-d31 должна содержаться цифра 22 (либо ничего не содержаться)...

Необходимо - запуск функции - вывод формы содержащей информацию о том, что в записи такой-то в полях d1-d31 обнаружены следующие цифры: 22 - 3 раза, 23 - 1 раз, 24 - 1 раз и предложение пользователю заменить во всех полях d1-d31, содержащих что-либо, на 22, либо - 23 , либо - 24....

Решить в принципе и сам могу, но получается ужасно - временные таблицы и т.д. и т.п.
Вопрос как можно решить красивее и грамотнее. (без разницы - запросом или VBA...)

MSA 2002, VBA 6.3
...
Рейтинг: 0 / 0
24.05.2004, 09:30
    #32529966
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
При такой структуре таблицы, только руками :)

Или циклом через rs - если поля достаточно одинаково называются
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim rs As ...

rs.Open ... (ADO)
'Set rs = CurrentDb.OpenRecordset ... (DAO)

for i =  1  to  31 
  msgbox rs("d" & i)
next
...
Рейтинг: 0 / 0
24.05.2004, 09:41
    #32529983
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
2 paparome

Вот-вот, как раз цикл у меня и работает...
For each ctl in me
if typeof ctl is textbox then
if left(ctl.name) = "d" then
Вопрос - что написать здесь ???
end if
end if
next
...
Рейтинг: 0 / 0
24.05.2004, 09:46
    #32529998
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
авторВопрос - что написать здесь ???

Ну ды так и напиши :)

msgbox me(ctl.name)

?
...
Рейтинг: 0 / 0
24.05.2004, 09:51
    #32530011
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
А зачем мне msgbox me(ctl.name) ?
...
Рейтинг: 0 / 0
24.05.2004, 09:52
    #32530013
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Может вопрос мой не так понятен ?
...
Рейтинг: 0 / 0
24.05.2004, 09:53
    #32530016
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Ну - я же не знаю что вам с этим полем надо делать, вот, в качестве примера, и написал его вывод в msgbox

что не понятно в конструкции me(ctl.name)
?
...
Рейтинг: 0 / 0
24.05.2004, 09:56
    #32530023
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
C мсг все ясно, но будьте добры - перечитайте мой вопрос еще раз...
Там недетский анализ должен получиться...
А имена полей мне не нужны...
...
Рейтинг: 0 / 0
24.05.2004, 09:56
    #32530025
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Необходимо - запуск функции - вывод формы содержащей информацию о том, что в записи такой-то в полях d1-d31 обнаружены следующие цифры: 22 - 3 раза, 23 - 1 раз, 24 - 1 раз и предложение пользователю заменить во всех полях d1-d31, содержащих что-либо, на 22, либо - 23 , либо - 24....
...
Рейтинг: 0 / 0
24.05.2004, 10:01
    #32530038
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Блин, может мне за вас и анализатор написать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Dim colvo( 22  to  24 ) as integer

for i =  22  to  24  
colvo(i) =  0 
next

For each ctl in me
if typeof ctl is textbox then
if left(ctl.name) = "d" then
  select case me(ctl.name)
  case  22 : colvo( 22 ) = colvo( 22 ) +  1 
  case  23 : colvo( 23 ) = colvo( 23 ) +  1 
  case  24 : colvo( 24 ) = colvo( 24 ) +  1 
  end select
end if
end if
next

msgbox _
  "22 = " & colvo( 22 ) & vbcrlf & _
  "23 = " & colvo( 23 ) & vbcrlf & _
  "24 = " & colvo( 24 ) & vbcrlf
...
Рейтинг: 0 / 0
24.05.2004, 10:38
    #32530140
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Большое спасибо...
но есть вопросы:

22 23 24 - это пример...могут быть 1,2,30,1000 и т.д. тогда colvo(22 to 24) as integer писать как colvo(0 to 1000) as integer, а если появится 10000 ? И что тогда с кейсами...

еще раз спасибо...
...
Рейтинг: 0 / 0
24.05.2004, 10:42
    #32530150
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
10 000 полей в таблице это круто
Deminik ты путаешь индекс массива и его(массива) значение
...
Рейтинг: 0 / 0
24.05.2004, 10:48
    #32530168
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
2 Deminik

Еще раз повторюсь:
Это был пример. Мне следует за вас анализатор написать?

Используйте 2 массива (максимальная длина 31, по этой причине можно не использовать динамические)

Код: 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.
Dim num( 1  to  31 ) as integer
Dim colvo( 1  to  31 ) as integer
Dim lst as integer
Dim n as integer
Dim i as integer

lst =  0 

For each ctl in me
if typeof ctl is textbox then
if left(ctl.name) = "d" then
 n = me(ctl.name)
 i =  1 
 while (i <= lst) and (num(i)<>n)
  i = i +  1 
 wend

 if i > lst then  /*Не найден - добавляем*/ 
  lst = lst +  1 
  num(lst) = n
  colvo(lst) =  1 
 else  /*Найден - увеличиваем*/ 
  colvo(i) = colvo(i) +  1 
 end if
end if
end if
next

for i =  1  to lst
  msgbox num(i) & " - " & colvo(i)
next
...
Рейтинг: 0 / 0
24.05.2004, 10:51
    #32530178
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Огромное спасибо и извините за мучения....
...
Рейтинг: 0 / 0
24.05.2004, 11:02
    #32530206
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Анализ 31-го числового поля для каждой записи
Вопрос как можно решить красивее и грамотнее
"красивее и грамотнее" надо было думать когда структуру базы разрабатывал.
Посмотри здесь
/topic/93774&hl=#685875
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Анализ 31-го числового поля для каждой записи / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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