Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 247
1

Конструкция If.Then.EndIf

18.05.2019, 11:39. Просмотров 1504. Ответов 21
Метки нет (Все метки)

Приветствую дорогие друзья! Это снова Я

Пытаюсь настроить механизм одновременной фильтрации и сортировки посредством условий if, получается пока очень сомнительно.
Даже не знаю, либо логику не понимаю конструкции (скорее всего), либо со свойствами сортировки намудрил.
Уже полдня сижу, вкурить не могу, как мог кодом манипулировал, поэтому сразу выкладываю БД.
Знаю, что наверно будете писать, что даже не пытался думать, извините, только начинаю программировать.
Главная форма ALL, там две кнопки, взаимодействующие с сабформой.

Visual Basic
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
34
35
36
37
38
39
40
41
Private Sub filterSwitches_AfterUpdate()
 
    'фильтрация записей по текущей дате
 
    If sortingSwitches And filterSwitches Then
        Forms![ALL]![PF_DOKUMENT].Form.OrderBy = "nomer ASC"
        Forms![ALL]![PF_DOKUMENT].Form.OrderByOn = True
        Forms![ALL].Controls![PF_DOKUMENT].Form.RecordSource = "SELECT * FROM DOKUMENT WHERE  DOKUMENT.DATA= " & Format(Date, "\#mm\/dd\/yyyy\#")
        
        
    ElseIf filterSwitches Then
        Forms![ALL].Controls![PF_DOKUMENT].Form.RecordSource = "SELECT * FROM DOKUMENT WHERE  DOKUMENT.DATA= " & Format(Date, "\#mm\/dd\/yyyy\#")
        
    ElseIf filterSwitches = False Then
        Forms![ALL].Controls![PF_DOKUMENT].Form.RecordSource = "SELECT * FROM DOKUMENT"
 
  End If
 
End Sub
 
Private Sub sortingSwitches_AfterUpdate()
 
    'сортировка записей 
    
    If sortingSwitches And filterSwitches Then
        Forms![ALL]![PF_DOKUMENT].Form.OrderBy = "nomer ASC"
        Forms![ALL]![PF_DOKUMENT].Form.OrderByOn = True
        Forms![ALL].Controls![PF_DOKUMENT].Form.RecordSource = "SELECT * FROM DOKUMENT WHERE  DOKUMENT.DATA= " & Format(Date, "\#mm\/dd\/yyyy\#")
    
    
    ElseIf sortingSwitches Then '(1) - включен, (2) - отключен
        Forms![ALL]![PF_DOKUMENT].Form.OrderBy = "nomer ASC"
        Forms![ALL]![PF_DOKUMENT].Form.OrderByOn = True
 
    ElseIf sortingSwitches = False Then
        Forms![ALL]![PF_DOKUMENT].Form.OrderBy = "nomer DESC"
        Forms![ALL]![PF_DOKUMENT].Form.OrderByOn = True
  
    End If
 
End Sub
Еще на сабформе прописал в событии текущей записи значения кнопок.

Заранее, спасибо.
0
Вложения
Тип файла: rar base.rar (32.4 Кб, 7 просмотров)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2019, 11:39
Ответы с готовыми решениями:

Конструкция UPDATE
Есть следующий запрос, который обновляет ячейку в таблице если там стоит "лабораторные",...

Существует ли конструкция over в access
Подскажите есть ли Over в Access, необходимо произвоти суммирование нескольких полей, но так, чтобы...

Что делает данная конструкция
конструкция CurrentDb.Execute ("Create UNIQUE index 'Код товара' on Товар (Код товара);"...

Как в VB записывается конструкция isnull(a,b)
Ну в принципе вопрос понятен? если нет поясняю! В транзакт-sql есть такая функция, isnull(a,b) т.е...

21
Модератор
Эксперт MS Access
2707 / 1515 / 372
Регистрация: 12.06.2016
Сообщений: 3,756
18.05.2019, 13:24 2
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub filterSwitches_AfterUpdate()
 Forms![ALL].PF_DOKUMENT.Form.RecordSource = "SELECT * FROM DOKUMENT "  & _
                                             IIf(filterSwitches, "WHERE DATA=Date()", "")
 Call sortingSwitches_AfterUpdate
End Sub
 
Private Sub sortingSwitches_AfterUpdate()
 Forms![ALL]!PF_DOKUMENT.Form.OrderBy = "nomer " & IIf(sortingSwitches, "ASC", "DESC")
 Forms![ALL]!PF_DOKUMENT.Form.OrderByOn = True
End Sub
[ALL] - не очень удачное название, это служебное слово.

Базу не смотрела.
1
Модератор
Эксперт MS Access
9785 / 3835 / 614
Регистрация: 07.08.2010
Сообщений: 10,854
Записей в блоге: 2
18.05.2019, 13:31 3
и конечно вставьте во все модули форм строку Option Explicit
и разберитесь с именами переменных или флажков, похожих на кнопки
1
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 247
18.05.2019, 14:27  [ТС] 4
Цитата Сообщение от Capi Посмотреть сообщение
[ALL] - не очень удачное название, это служебное слово.
учту
Цитата Сообщение от shanemac51 Посмотреть сообщение
и конечно вставьте во все модули форм строку Option Explicit
думал Option Compare Database достаточно, ошибся

Можно еще вопросы:

1.зачем делать вызов процедуры
Цитата Сообщение от Capi Посмотреть сообщение
Call sortingSwitches_AfterUpdate
Разве значение sortingSwitches меняется?
2. Вставил
Цитата Сообщение от Capi Посмотреть сообщение
Forms![ALL].PF_DOKUMENT.Form.RecordSource = "SELECT * FROM DOKUMENT " *& _
* * * * * * * * * * * * * * * * * * * * * * *IIf(filterSwitches, "WHERE DATA=Date()", "")
Forms![ALL]!PF_DOKUMENT.Form.OrderBy = "nomer " & IIf(sortingSwitches, "ASC", "DESC")
*Forms![ALL]!PF_DOKUMENT.Form.OrderByOn = True

в событие текущая запись главной формы все заработало как надо и без Call?
3. Почему строки кода из п.2 надо было вставить в глав. форму, а не подчиненную?
0
Модератор
Эксперт MS Access
2707 / 1515 / 372
Регистрация: 12.06.2016
Сообщений: 3,756
18.05.2019, 15:30 5
Арт_,

Для нормального цитирования кода есть кнопка "Выделить код" справа над кодом.

Цитата Сообщение от Арт_ Посмотреть сообщение
думал Option Compare Database достаточно, ошибся
Установите курсор на Option, нажмите F1 и прочтите в справке, что все это значит.
1
5846 / 3268 / 703
Регистрация: 05.10.2016
Сообщений: 9,007
18.05.2019, 17:10 6
Лучший ответ Сообщение было отмечено Арт_ как решение

Решение

Арт_, если я правильно понял вашу задачку ...
Все хотелки решаются одной, не длинной процедурой в главной форме
Visual Basic
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Private Sub FilterAndSort()
'фильтрация и сортировка по контролам
'--------------------------------------------------------------------------
Dim sFilter$, sSort$
'--------------------------------------------------------------------------
On Error GoTo FilterAndSort_Err
 
 
'Не знаю зачем это но ...
    Me![PF_DOKUMENT].Form.AllowAdditions = False
    Me![PF_DOKUMENT].Form.AllowDeletions = False
    Me![PF_DOKUMENT].Form.AllowEdits = False
 
 
'фильтрация записей по текущей дате
    If Me!filterSwitches = True Then
        sFilter = "DATA = " & Format(Date, "\#mm\/dd\/yyyy\#")
    
        Me![PF_DOKUMENT].Form.Filter = sFilter
        Me![PF_DOKUMENT].Form.FilterOn = True
    Else
        Me![PF_DOKUMENT].Form.Filter = sFilter
        Me![PF_DOKUMENT].Form.FilterOn = False
    End If
 
'сортировка
    If Me!sortingSwitches = False Then '(1) - включен, (2) - отключен
        sSort = "nomer DESC"
    Else
        sSort = "nomer ASC"
    End If
   
    Me![PF_DOKUMENT].Form.OrderBy = sSort
    Me![PF_DOKUMENT].Form.OrderByOn = True
 
 
FilterAndSort_End:
    On Error Resume Next
    Err.Clear
    Exit Sub
 
FilterAndSort_Err:
    MsgBox "Error: " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in Sub: FilterAndSort in module: Form_ALL", vbCritical, "Error in Application"
    Err.Clear
    Resume FilterAndSort_End
 
End Sub
1
Вложения
Тип файла: rar base_v02.rar (39.0 Кб, 2 просмотров)
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 247
19.05.2019, 02:17  [ТС] 7
Eugene-LS, все работает
зачем $ при объявлении переменной, для определения как variant?
Если не сложно кто может объяснить, где я ошибся, знаю, что код избыточный.
0
5846 / 3268 / 703
Регистрация: 05.10.2016
Сообщений: 9,007
19.05.2019, 06:49 8
Цитата Сообщение от Арт_ Посмотреть сообщение
зачем $ при объявлении переменной, для определения как variant?
$ - Означает что переменная будет объявлена как String.

кто может объяснить, где я ошибся
Думаю, это попытка применения .RecordSource вместо .Filter.
1
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 247
19.05.2019, 07:36  [ТС] 9
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Думаю, это попытка применения .RecordSource вместо .Filter.
Впервые пишу на vba да и вообще,
как только не пробовал.
Еще раз спасибо!
0
Модератор
Эксперт MS Access
2707 / 1515 / 372
Регистрация: 12.06.2016
Сообщений: 3,756
19.05.2019, 09:48 10
Цитата Сообщение от Eugene-LS
Цитата Сообщение от Арт_
кто может объяснить, где я ошибся
Думаю, это попытка применения .RecordSource вместо .Filter.
Это не ошибка.
Обновление RecordSource часто бывает лучше фильтра.
0
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 247
20.05.2019, 00:26  [ТС] 11
Цитата Сообщение от Capi Посмотреть сообщение
Это не ошибка.
Обновление RecordSource часто бывает лучше фильтра.
Не ошибка, но не работает - парадокс.
0
Модератор
Эксперт MS Access
2707 / 1515 / 372
Регистрация: 12.06.2016
Сообщений: 3,756
20.05.2019, 01:43 12
Цитата Сообщение от Арт_ Посмотреть сообщение
Не ошибка, но не работает - парадокс.
У кого как - парадокс.
0
5846 / 3268 / 703
Регистрация: 05.10.2016
Сообщений: 9,007
21.05.2019, 03:45 13
Цитата Сообщение от Capi Посмотреть сообщение
У кого как - парадокс.
Дорогая наша, Любимая Capi, я уже как-то писал, повторюсь:
- Тот кто моет полы - тот имеет право кричать "Вытирайте бл... ноги!!!"
Надеюсь вам несложный смысл этого понятен.
Да! - можно и через RecordSource.

Предложите пожалуйста своё краткое решение, основанное на RecordSource, и вам поперёк слова никто не скажет.
Уверен, таковое есть.
Успехов!

Добавлено через 1 час 36 минут
Capi, и напоминаю:
При использовании RecordSource - нужно запрещать сохранение свойств формы... иначе ...
Ну понятно.
0
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 247
21.05.2019, 07:34  [ТС] 14
Цитата Сообщение от Eugene-LS Посмотреть сообщение
При использовании RecordSource - нужно запрещать сохранение свойств формы... иначе ...
Вы меня все больше и больше вгоняете в ступор. Как это запретить, зачем? или лучше не спрашивать
0
5846 / 3268 / 703
Регистрация: 05.10.2016
Сообщений: 9,007
21.05.2019, 07:46 15
Цитата Сообщение от Арт_ Посмотреть сообщение
Вы меня все больше и больше вгоняете в ступор. Как это запретить, зачем?
Это я с Любимой Capi общаюсь так пока (местное - внутри форумные приколы).
Вашей задачки это никак не касается.
Арт_, так вас и не упоминали выше ....
0
Модератор
Эксперт MS Access
9785 / 3835 / 614
Регистрация: 07.08.2010
Сообщений: 10,854
Записей в блоге: 2
21.05.2019, 08:19 16
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Предложите пожалуйста своё краткое решение, основанное на RecordSource
у меня такое решение однажды было, еще на аксесс97
--каждый год --в отдельном DBF(вернее в 2 -х), типа CH97_1.DBF ,CH97_2.DBF
--в базе с формами --2 таблички такой же структуры(в каждой по 1 записи)
--но старте формы шло обращение к этим пустышкам, но ввести в них было ничего нельзя
+ свободное поля для ввода года
--при вводе года подключалась нужная пара таблиц
0
5846 / 3268 / 703
Регистрация: 05.10.2016
Сообщений: 9,007
21.05.2019, 08:22 17
Цитата Сообщение от shanemac51 Посмотреть сообщение
при вводе года подключалась нужная пара таблиц
Так это совсем-же другое дело!
https://www.youtube.com/watch?v=WNeL...VVya8&index=11
0
Модератор
Эксперт MS Access
2707 / 1515 / 372
Регистрация: 12.06.2016
Сообщений: 3,756
21.05.2019, 09:45 18
Цитата Сообщение от Eugene-LS
Предложите пожалуйста*своё краткое решение, основанное на RecordSource, и вам поперёк слова никто не скажет.
Уверен, таковое есть.
Уверена, что уверены Вы лишь в том, что предложить я ничего не смогу.

Хотя решение уже было мной дано за четыре часа до Вашего.
Пост #2, сразу после стартового поста.
0
Эксперт MS Access
6391 / 3999 / 236
Регистрация: 12.08.2011
Сообщений: 11,174
21.05.2019, 09:58 19
А я вот фильтеры не использую практически, только recordsource, чего и вам желаю. Но все базы у меня близко, не в другом городе\стране.
0
5846 / 3268 / 703
Регистрация: 05.10.2016
Сообщений: 9,007
21.05.2019, 10:29 20
Цитата Сообщение от Capi Посмотреть сообщение
Хотя решение уже было мной дано за четыре часа до Вашего.
Пост #2, сразу после стартового поста.
Хорошо!Арт_, вот вам и лучшее решение от ув. Capi - смотрите Пост #2.
Думаю и ув. alvk, скоро своё предложит.
Как выяснилось я был не прав.
Прошу простить великодушно.

Добавлено через 17 минут
Цитата Сообщение от alvk Посмотреть сообщение
Но все базы у меня близко, не в другом городе\стране.
Так в том то и дело, и разница

Добавлено через 6 минут
alvk, не отлынивайте! Я и ув. Арт_, ждём решения!
Правильного, рабочего и через RecordSource ... для локальной бвзы ...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2019, 10:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

If.ENDIF
в самом конце программа выдает ошибку с End if. подскажите, пожалуйста, в чем здесь проблема?...

Ifndef-define-endif
Qt Creator по умолчанию создаёт хэдер любого класса с подобной шапкой: #ifndef MYCLASS_H //...

Оптимизировать конструкцию IF-ELSE-ENDIF
Уважаемые форумчане, возможно вопрос глупый, но я всё равно его задам. Совсем не радует мой глаз...

Что ознает endif
#ifndef HEADER_11_H #define HEADER_11_H #include <math.h> struct romb { int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.