Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Web > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail


Присылайте нам Донат :), напишите за что прислали )


Ответ
 
Опции темы
Старый 28.04.2019, 20:38   #1
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 10
Репутация: 10
По умолчанию Основы создания модуля VBA в Access

Доброго времени суток!
В запросе необходимо добавить вычисляемое поле, но количество символов в выражении (>1000) превышает размер поля построителя выражений.
Порядок вычисления значения поля хочу описать пользовательской функцией. Но к сожалению я в VBA нуб.
Подскажите пожалуйста как реализовать на примере:
Запрос "qdfMain". Поля Field1, Field2 и Field3. Field3 вычисляется и равно:
Код:

IIf([Field1] <>0;IIf([Field2]=1;[Field2]+1;IIf([Field2]=2;[Field2]+2)));

AndreyIRK вне форума   Ответить с цитированием
Старый 30.04.2019, 20:21   #2
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 10
Репутация: 10
По умолчанию

Подскажите пожалуйста что не так делаю...
Задача: поле запроса построить на основе пользовательской функции test() - произведение [Поле1] и [Поле2] таблицы tblMain
Код:

Public Function test()
Dim table As Recordset
Dim a As Integer
Dim b As Integer
Set table = CurrentDb.OpenRecordset("SELECT * FROM tblMain")
Do Until table.EOF
a = table.Fields("[Поле1]")
b = table.Fields("[Поле2]")
test = a * b
table.MoveNext
Loop
End Function

AndreyIRK вне форума   Ответить с цитированием
Старый 30.04.2019, 21:04   #3
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,602
Репутация: 1031
По умолчанию

Если только произведение 2х полей, то цикла ее надо
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 01.05.2019, 06:04   #4
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Если только произведение 2х полей, то цикла ее надо
Если не затруднит.. подскажите как сделать
AndreyIRK вне форума   Ответить с цитированием
Старый 01.05.2019, 11:30   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,280
Репутация: 5550
По умолчанию

Цитата:
Сообщение от AndreyIRK Посмотреть сообщение
Если не затруднит.. подскажите как сделать
допустим, в таблице три строки (три записи):
1 10
2 12
3 40

Вопрос - что должна вернуть функция test() ?
Она у Вас скалярная, возвращает ОДНО значение. Какое?
это раз.

а второе, вместо

Цитата:
Сообщение от AndreyIRK Посмотреть сообщение
Код:

Set table = CurrentDb.OpenRecordset("SELECT * FROM tblMain")
Do Until table.EOF
a = table.Fields("[Поле1]")
b = table.Fields("[Поле2]")
test = a * b
table.MoveNext
Loop

достаточно
Код:

Set table = CurrentDb.OpenRecordset("SELECT *, [Поле1]*[Поле2] as MultyPulty FROM tblMain")

Serge_Bliznykov на форуме   Ответить с цитированием
Старый 01.05.2019, 12:08   #6
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
допустим, в таблице три строки (три записи):
1 10
2 12
3 40
Вопрос - что должна вернуть функция test() ?
Она у Вас скалярная, возвращает ОДНО значение. Какое?
это раз.
Функция возвращает в поле 3 произведение 1 и 2 поля:
1 10 =1*10
2 12 =2*12
3 40 =3*40
AndreyIRK вне форума   Ответить с цитированием
Старый 01.05.2019, 18:49   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,280
Репутация: 5550
По умолчанию

Цитата:
Сообщение от AndreyIRK Посмотреть сообщение
Функция возвращает в поле 3 произведение 1 и 2 поля:
Это ТРИ РАЗНЫХ вызова функции.
которые вернут три значения произведения.
тогда функция должна на вход принимать два значения поля и должна выглядеть так:
Код:

Public Function multypulty(a as Integer, b as Integer) as Integer
multypulty = a * b
End Function

Serge_Bliznykov на форуме   Ответить с цитированием
Старый 02.05.2019, 19:09   #8
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Это ТРИ РАЗНЫХ вызова функции.
которые вернут три значения произведения.
тогда функция должна на вход принимать два значения поля и должна выглядеть так:
Код:

Public Function multypulty(a as Integer, b as Integer) as Integer
multypulty = a * b
End Function

Спасибо, что направили в нужное русло ! Теперь я на один шаг ближе к большой цели...

Последний раз редактировалось AndreyIRK; 02.05.2019 в 20:05.
AndreyIRK вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access: Необходимо автоматизировать процедуру расчета себестоимости с помощью создания Отчета «Себестоимость» в Access. maribeli Фриланс 1 15.04.2019 11:29
требуется программист для создания бд в Access sidugansk Фриланс 11 30.11.2018 11:47
Основы создания 2d-игр Name1ess Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 02.02.2012 21:17
Как вызвать выполнение модуля Access gluk_fm Microsoft Office Excel 2 19.10.2011 19:30
Основы создания классов revers21 Помощь студентам 2 01.06.2010 21:29


10:16.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru