Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2019, 19:38   #1
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 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, 19:21   #2
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 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, 20:04   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Если только произведение 2х полей, то цикла ее надо
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 01.05.2019, 05:04   #4
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 10
По умолчанию

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

Цитата:
Сообщение от 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, 11:08   #6
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 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, 17:49   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от 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, 18:09   #8
AndreyIRK
Пользователь
 
Регистрация: 11.04.2019
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Это ТРИ РАЗНЫХ вызова функции.
которые вернут три значения произведения.
тогда функция должна на вход принимать два значения поля и должна выглядеть так:
Код:
Public Function multypulty(a as Integer, b as Integer) as Integer
multypulty = a * b
End Function
Спасибо, что направили в нужное русло ! Теперь я на один шаг ближе к большой цели...

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access: Необходимо автоматизировать процедуру расчета себестоимости с помощью создания Отчета «Себестоимость» в Access. maribeli Фриланс 1 15.04.2019 10:29
требуется программист для создания бд в Access sidugansk Фриланс 11 30.11.2018 10: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