Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37

VBA и Microsoft Access... Не могу справиться с "событие не в списке"

24.04.2012, 15:34. Показов 3227. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста! Я только новичок и у меня просто уже не хватает фантазии, чтобы осуществить желаемое. На форме в базе данных можно выбрать "что вы приобрели" из списка. Нужно, если вы приобрели что-то, чего нет в списке, и записали это на форме, чтобы оно само добавлялось в таблицу Sobstvennost. Но самое сложное, что нужно, это чтобы при выборе имени клиента, на форме сразу заполнялись поля "адрес" и "возраст", а если пришёл другой клиент с тем же именем, то если у него другой адрес и/или возраст, то все три поля: имя, адрес и возраст, добавлялись бы в таблицу klienty. Для меня это вообще неразрешимая задача
Вложения
Тип файла: rar 1.rar (5.86 Мб, 26 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2012, 15:34
Ответы с готовыми решениями:

проблемы с Access: [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot open the file '(unknown)'.
потребовалось на сервере с Access поработать (раньше все только с SQL Server было). Сам Access на сервере не стоит. При попытке подключения...

Как избавться от основного окна Microsoft Access при помощи VBA?
Подскажите как избавться от основного окна Microsoft Access при помощи VBA. Хотелось бы чтобы приложение внешне выглядело какбы полностью...

При создании таблицы Access средствами VBA база блокируется (как полноценно создать таблицу access через vba)
Добрый день очень прошу помочь в решении задачи! Аналогичные вопросы поднимались на форумах и есть примеры кодов, но в этих примерах...

20
 Аватар для Ameli
2096 / 1172 / 39
Регистрация: 05.11.2009
Сообщений: 1,605
25.04.2012, 07:15
Я смотрю, эту тему вы смотрели, т.к. спасибка стоит. Что же не понятно?
Кстати, повторяю, вторым способом я пользоваться не рекомендую, т.к., во-первых, он нарушает правила нормализации (поле Город содержит текстовое значение из таблицы Города), во-вторых, происходит мгновенное добавление в список, что может привести к ошибкам.
Так что лучше первый способ: кнопка Добавить на форме, при нажатии открывается форма-справочник в режиме добавления, после закрытия добавленное значение отображается в первой форме
0
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
26.04.2012, 00:15  [ТС]
Ameli, Да, я пыталась справиться с событием не списке хотя бы для Sobstvennost, но почему-то после обновления поля никакой реакции нет. Может быть, я как-то не так код копирую или не те имена таблиц и полей записываю... Нет уже сил методом тыка подбирать. Насчёт кнопки "добавить" на форме и формы-справочника - мне категорически запретили такой вариант. Также насчёт нормализации - нужно, чтобы отображалось на форме всё именно в текстовом варианте, а как это сделать в нормализованном виде, я не знаю. Просто боюсь запутаться. В моей реальной базе данных на нескольких формах около двухсот полей, но структура её такая, какую я выложила тут в примере. Совсем не хватает знаний и опыта, чтобы хотя бы с этим примером "справиться".
0
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
30.04.2012, 22:28  [ТС]
Это настолько сложно, что мне можно даже не пытаться? Помогите, пожалуйста, если хоть кто-нибудь разбирается в этом злосчастном коде!
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
02.05.2012, 01:59
tana-_-, выложите БД, где вы пытались, напишите что конкретно не получается, в какой форме, что должно быть, предварительно сделайте сжатие и заархивируйте. 5 мегабайт я качать не буду.
0
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
02.05.2012, 02:39  [ТС]
alvk, я сейчас пока не за тем компом, за которым работаю. Но 100% могу сказать, что эта выложенная база прошла все необходимые "сжать и восстановить". Не знаю, почему, но моя основная база данных с такой структурой весит 517 Мб, так что это самый облегчённый вариант. Постараюсь её завтра ещё урезать и выложу. Спасибо, что откликнулись!
0
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
02.05.2012, 22:55  [ТС]
Вот, спешу обновить всё. Большой размер был из-за внедрённого изображения.
Сейчас постаралась описать всё максимально подробно.

В таблице klienty имя, адрес и возраст клиента. В таблице Sobstvennost виды собственности. На форме Form1 имя/адрес/возраст клиента, вид собственности клиента, а также номер и дата "документа".
Цель - создать форму, в которой каждое поле будет "автозаполняемым".

Не связанные ни с чем другим на форме, поля типа "собственность", при возникновении "события не в списке" должны записывать новую строку в таблицу Sobstvennost, можно с подтверждением.(у меня почему-то не работает, хотя, вроде по примеру делала).

Связанные поля типа имя/адрес/возраст, относящиеся к одному клиенту, нужно, чтобы заполнялись сами, при выборе имени клиента. Например, мы выбираем из списка Пётр, а город Москва и возраст 30 заполняются сами.
Если же, допустим, появляется, какой-нибудь Пётр из Подольска и ему 31 год, то в таблицу klienty должна добавляться новая запись Пётр, Подольск, 31. И в следующей записи на форме, при заполнении поля Имя, если это снова Пётр, чтобы можно было выбрать уже из этих двух вариантов - Пётр/Москва/30 или Пётр/Подольск/31. (как осуществить эту часть задуманного, я даже в мечтах пока не знаю, к сожалению.)
Вложения
Тип файла: rar 1.rar (14.9 Кб, 11 просмотров)
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
04.05.2012, 02:38
0.Никогда не используйте подстановки в таблицах, им там не место!!!
1.Прежде чем создавать формы, создайте правильно таблицы, в 99% случаев в каждой должно быть поле код тип счётчик, у вас не так!
2.Почитайте про нормализацию и основные принципы построения БД, особенно уделите внимание целесообразности дублирования данных.
Путеводитель по разделу
3.Определитесь с именами, у вас половина на английском, половина на русском, часть по какой-то схеме и т.д. ... Это на усмотрение конечно, но лучше иметь единообразие.
4.Определитесь с фоматом даты. Вам же не надо знать до минуты момент приобретения?
5.См. приложенный пример.
Вложения
Тип файла: rar 1.rar (17.1 Кб, 13 просмотров)
1
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
04.05.2012, 04:04  [ТС]
alvk, Спасибо за разъяснение. В вашей базе всё действительно так, как и должно быть по логике))) Но, к сожалению, у меня должна быть одна форма, к дизайну которой привязаны все поля. И каждое поле должно заполняться именно выбором из выпадающего списка. А если чего-то нет в списке, то чтобы оно записывалось в источник данных для конкретного поля. И никаких дополнительных таблиц на форме или подчинённых форм. Мне всё больше кажется, что это невозможно((
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
04.05.2012, 06:26
Цитата Сообщение от tana-_- Посмотреть сообщение
В вашей базе всё действительно так, как и должно быть по логике))) Но, к сожалению, у меня должна быть одна форма,
То есть спасибо не будет и я это всё зря писал и делал? Ну что-ж, учтём на будущее.
0
43 / 43 / 0
Регистрация: 04.05.2012
Сообщений: 205
04.05.2012, 08:41
Что бы заработал код в событии Отсутствие в списке, нужно установить на закладке данные Ограничиться списком=ДА
1
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
04.05.2012, 13:30  [ТС]
alvk, Ни в коем случае не зря, спасибо большое за то, что вы представили структуру базы такой, какая она должна быть. Я сейчас снова теорию читаю. Просто извините за столь скупую благодарность, я слишком сильно расстроилась из-за того, что по моему конкретному вопросу никто ничего не мог сказать(

Добавлено через 5 минут
papirys, Оно заработало))))))))))))))))))) Спасибо большое

Осталось только вторую часть работы...
0
43 / 43 / 0
Регистрация: 04.05.2012
Сообщений: 205
04.05.2012, 13:58
На событие изменение имени клиента, вешается код который устанавливает фильтр на источник строк kl_adres и kl_vozrast.
0
43 / 43 / 0
Регистрация: 04.05.2012
Сообщений: 205
04.05.2012, 15:46
Можно например такую схему данных.
Миниатюры
VBA и Microsoft Access... Не могу справиться с "событие не в списке"  
0
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
04.05.2012, 21:32  [ТС]
papirys, схема данных вообще ничем не перегружена, даже завидно. Особенно, идея с выбором города из справочника.)) Но у меня загвоздка именно в том, чтобы все значения были на одной форме. То есть, по вашей схеме на форме отображается только код клиента. Ну или, насколько я понимаю, подтаблица Klienty.

Я тут пыталась составить событие не в списке для имени клиента.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub ПолеСоСписком7_NotInList(NewData As String, Response As Integer)
If MsgBox("Вы добавили нового клиента.", vbYesNo) <> vbYes Then
Exit Sub
Else
Dim sql As String
sql = "insert into klienty (kl_name) values ( '" & Me!kl_name.Text & "')"
CurrentDb.Execute sql
Response = acDataErrAdded
End If
End Sub
Но, разумеется, это ошибка, потому что нужно, чтобы не только строка kl_name добавлялась, а kl_kod (счётчик) увеличивался на единицу, а также происходило что-то вроде
Visual Basic
1
2
3
4
insert into klienty (kl_kod) values kl_kod + 1
insert into klienty (kl_name) values ( '" & Me!kl_name.Text & "')
insert into klienty (kl_adres) values ( '" & Me!kl_adres.Text & "')
insert into klienty (kl_vozrast) values ( '" & Me!kl_vozrast.Text & "')
Вы не знаете, как это сделать?

И ещё я мучила свою базу, там на Форме при выборе имени Клиента теперь отображается вся информация о нём. Только я не знаю, как сделать, чтобы при выборе из списка, она заполнялась бы автоматически в поля Адрес и Возраст.
Вложения
Тип файла: rar 1.rar (22.3 Кб, 7 просмотров)
0
43 / 43 / 0
Регистрация: 04.05.2012
Сообщений: 205
04.05.2012, 22:47
Посмотрите, как вариант.
Вложения
Тип файла: rar 1.rar (38.3 Кб, 16 просмотров)
1
43 / 43 / 0
Регистрация: 04.05.2012
Сообщений: 205
04.05.2012, 22:52
Поле счетчика не надо трогать, оно само увеличиться при добавлении записи.
0
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
04.05.2012, 23:22  [ТС]
papirys, спасибо за вариант))) простите дурака, я долго с ней разбираться буду)) там всё так по-разному))) В в форме frmStart источник данных таблица Forma, а у меня на форме Form1 источники данных разные))) Как бы это объединить... Чтобы при добавлении новой записи всё сохранялось не только в таблицу Forma, но и в её источники данных, то есть, таблицы klienty и Sobstvennost? Наверное, совсем страшно звучит))))) Но это нужно для того, например, чтобы для нового человека с другим именем можно было бы выбирать город из уже когда-либо набранных городов.
0
43 / 43 / 0
Регистрация: 04.05.2012
Сообщений: 205
05.05.2012, 09:32
Для нового человека нужна отдельная форма для регистрации.

В форме Form1(SELECT Forma.kod, Forma.kl_name, Forma.kl_adres, Forma.kl_vozrast, Forma.[s_name], Forma.data_pokupki FROM Forma; ) источник тот же самый что и в форме frmStart () только по разному организован доступ к таблице Forma.
1
2 / 2 / 0
Регистрация: 14.12.2011
Сообщений: 37
05.05.2012, 10:11  [ТС]
papirys, спасибо ещё раз большое! Я вернусь после праздников, за это время что-нибудь у себя переделаю. А без отдельной формы для регистрации точно нельзя? Если нет, то буду мучить свою базу)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2012, 10:11
Помогаю со студенческими работами здесь

VBA access не могу скопировать лист Exel
Задача из Access 2010 открыть файл Exel 2010 и скопировать первый лист определенное количество раз и сохранить в новом файле/ Set...

Ошибка Microsoft OLE DB: [Microsoft][ODBC Microsoft Access Driver] Disk or network error. /test.asp, line 3 На строке: conn.Open 'DSN=d'
Помогите пожалуйста! Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80004005) Disk or network error. /test.asp, line 3...

Нужен совет с Microsoft Access, вообще не могу понять, как это делать
Составьте в Microsoft Access следующую базу данных «Спортсмены». Вывести на экран поля «фамилия» и «страна» для спортсменов из Франции....

Class Diagram VBA Access / Диаграмма классов на VBA ACCESS
Здравствуйте, как создается диаграмма классов VBA ACCESS? У меня есть проект созданный на VBA ACCESS 2010, но у меня там только 1 модуль и...

Проблемы в ЧАТе: Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][ODBC Microsoft Access Driver] Could not use '(unknown)' file
Попробовал поставить ЧАТ с переделанной бд из SQL в Access. При совместном доступе появл ошибка: Microsoft OLE DB Provider for ODBC...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru