Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: обращение в сриптах VBA к полю в основной форме из подчинённой формы (Access 2003)
 
 автор: Shved   (27.09.2010 в 20:47)   личное сообщение
 
 

Здравствуйте!

Вопрос может банальный, но всё же...

Есть неких две таблицы.
Интерфейс от них реализован в виде одной формы: в которой данные из одной таблицы являются основными, а данные другой являются вкладкой (подчинённой формой).
В схеме структуры таблиц связь между таблицами указана тоже по ID.
Связи между формами также реализовано по счётку ID.

Далее в подчинной форме я пишу простой VBA скрипт который использует данные из полей форм как подчинённой, так и основный формы.
Но почему-то VBA ругается при попытке обратиться к данным из основной формы.
Пробовал разные способы: Me.[Form_parent]![Field_1] и Me.Form_parent.Field_1

Что не так?

Помогите, пожалуйста, чайнику.
=)

  Ответить  
 
 автор: Гоблин   (27.09.2010 в 21:41)   личное сообщение
 
 

Еще раз. Источник основной формы - таблица1 с полями КодТ1(Счетчик), Поле.
Источник подчиненной формы - таблица2 с полями Код(Счетчик), КодТ1(Числовое), Поле1, Поле2...
Связь как между таблицами так и между формами КодТ1(Таблицы1) и КодТ1(таблицы2)
Если счетчик основной таблицы (формы) связан с числовым полем таблицы2 (подчиненной формы) то никаких возмущений не должно быть. Может счетчик с счетчиком связан, или с текстовым полем?? Проверь.

  Ответить  
 
 автор: Shved   (28.09.2010 в 00:51)   личное сообщение
 
 

Ага, всё именно так как вы написали!
Но проблема есть...

  Ответить  
 
 автор: Lukas   (27.09.2010 в 21:51)   личное сообщение
17 Кб.
 
 

Пример =>

  Ответить  
 
 автор: Гоблин   (27.09.2010 в 23:38)   личное сообщение
 
 

Лукас, вы как всегда...
Я бы на кнопку Тест несколько иной код вставил. Нечто вроде Forms!Основная!Поле.
А тут опять новых словей увидел.
If Not txtBox Is Nothing Then MsgBox "Родитель: " & txtBox.Value
И откуда что берется?

Not txtBox Is Nothing

  Ответить  
 
 автор: Lukas   (28.09.2010 в 00:39)   личное сообщение
 
 

Forms!Основная!Поле.
А если Основная открыта несколькими нестандартными экземплярами, или вовсе не открыта,
получилась бы ошибочка.
If Not txtBox Is Nothing - это тоже проверка, было-ли присвоено значение (ссылка на объект-контрол TextBox) свойству.
В принципе, можно было вместо процедур свойств описать просто Public переменную.
Not - оператор
txtBox - объектная переменная типа TextBox
Is Nothing - блин , сам не знаю как правильно назвать.( в примерном переводе "ничего?").

Forms!Основная!Поле.

Блин, почему народу так нравиться бегать по коллекциям.
Ссылки через свойства и прямее и быстрее.
И, желательно (я бы сказал обязательно) кешировать ссылки на объекты.
Обращение через кешированную ссылку примерно в 4.7 раза быстрее, чем через коллекцию.
(на примере получения хендлера окна формы-объекта контрола подчиненная форма.

  Ответить  
 
 автор: Гоблин   (28.09.2010 в 07:36)   личное сообщение
 
 

Ни хрена себе вгрузил со сранья.
Теперь на целый день загруза хватит. Столько нового. Это все надо обмозговать. Есть проблема именно с тем, как открыть форму из разных форм, если в источнике формы есть ссылка только на одну. Пока, думаю, только через изменение Rowsuose....

Спасибо. Попробую притянуть Is Nothhing
А Forms!Основная!Поле - просто доступнее для понимания логики таким лохам в программировании как я, нежели через вышесказанное, что даже "... блин, сам не знаю как правильно назвать." из ваших уст.
Пошел разбираться

  Ответить  
 
 автор: kot_k_k   (28.09.2010 в 09:10)   личное сообщение
 
 


Обращение через кешированную ссылку примерно в 4.7 раза быстрее, чем через коллекцию.
(на примере получения хендлера окна формы-объекта контрола подчиненная форма



можно вот тут по подробней? че такое кешированная ссылка (утро всетаки)



примерно в 4.7 раза быстрее



- о вождь! я хочу себе новое имя!
- а как тебя зовут!
- "Быстрый Олень"!
- а как ты хочешь, чтоб тебя звали?
- Фьюиить!

  Ответить  
 
 автор: Lukas   (28.09.2010 в 18:14)   личное сообщение
 
 

Допустим, нам в главной форме периодически хочется что-то спрашивать у формы - объекта контрола
подчиненная форма.
Например хендлер окна.
1. Мы можем каждый раз спрашивать так: resp = Me.frm3.Form.hwnd
2. Мы можем кешировать ссылку, то есть объявить объектную переменную: Private frm As Form,
при открытии формы установить ссылку: Set frm = Me.frm3.Form
И в дальнейшем считывать свойства через нее: resp = frm.hwnd
Так вот, вариант 2 будет получать значение свойства в 4.7 раза быстрее, чем 1 вариант.

  Ответить  
 
 автор: Гоблин   (28.09.2010 в 18:44)   личное сообщение
 
 

С переменной ясно. Ничего сложного, однако в каких случаях такое применять? Тут так просто не заглотишь.
Например хендлер окна - это что за зверь? Открытие, активность, чего еще?

  Ответить  
 
 автор: Lukas   (28.09.2010 в 19:14)   личное сообщение
 
 

Например хендлер окна - это что за зверь?
Можно найти в гугле и почитать.
Я его использую как идентификатор конкретного экземпляра формы,
если их создано несколько нестандартными экземплярами.
+используюю в именовании контекстных меню форм, создаваемых при их открытии.

Подробнее:
Если на основании одного описания формы создать несколько нестандартных экземпляров форм,
то в коллекции Forms они все будут под одним именем. Обращаться тогда к ним по имени будет невозможно.
Но при этом, хендлеры окон у них будет уникальные, и идентифицировать конкретный экземпляр можно по ним.

  Ответить  
 
 автор: Shved   (28.09.2010 в 12:25)   личное сообщение
 
 

ОГРОМНОЕ СПАСИБО!!!!
Я чайник!!!!
Вот именно так и надо было обращаться - Forms!Имя_формы!Поле

  Ответить  
 
 автор: Lukas   (28.09.2010 в 18:17)   личное сообщение
 
 


Вот именно так и надо было обращаться - Forms!Имя_формы!Поле


Вот именно так и не надо обращаться! (если говорить о коде VBA, а не о запросе)
Помимо того, что это медленно, это еще и чревато ошибками.

  Ответить  
 
 автор: Orfei.love   (01.03.2011 в 20:51)   личное сообщение
 
 

Товарищииииии!!!!!! Ответьте на вроде бы простой вопрос, но я уже с ног сбился ища по форумам и книгам по программированию в accesse на него ответ. С помощью каких методов можно обратиться к таблице, взять из определенной записи значение определенного поля и записать его в нужное поле нужной записи другой таблицы? Вроде бы все просто должно быть, но я нигде не могу найти примеров таких модулей, где бы можно было посмотреть синтаксис как это сделать. Или я чего-то не понимаю в этой жизни?
Если вас не затруднит ответьте пожалуйста подробно, для чайника как такой модуль написать.

  Ответить  
 
 автор: snipe   (02.03.2011 в 02:58)   личное сообщение
 
 

конкретизируйте
что у вас есть и что хотите получить
если можно то сделайте пример в аксе 2003

вариантов ответов на ваш вопрос столько что в пору учебник писать

  Ответить  
 
 автор: Stanislav   (04.03.2011 в 16:01)   личное сообщение
 
 

как вариант:

Form_Parent.Field_1

при этом нужно чтобы форма Parent была в списке объектов Visual Basic. Если ее там нет - создай обработку любого события для этой формы, например, OnLoad. В обработку события можешь ничего не писать.

  Ответить  
 
 автор: Orfei.love   (13.03.2011 в 15:42)   личное сообщение
43 Кб.
 
 

Есть 2 таблицы: услуги и договора. Таблица Услуги содержит перечень оказываемых банком услуг. В таблице Договора всего 3 поля: ключевое Код договора, Код услуги и Процент за услугу. В поле Код услуги мы выбираем из списка подстановки определенный вид услуги, которую будем оказывать клиенту. При нажатии на кнопку Добавить запись в форме, созданной на основе таблицы Договора, необходимо чтобы программа брала соответствующее выбранному коду услуги значение процента по ней из таблицы Услуги, и записывала это значение в поле Процент за услугу формы Договора.
Буду очень благодарен если приведете синтаксис кода и расскажете что за чем и почему.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList