Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Минимум по полям / 20 сообщений из 20, страница 1 из 1
22.05.2003, 11:17
    #32165867
kravets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимум по полям
Есть 10 полей в таблице, во всех - нецелые числа или ничего. Нужно в 11-том поле найти минимум по каждой записи, а в 12-ом - указать, какому из десяти полей этот минимум соответствует. Спасибо!
...
Рейтинг: 0 / 0
22.05.2003, 11:21
    #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
22.05.2003, 11:29
    #32165886
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимум по полям
Наверное все-таки нужен шаблон для вопроса в форум

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

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

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

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

В чем тогда вопрос?
...
Рейтинг: 0 / 0
22.05.2003, 12:06
    #32165951
kravets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимум по полям
Да в том-то загвоздка, что мощи не хватает сделать по-другому. Увы!
...
Рейтинг: 0 / 0
22.05.2003, 12:21
    #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
22.05.2003, 12:54
    #32166033
kravets
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Минимум по полям
Почему-то ругается на строчку

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

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

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

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

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

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

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


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