Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Access VBA

Автор: PrWork1
Дата сообщения: 10.05.2014 17:39
vikkiv
Точно, хорошая идея, главное, зафиксировать, что и кому нужно отправить, и так даже журнал останется, что и когда изменено (и кому отправлено)
Автор: SerBUser
Дата сообщения: 12.05.2014 04:57

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

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

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

DoCmd.SetWarnings False
Автор: PrWork1
Дата сообщения: 12.05.2014 07:43
SerBUser
Vitus_Bering
в начале обработчика
DoCmd.SetWarnings False

а в конце не забыть
DoCmd.SetWarnings true

Нужно использовать не ВнесеныИзменения, а ПослеОбновления, в этом событии читать значения полей из записи.
Автор: SerBUser
Дата сообщения: 12.05.2014 08:32

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

Как именно читать значения полей, не подскажете?
Автор: PrWork1
Дата сообщения: 12.05.2014 09:39
SerBUser
Так и пишите:

адрес= Me.[ИмяКонтролаТабФормы]

(имя контоля обычно совпадает с именем поля в таблице, если табличная форма делалась автоматически)
Автор: SerBUser
Дата сообщения: 13.05.2014 05:22

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

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

В списке Почта при открытии адрес отображается?
Тогда к нему можно обратиться Ме.Почта.Column(N)
где N - номер столбца в списке,
Чтобы найти нужный сделайте точку остановки и в окне отладки проверяйте

?Ме.Почта.Column(1)
Автор: SerBUser
Дата сообщения: 14.05.2014 03:08
PrWork1
Спасибо огромное за помощь, все получилось. Единственное, DoCmd.SetWarnings False не отменяет почему-то предупреждение об отправке почты.
Автор: PrWork1
Дата сообщения: 14.05.2014 06:33
SerBUser
Пожалуйста, а как используете SetWarning?
Автор: Khir
Дата сообщения: 06.06.2014 14:16
Добрый день
Я как в Access, так и в SQL весьма смутно ориентируюсь. Но вот, возникла проблема
Суть такая: есть две таблицы. Из одной таблицы выбираю поле Имя, по условию что возраст > 17. Из другой таблицы нужно для каждого результата первого запроса выбрать место прописки. Причем в силу обстоятельств это все надо сделать в VBA.
Сами запросы я сделал. Но вот на второй VBA ругается, говорит, что надо передавать всего одно значение во вложенный SELECT. Второй запрос выглядит так:

SELECT [Прописка] FROM [Таблица1] WHERE [Имя] = (SELECT Имя FROM Таблица WHERE (Возраст > 17) ORDER BY Имя)

Что мне сделать, чтобы второй запрос выполнялся из VBA?
Автор: PrWork1
Дата сообщения: 06.06.2014 14:25
Khir
SELECT Таблица1.Имя, Таблица1.Прописка FROM Таблица1
INNER JOIN Таблица ON Таблица1.Имя = Таблица.Имя
WHERE Таблица.Возраст >17
ORDER BY Таблица1.Имя

Так сразу одним запросом все можно выбрать
Автор: Khir
Дата сообщения: 06.06.2014 14:44
PrWork1
Спасибо за ответ. Ругаться не ругается, но и выдавать ничего не хочет( Этот Access всегда такой сложнопрограммируемый?
Автор: PrWork1
Дата сообщения: 06.06.2014 14:52
Khir
access не пhичем, это sql в чистом виде

Нужно смотреть, если ли в таблицах одинаковые имена.
Сделайте запрос, откройте режим SQL вставте этот запрос туда, и выполните.
Если данные будут, разбирацтесь в vba,если нет то сначала с запросом.
Автор: svs123456789
Дата сообщения: 13.11.2014 09:25
была сделана база данных в Access,
потом с 2мя ее копиями работали в других городах...

т.о. сейчас есть 3 варианта файла БД с одинаковой структурой , но с разными данными

как бы их слить в одну БД ?

(все индексы в таблицах - автоинкриментые)
Автор: PrWork1
Дата сообщения: 13.11.2014 09:44
Сложно, но можно, посмотри Red gate SQL Data compare
Автор: Aganel
Дата сообщения: 30.12.2014 12:36
К сведению (в гугле не нашёл, может поможет кому):
Ошибка "ошибка компиляции, в выражении запроса" при добавлении в запрос функции из общего модуля означает, что в этом модуле есть ошибка. Причём не обязательно в той фунции, которая используется в запросе.

Проверено в 2007 версии. Может, позднее, сообщение об ошибке и приведено в более понятную форму, но под рукой нет, чтобы проверить.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: BDE - траблы, помогите пожалуйста срочно...


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.