Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access VBA

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Открыть новую тему     Написать ответ в эту тему

Guest

BANNED
Редактировать | Цитировать | Сообщить модератору
   
 
Обсуждаем вопросы только по Access VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.

 

NB! Дублирующая тема VBA for Access закрыта во избежание путаницы. Оставлена эта, как более ранняя и имеющая больше сообщений.

Смежные темы:
Помощь в создании SQL-запросов: SQL запрос
Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
Программы » Word FAQ | Excel FAQ | Access FAQ
Прикладное программирование » Word VBA | Excel VBA
Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007
----------
Как в Access перместить запись из одной таблицы в другую (допустим по нажатию кнопки на форме)?

Отправлено: 18:31 05-09-2002 | Исправлено: ALeXkRU, 17:14 03-08-2021
SerBUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день. Не могу понять, как решить такую задачу - есть база данных в Access 2013. Заполняются данные строго в режиме таблицы, никаких форм нет. Подскажите, как реализовать отправку оповещения по почте пользователю при изменении одного поля. Т.е., есть таблица, в которой одно из полей Почта - почтовый адрес (берется из выпадающего списка из другой таблицы). Как сделать, чтоб при выборе или изменении в этом поле почтового адреса сразу отправлялось оповещение на выбранный почтовый ящик с содержимым, взятым из другого поля этой записи? И можно ли таким образом выбрать и отправить письмо сразу нескольким отправителям?

Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 11:22 10-05-2014 | Исправлено: SerBUser, 11:26 10-05-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
Без форм никак.
Если сделать форму в табличном виде, то можно в обработчике написать что нужно.
 
Еще есть возможность в триггере базы данных, если sql server, но это будет уже не акцесс, да и в триггере отправлять почту - плохо, т.к. нужно минимизировать время его выполнения.

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 11:47 10-05-2014
vikkiv



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
PrWork1
Триггером можно писать данные в другую таблицу, а из таблицы уже по расписанию новые записи идут на рассылки, т.е. исполнение такого триггера не будет существенно блокировать таблицу. А так да, SQL сервер будет БД а Access чисто интерфейсом.

Всего записей: 747 | Зарегистр. 10-11-2005 | Отправлено: 16:41 10-05-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vikkiv
Точно, хорошая идея, главное, зафиксировать, что и кому нужно отправить, и так даже журнал останется, что и когда изменено (и кому отправлено)

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 18:39 10-05-2014
SerBUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Без форм никак.  
Если сделать форму в табличном виде, то можно в обработчике написать что нужно.

Вроде как начал понимать. Сделал форму в табличном виде, повесил обработчик события "Внесены изменения", в коде написал DoCmd.SendObject acSendNoObject, , , "pupkin@mail.ru", , , "Тест", "Письмо из Access", False. Единственное, что мне непонятно - как в DoCmd.SendObject вместо адреса pupkin@mail.ru взять данные из определенного поля этой записи, а вместо текста "Письмо из Access" в качестве содержимого взять данные другого поля этой записи. И еще - при отправке письма вываливает сообщение, что я хочу отправить письмо из Access. Это сообщение можно убрать?

Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 05:57 12-05-2014
Vitus_Bering



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
И еще - при отправке письма вываливает сообщение, что я хочу отправить письмо из Access. Это сообщение можно убрать?

DoCmd.SetWarnings False

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 07:54 12-05-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
Vitus_Bering
 в начале обработчика  
DoCmd.SetWarnings False
 
а в конце не забыть
DoCmd.SetWarnings true
 
Нужно использовать не ВнесеныИзменения, а ПослеОбновления, в этом событии читать значения полей из записи.

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 08:43 12-05-2014
SerBUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Нужно использовать не ВнесеныИзменения, а ПослеОбновления, в этом событии читать значения полей из записи.

Как именно читать значения полей, не подскажете?

Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 09:32 12-05-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
Так и пишите:
 
адрес= Me.[ИмяКонтролаТабФормы]
 
(имя контоля обычно совпадает с именем поля в таблице, если табличная форма делалась автоматически)

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 10:39 12-05-2014
SerBUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Так и пишите:  
 
адрес= Me.[ИмяКонтролаТабФормы]  

Огромное спасибо. Никогда не имел дела ни с Access, ни с VBA. Последний (надеюсь) вопрос - с текстовым полем у меня все получилось, а вот с почтовым адресом - нет. Адрес-это поле со списком, в котором разрешен множественный выбор, берется из другой таблицы и тип этого поля числовой. И при попытке выполнить
text = Me.Оповещение
addr= Me.Почта
DoCmd.SendObject acSendNoObject, , , addr, , , "Оповещение", text, False
пишет "Введенное выражение для одного из аргументов имеет ошибочный тип данных"
Ругается, я так понимаю, на поле Почта. Как такой тип поля правильно обработать?

Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 06:22 13-05-2014 | Исправлено: SerBUser, 06:23 13-05-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
 
В списке Почта при открытии адрес отображается?
Тогда к нему можно обратиться  Ме.Почта.Column(N)
 где N - номер столбца в списке,
Чтобы найти нужный сделайте точку остановки и в окне отладки  проверяйте  
 
?Ме.Почта.Column(1)

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 07:29 13-05-2014
SerBUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PrWork1
Спасибо огромное за помощь, все получилось. Единственное, DoCmd.SetWarnings False не отменяет почему-то предупреждение об отправке почты.

Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 04:08 14-05-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
Пожалуйста, а как используете SetWarning?

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 07:33 14-05-2014
Khir

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день
Я как в Access, так и в SQL весьма смутно ориентируюсь. Но вот, возникла проблема
Суть такая: есть две таблицы. Из одной таблицы выбираю поле Имя, по условию что возраст > 17. Из другой таблицы нужно для каждого результата первого запроса выбрать место прописки. Причем в силу обстоятельств это все надо сделать в VBA.
Сами запросы я сделал. Но вот на второй VBA ругается, говорит, что надо передавать всего одно значение во вложенный SELECT. Второй запрос выглядит так:
 
SELECT [Прописка] FROM [Таблица1] WHERE [Имя] = (SELECT Имя FROM Таблица WHERE (Возраст > 17) ORDER BY Имя)
 
Что мне сделать, чтобы второй запрос выполнялся из VBA?

Всего записей: 2 | Зарегистр. 06-06-2014 | Отправлено: 15:16 06-06-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Khir
                      SELECT  Таблица1.Имя, Таблица1.Прописка FROM Таблица1
                         INNER JOIN Таблица ON Таблица1.Имя = Таблица.Имя
                      WHERE Таблица.Возраст >17
                      ORDER BY Таблица1.Имя
 
Так сразу одним запросом все можно выбрать

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 15:25 06-06-2014 | Исправлено: PrWork1, 15:36 06-06-2014
Khir

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PrWork1
Спасибо за ответ. Ругаться не ругается, но и выдавать ничего не хочет( Этот Access всегда такой сложнопрограммируемый?

Всего записей: 2 | Зарегистр. 06-06-2014 | Отправлено: 15:44 06-06-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Khir
access не пhичем, это  sql в чистом виде
 
Нужно смотреть, если ли в таблицах одинаковые имена.
Сделайте запрос, откройте режим SQL вставте этот запрос туда, и выполните.  
Если данные будут, разбирацтесь в vba,если нет то сначала с запросом.  

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 15:52 06-06-2014
svs123456789

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
была сделана база данных в Access,
потом с 2мя ее копиями работали в других городах...
 
т.о. сейчас есть 3 варианта файла БД с одинаковой структурой , но с разными данными
 
как бы их слить в одну БД ?
 
(все индексы в таблицах - автоинкриментые)

Всего записей: 2932 | Зарегистр. 10-04-2003 | Отправлено: 10:25 13-11-2014
PrWork1

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сложно, но можно, посмотри Red gate  SQL Data compare

Всего записей: 582 | Зарегистр. 15-12-2005 | Отправлено: 10:44 13-11-2014
Aganel

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
К сведению (в гугле не нашёл, может поможет кому):
Ошибка "ошибка компиляции, в выражении запроса" при добавлении в запрос функции из общего модуля означает, что в этом модуле есть ошибка. Причём не обязательно в той фунции, которая используется в запросе.
 
Проверено в 2007 версии. Может, позднее, сообщение об ошибке и приведено в более понятную форму, но под рукой нет, чтобы проверить.

Всего записей: 21 | Зарегистр. 09-05-2006 | Отправлено: 13:36 30-12-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Access VBA


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru