1 / 1 / 0
Регистрация: 05.04.2016
Сообщений: 29
1

Max значение +1

23.05.2016, 13:25. Показов 466. Ответов 12
Метки нет (Все метки)

Помогите решить!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Кнопка146_Click()
Dim s
s = "SELECT Max t_pg_soispolnitel_osn!NomPoradok AS Max"
s=s & "  FROM t_pg_soispolnitel_osn "
s=s & " WHERE t_pg_soispolnitel_osn.NomPG =" & Me.Поле20
With CurrentDb.OpenRecordset("select * from t_pg_soispolnitel_osn")
          .AddNew
          !NomPg = Me.Поле20
          !pg_soispolnitel_osn = Me.ПолеСоСписком147
          !NomPoradok = s + 1
          .Update
          Me.Список123.Requery
End With
End Sub
Как мне найти максимальное значение? В чем ошибка?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2016, 13:25
Ответы с готовыми решениями:

Max значение
Помогите как вывести kod_com с максимальной суммой ? Что добавить в этот запрос ? SELECT...

Задача для курсовой: определить значение z=max(a, 2b)*max(2a-b,b), где max(x, y)-максимальные из чисел х и у
Определить значение z=max(a, 2b)*max(2a-b,b), где max(x, y)-максимальные из чисел х и у. Задачу...

Найти max значение в каждой группе чисел и max из полученных max
Заданы три группы чисел 10, 20, 50 100, 200, 75 A, B, C Найти max значение в каждой группе...

Рассчитать значение z=max(a,2b) max(2a-b,b) определив и использовав функцию max(x,y)
Рассчитать значение z=max(a,2b)+max(2a-b,b) определив и использовав функцию max(x,y) – максимальное...

12
Модератор
Эксперт MS Access
10163 / 4158 / 677
Регистрация: 07.08.2010
Сообщений: 11,710
Записей в блоге: 4
23.05.2016, 13:34 2
попробуйте
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Кнопка146_Click()
Dim s
s = "SELECT Max (t_pg_soispolnitel_osn.NomPoradok) AS zMax"
s=s & "  FROM t_pg_soispolnitel_osn "
s=s & " WHERE t_pg_soispolnitel_osn.NomPG =" & Me.Поле20
With CurrentDb.OpenRecordset("select * from t_pg_soispolnitel_osn")
          .AddNew
          !NomPg = Me.Поле20
          !pg_soispolnitel_osn = Me.ПолеСоСписком147
          !NomPoradok = s + 1
          .Update
          Me.Список123.Requery
End With
End Sub
1
Эксперт MS Access
26705 / 14385 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
23.05.2016, 13:37 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Кнопка146_Click()
Dim s
s = "SELECT Max(t_pg_soispolnitel_osn!NomPoradok) FROM t_pg_soispolnitel_osn WHERE t_pg_soispolnitel_osn.NomPG =" & Me.Поле20
With CurrentDb.OpenRecordset("select * from t_pg_soispolnitel_osn")
  .AddNew
  !NomPg = Me.Поле20
  !pg_soispolnitel_osn = Me.ПолеСоСписком147
  !NomPoradok = Currentdb.openrecordset(s).fields(0) + 1
  .Update
End With
Me.Список123.Requery
End Sub
2
1 / 1 / 0
Регистрация: 05.04.2016
Сообщений: 29
23.05.2016, 14:52  [ТС] 4
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Кнопка146_Click()
Dim s
s = "SELECT Max(t_pg_soispolnitel_osn!NomPoradok) FROM t_pg_soispolnitel_osn WHERE t_pg_soispolnitel_osn.NomPG =" & Me.Поле20
With CurrentDb.OpenRecordset("select * from t_pg_soispolnitel_osn")
  .AddNew
  !NomPg = Me.Поле20
  !pg_soispolnitel_osn = Me.ПолеСоСписком147
  !NomPoradok = Currentdb.openrecordset(s).fields(0) + 1
  .Update
End With
Me.Список123.Requery
End Sub
Этот код работает, НО когда перехожу на следующую запись
!NomPoradok = Currentdb.openrecordset(s).fields(0) + 1
ничего не записывает в таблицу

а код
!NomPoradok = s + 1
пишет несоответствие типа

мне нужно найти в выборке максимальное значение и как число его запихнуть куда нибудь в поле на форме что бы оттуда записать в таблицу или или сразу полученное значение в таблицу
это количество строк отображает на форме список

Добавлено через 14 минут
На форме список - набор записей от выборки
как в поле отобразить их количество, что бы с этим числом можно было проводить манипуляции?
0
822 / 453 / 79
Регистрация: 18.05.2016
Сообщений: 1,216
Записей в блоге: 4
23.05.2016, 15:56 5
впервые вижу такую конструкцию
Visual Basic
1
With CurrentDb.OpenRecordset("select * from t_pg_soispolnitel_osn")
лучше замените её на
Visual Basic
1
2
3
Dim rst As Recordset
Set rst= CurrentDb.OpenRecordset("select * from t_pg_soispolnitel_osn")
rst!поле
И компактно будет, для чего With обычно применяется. И наглядно и путаницы не будет.
Насчёт вопроса. у rst есть свойство .Count - количество записей. Но оно не всегда обсчитывается сразу. Обычно делаю так
Visual Basic
1
2
3
rst.MoveLast
rst.MoveFirst
MsgBox rst.Count
Это, кстати бывает и когда вручную открываешь большую таблицу - акцесс не сразу подсчитывает количество записей. Надо руками мотануться туда и обратно.

И ещё совет. Если надо опять же для удобства перенести в коде большое строковое выражение на следующую строчку, то можно делать так:
Visual Basic
1
2
3
MsgBox "Это одна строка, " & _
"хоть в коде и перенесена на две строки" & _
vbCrLf & "А эту строку мы перенесли принудительно"
Добавлено через 19 минут
Ну вот. Опять запутываю У рекордсета свойство не Count называется, а RecordCount.
1
Эксперт MS Access
26705 / 14385 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.05.2016, 12:02 6
Цитата Сообщение от amd48 Посмотреть сообщение
впервые вижу такую конструкцию
Такая "конструкция" удобна экономией памяти. Явное создание рекордсета занимает память и, чтобы не было утечек памяти, переменную рекордсета надо нафинговать после использования. При использовании With рекордсет объект удаляется автоматом.
0
822 / 453 / 79
Регистрация: 18.05.2016
Сообщений: 1,216
Записей в блоге: 4
24.05.2016, 12:23 7
рекордсет тоже можно уничтожать
rst = Nothing
А автоматическое освобождение происходит вообще всех объектов, созданных в блоке процедуры или в цикле, при выходе из блока. With - точно такой же блок с таким же поведением. Так что никаких преимуществ использования With не вижу. Только путаница от него. Причём всегда, где его встречал. Ну свойства структуры ещё можно заполнить с его помощью. Там наглядность удобна. Но вот выполнять методы через него - это же ужас.
0
Эксперт MS Access
26705 / 14385 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.05.2016, 12:58 8
Цитата Сообщение от amd48 Посмотреть сообщение
рекордсет тоже можно уничтожать
Вы как бы не читаете написанное:
Цитата Сообщение от mobile Посмотреть сообщение
переменную рекордсета надо нафинговать
Цитата Сообщение от amd48 Посмотреть сообщение
With - точно такой же блок с таким же поведением.
Думаю, что не так. Объект в With создается системой, а система умеет управляться со своими объектами. И очищать занятое пространство после использования,
Пользовательская переменная действительно удаляется из памяти после закрытия процедуры, но место в памяти может сохраниться. На этом как раз основаны многочисленные проблемы утечек памяти.
1
822 / 453 / 79
Регистрация: 18.05.2016
Сообщений: 1,216
Записей в блоге: 4
24.05.2016, 13:02 9
Слово нафинговать сразу не понял, как Nothing
Цитата Сообщение от mobile Посмотреть сообщение
Пользовательская переменная действительно удаляется из памяти после закрытия процедуры, но место в памяти может сохраниться
"Может". Хм. Точно-точно? Что понимается под системой? VBA? Почему у неё такое выборочное отношение к блокам и объектам в них? Алгоритм работы с ним в одной библиотеке языка же.
0
Эксперт MS Access
26705 / 14385 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.05.2016, 13:11 10
Видимо объекты разного типа. Созданные With изначально помечаются как временные объекты Windows и и их очисткой занимается сборщик мусора винды. А очисткой памяти объектов Access занимается сам акс. И это у него не всегда получается.
0
822 / 453 / 79
Регистрация: 18.05.2016
Сообщений: 1,216
Записей в блоге: 4
24.05.2016, 13:27 11
Цитата Сообщение от mobile Посмотреть сообщение
Созданные With изначально помечаются как временные объекты Windows
Интересно. Это такая надстройка типа WinAPI? Она живёт отдельно от VBA? Просто не понимаю, как в пределах одного языка одинаковые языковые конструкции наделяются разным поведением.
А если создать объект rst и обращаться к нему через With, то память будет захвачена дважды? Или если один раз, то при выходе из блока With, что произойдёт с rst? Он же не обнулится?
А есть какие-нибудь тесты работы с памятью или ещё какие-нибудь выкладки, показывающие это разделение? Мож там ещё какие-нибудь моменты есть кроме With?

Мне вот кажется, что создание набора записей через переменную - это получение блока памяти с явным именем, а через With - без имени. Вот и вся разница. Только в коде эта разница в другом. Отлаживать With тяжелее. Нельзя, например, во время стопа проанализировать элементы этого блока. По крайней мере это сложнее, чем с переменной
0
Эксперт MS Access
26705 / 14385 / 3190
Регистрация: 28.04.2012
Сообщений: 15,783
24.05.2016, 13:49 12
Объекты, помимо имени, имеют еще еще и статус (название условное). Есть объекты винды, например загруженная программа. После ее закрытия занимаемая память очищается. В отличие от резидентных программ и служб. Происходит потому, что пользовательские программы имеют статус сеансовых, временных и сборщик мусора немедленно приступает к работе после закрытия программы. Аналогично и системные объекты создаваемые в сеансе Access. Очисткой памяти после закрытия всяких datasheet занимается винда, объекты помечены как временные и незачем создавать свои процедуры когда есть системные, отлаженные. Также с With. Создаваемый объект получает статус временного и память после закрытия очищается виндой.

Цитата Сообщение от amd48 Посмотреть сообщение
Отлаживать With тяжелее. Нельзя, например, во время стопа проанализировать элементы этого блока.
И в чем сложность? Те же самые свойства и методы.
1
шапоклякистка 8-го дня
3665 / 2225 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.05.2016, 06:40 13
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Кнопка146_Click()
Dim MaxNom 
MaxNom = Nz(DLookup("NomPoradok","t_pg_soispolnitel_osn","NomPG =" & Me.Поле20),0)
With CurrentDb.OpenRecordset("select * from t_pg_soispolnitel_osn")
          .AddNew
          !NomPg = Me.Поле20
          !pg_soispolnitel_osn = Me.ПолеСоСписком147
          !NomPoradok = MaxNom + 1
          .Update
          Me.Список123.Requery
End With
End Sub
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2016, 06:40

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Определить значение Z=max(a,2b)*max(2a-b,b), где max(x,y)-максимальное из чисел x,y
Помогите решить задачу: Определить значение Z=max(a,2b)*max(2a-b,b), где max(x,y)-максимальное из...

Определить значение функции max(a, max(a/2, cos b))*max(2a-b,b)
Составьте программу для решения задачи. Определите значение õ=max(a, max(a/2, cos...

Даны векторы a и b , состоящие из семи компонентов. Найти max(max(Ai), max(Bi), max(¦Ai-Bi¦), max(Ai+Bі),1)
Даны векторы a и b , состоящие из семи компонентов. Найти max(max(Ai), max(Bi), max(¦Ai-Bi¦),...

Определить значение z, z=min(a,3b)*max(2a-b,2b), где max(x,y) есть максималое из чисел x,y
Определить значение z, z=min(a,3b)*max(2a-b,2b), где max(x,y) есть максималое из чисел x,y


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

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

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