powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Минимум по полям
20 сообщений из 20, страница 1 из 1
Минимум по полям
    #32165867
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 10 полей в таблице, во всех - нецелые числа или ничего. Нужно в 11-том поле найти минимум по каждой записи, а в 12-ом - указать, какому из десяти полей этот минимум соответствует. Спасибо!
...
Рейтинг: 0 / 0
Минимум по полям
    #32165872
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Через селект никак. Надо писать программу с рекордсетом.

Через селект разве что нечто вроде:

select *,

iif(f1<f2 and f1<f3 ... and f1<f10, f1,
iif(f2<f3 ... and f2<f10, f2,
...
iif(f9<f10, f9, f10)...)) as f11,

iif(f1<f2 and f1<f3 ... and f1<f10, 1,
iif(f2<f3 ... and f2<f10, 2,
...
iif(f9<f10, 9, 10)...)) as f12

from MyTable
...
Рейтинг: 0 / 0
Минимум по полям
    #32165886
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное все-таки нужен шаблон для вопроса в форум

Указывайте версию базы и клиента:
mdb + Access97
SQL + Access2002
и т.п.

будет легче подобрать более оптимальное решение проблемы.
...
Рейтинг: 0 / 0
Минимум по полям
    #32165889
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Access 97 mdb
Select, наверное, не годится, так как 10 полей могут завтра превратиться в 20 или больше.
...
Рейтинг: 0 / 0
Минимум по полям
    #32165903
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2kravets

>так как 10 полей могут завтра превратиться в 20 или больше.

Поздравляю с не нормализованной структурой базы!
Ваши 20 полей надо было бы хранить в отдельной таблицы как строки (это же какие-то данные описывающие один объект?), тогда бы IIF с 20 условиями не писали и минимум искали ну очень просто. А так - флаг вам в руки и осваиваете печать слепым методом, а то проект по-времени затянется...
...
Рейтинг: 0 / 0
Минимум по полям
    #32165934
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну хорошо, пусть будет всегда 10 полей. Все равно не хочется через селект.
А такая структура базы не от хорошей жизни, так получилось.
...
Рейтинг: 0 / 0
Минимум по полям
    #32165942
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Все равно не хочется через селект.

В чем тогда вопрос?
...
Рейтинг: 0 / 0
Минимум по полям
    #32165951
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да в том-то загвоздка, что мощи не хватает сделать по-другому. Увы!
...
Рейтинг: 0 / 0
Минимум по полям
    #32165975
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim i As Integer, n As Integer, v As Variant, f As Variant

With CurrentDB.OpenRecordset( "select * from MyTable" )
    Do Until .EOF
        .MoveNext
        i =  0 
        v = Null
        For n =  1  to  10 
            Set f = .Fields( "F"  & CStr(n)).Value
            Select Case True
                Case IsNull(f)
                Case IsNull(v), f < v
                    v = f
                    i = n
            End Select
        Next
        .Edit
        !F11 = v
        !F12 = i
        .Update
    Loop
    .Close
End With


Правда, это до отладки.
...
Рейтинг: 0 / 0
Минимум по полям
    #32166033
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему-то ругается на строчку

Set f = .Fields("F" & CStr(n)).Value

Пишет Ошибка 13 Несоответствие типа.
...
Рейтинг: 0 / 0
Минимум по полям
    #32166040
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убери Set:
f = .Fields("F" & CStr(n)).Value
...
Рейтинг: 0 / 0
Минимум по полям
    #32166069
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, теперь 13-ая исчезла, появилась 3021 No current record

А на какое событие вешать? У меня сейчас стоит на открытие формы.
...
Рейтинг: 0 / 0
Минимум по полям
    #32166082
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Владимр Саныч
Зачем первую запись пропускаешь? .MoveNext сразу после входа в цикл.

2kravets
Тебе дали для отладки - вот и отлаживай.
...
Рейтинг: 0 / 0
Минимум по полям
    #32166096
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Senin Viktor
Чего злой такой? Ну не умею я, иначе меня здесь бы и не было.

А без .MoveNext вообще виснет.
...
Рейтинг: 0 / 0
Минимум по полям
    #32166110
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, ты где? Меня за твой пример злым назвали - присоединяйся "добрым". Будет "добрый" и "злой" программер, как в полицейских боевиках

2kravets
Только, kravets, отладка - это не значит операторы стирать.
ВЕРНИ .MoveNext и поставь его перед .Loop
...
Рейтинг: 0 / 0
Минимум по полям
    #32166120
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Senin Viktor
Ну ладно, пусть не злой.
Если переставить .MoveNext, то уже не виснет.
Но ни черта не считает. В полях F11 и F12 пишет #Имя?
...
Рейтинг: 0 / 0
Минимум по полям
    #32166154
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я вернулся. Насчет MoveNext (и Set тоже) - это я рассеянный. Вообще-то когда себе программирую, то таких ошибок не делаю. Но в окне форума трудно заниматься отладкой. :^)

А насчет злых и добрых - чего уж там, давайте все будем шире душой. Уж быть добрыми, так всем.
...
Рейтинг: 0 / 0
Минимум по полям
    #32166603
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, одним селектом проблемно (если еще и сами поля и номер поля с максимальным выводить) А вот без -

SELECT Val_U.key AS key, Max(Val_U.val) AS Max_val
FROM
[SELECT key, val1 AS val, 1 AS n
FROM Vals
Union
SELECT key, val2 AS val, 2 AS n
FROM Vals
Union
SELECT key, val3 AS val, 3 AS n
FROM Vals].
AS Val_U
GROUP BY Val_U.key;

(если задачи уместиться в 1 запрос нет - можно, при наперед заданном числе столбцов соорудить конструкцию. но VBA проще - яснее
...
Рейтинг: 0 / 0
Минимум по полям
    #32166605
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Assa:
Но тогда значение n не выводится наружу.
...
Рейтинг: 0 / 0
Минимум по полям
    #32166613
kravets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось. Спасибо, Владимир Саныч. И тебе, злой, большое спасибо.
Только хочется поля называть по своему усмотрению и перебирать их просто по номеру.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Минимум по полям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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