|
|
|
| Здравствуйте!
Вопрос может банальный, но всё же...
Есть неких две таблицы.
Интерфейс от них реализован в виде одной формы: в которой данные из одной таблицы являются основными, а данные другой являются вкладкой (подчинённой формой).
В схеме структуры таблиц связь между таблицами указана тоже по ID.
Связи между формами также реализовано по счётку ID.
Далее в подчинной форме я пишу простой VBA скрипт который использует данные из полей форм как подчинённой, так и основный формы.
Но почему-то VBA ругается при попытке обратиться к данным из основной формы.
Пробовал разные способы: Me.[Form_parent]![Field_1] и Me.Form_parent.Field_1
Что не так?
Помогите, пожалуйста, чайнику.
=) | |
|
| |
|
|
|
| Еще раз. Источник основной формы - таблица1 с полями КодТ1(Счетчик), Поле.
Источник подчиненной формы - таблица2 с полями Код(Счетчик), КодТ1(Числовое), Поле1, Поле2...
Связь как между таблицами так и между формами КодТ1(Таблицы1) и КодТ1(таблицы2)
Если счетчик основной таблицы (формы) связан с числовым полем таблицы2 (подчиненной формы) то никаких возмущений не должно быть. Может счетчик с счетчиком связан, или с текстовым полем?? Проверь. | |
|
| |
|
|
|
| Ага, всё именно так как вы написали!
Но проблема есть... | |
|
| |
|
17 Кб. |
|
| Пример => | |
|
| |
|
|
|
| Лукас, вы как всегда...
Я бы на кнопку Тест несколько иной код вставил. Нечто вроде Forms!Основная!Поле.
А тут опять новых словей увидел.
If Not txtBox Is Nothing Then MsgBox "Родитель: " & txtBox.Value
И откуда что берется?
Not txtBox Is Nothing
| |
|
| |
|
|
|
| Forms!Основная!Поле.
А если Основная открыта несколькими нестандартными экземплярами, или вовсе не открыта,
получилась бы ошибочка.
If Not txtBox Is Nothing - это тоже проверка, было-ли присвоено значение (ссылка на объект-контрол TextBox) свойству.
В принципе, можно было вместо процедур свойств описать просто Public переменную.
Not - оператор
txtBox - объектная переменная типа TextBox
Is Nothing - блин , сам не знаю как правильно назвать.( в примерном переводе "ничего?").
Блин, почему народу так нравиться бегать по коллекциям.
Ссылки через свойства и прямее и быстрее.
И, желательно (я бы сказал обязательно) кешировать ссылки на объекты.
Обращение через кешированную ссылку примерно в 4.7 раза быстрее, чем через коллекцию.
(на примере получения хендлера окна формы-объекта контрола подчиненная форма. | |
|
| |
|
|
|
|
|
Обращение через кешированную ссылку примерно в 4.7 раза быстрее, чем через коллекцию.
(на примере получения хендлера окна формы-объекта контрола подчиненная форма
|
можно вот тут по подробней? че такое кешированная ссылка (утро всетаки)
примерно в 4.7 раза быстрее
|
- о вождь! я хочу себе новое имя!
- а как тебя зовут!
- "Быстрый Олень"!
- а как ты хочешь, чтоб тебя звали?
- Фьюиить! | |
|
| |
|
|
|
| Допустим, нам в главной форме периодически хочется что-то спрашивать у формы - объекта контрола
подчиненная форма.
Например хендлер окна.
1. Мы можем каждый раз спрашивать так: resp = Me.frm3.Form.hwnd
2. Мы можем кешировать ссылку, то есть объявить объектную переменную: Private frm As Form,
при открытии формы установить ссылку: Set frm = Me.frm3.Form
И в дальнейшем считывать свойства через нее: resp = frm.hwnd
Так вот, вариант 2 будет получать значение свойства в 4.7 раза быстрее, чем 1 вариант. | |
|
| |
|
|
|
| С переменной ясно. Ничего сложного, однако в каких случаях такое применять? Тут так просто не заглотишь.
Например хендлер окна - это что за зверь? Открытие, активность, чего еще? | |
|
| |
|
|
|
| Например хендлер окна - это что за зверь?
Можно найти в гугле и почитать.
Я его использую как идентификатор конкретного экземпляра формы,
если их создано несколько нестандартными экземплярами.
+используюю в именовании контекстных меню форм, создаваемых при их открытии.
Подробнее:
Если на основании одного описания формы создать несколько нестандартных экземпляров форм,
то в коллекции Forms они все будут под одним именем. Обращаться тогда к ним по имени будет невозможно.
Но при этом, хендлеры окон у них будет уникальные, и идентифицировать конкретный экземпляр можно по ним. | |
|
| |
|
|
|
| ОГРОМНОЕ СПАСИБО!!!!
Я чайник!!!!
Вот именно так и надо было обращаться - Forms!Имя_формы!Поле | |
|
| |
|
|
|
|
Вот именно так и надо было обращаться - Forms!Имя_формы!Поле
|
Вот именно так и не надо обращаться! (если говорить о коде VBA, а не о запросе)
Помимо того, что это медленно, это еще и чревато ошибками. | |
|
| |
|
|
|
| Товарищииииии!!!!!! Ответьте на вроде бы простой вопрос, но я уже с ног сбился ища по форумам и книгам по программированию в accesse на него ответ. С помощью каких методов можно обратиться к таблице, взять из определенной записи значение определенного поля и записать его в нужное поле нужной записи другой таблицы? Вроде бы все просто должно быть, но я нигде не могу найти примеров таких модулей, где бы можно было посмотреть синтаксис как это сделать. Или я чего-то не понимаю в этой жизни?
Если вас не затруднит ответьте пожалуйста подробно, для чайника как такой модуль написать. | |
|
| |
|
|
|
| конкретизируйте
что у вас есть и что хотите получить
если можно то сделайте пример в аксе 2003
вариантов ответов на ваш вопрос столько что в пору учебник писать | |
|
| |
|
|
|
| как вариант:
при этом нужно чтобы форма Parent была в списке объектов Visual Basic. Если ее там нет - создай обработку любого события для этой формы, например, OnLoad. В обработку события можешь ничего не писать. | |
|
| |
|
43 Кб. |
|
| Есть 2 таблицы: услуги и договора. Таблица Услуги содержит перечень оказываемых банком услуг. В таблице Договора всего 3 поля: ключевое Код договора, Код услуги и Процент за услугу. В поле Код услуги мы выбираем из списка подстановки определенный вид услуги, которую будем оказывать клиенту. При нажатии на кнопку Добавить запись в форме, созданной на основе таблицы Договора, необходимо чтобы программа брала соответствующее выбранному коду услуги значение процента по ней из таблицы Услуги, и записывала это значение в поле Процент за услугу формы Договора.
Буду очень благодарен если приведете синтаксис кода и расскажете что за чем и почему. | |
|
| |