powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / RecordSource подчиненной формы
34 сообщений из 34, показаны все 2 страниц
RecordSource подчиненной формы
    #39655200
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех.
Пытаюсь сделать общий вид поисковой формы с полями для выборки данных для обеих форм – Формы2 и ее подчиненной Формы3. Т.е. суть такая – на Форме1 находится Форма2, в которой по «+» раскрываются записи подчиненной Формы3.

Принцип построения такой – есть общая свободная Форма1 с полями и комбобоксами, по которым делается общая выборка данных для обеих форм (обе в режиме таблицы): Форма2 – главная и Форма3 – подчиненная. Форма2 так же расположена на Форме1. Форма2 и Форма3 между собой связаны по полю кода – связь 1 ко многим.

Общий запрос состоит из 2-х таблиц (связь 1 ко многим), использую его для подчиненной Формы3, а в главной Форме2 вывожу запрос с полями только первой части общего запроса. Т.е. получается, что запрос для Формы2 я строю из запроса к Форме3.

В коде VBA, по выбранным полям на Форме1, я собираю 2 массива и получаю 2 переменные для выборки данных в запросах к Форме2 и Форме3. Дальше начинается сама проблема, из кода Формы1 присвоить полученный RecordSource для Формы2 получается, а для Формы3 нет.
Вот часть кода, где пытаюсь присвоить формам RecordSource с полученной выборкой данных к Форме2 и Форме3:

Код: vbnet
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.
69.
70.
71.
72.
73.
74.
75.
76.
77.
Private Sub ПоискПоПолям()
  Dim strSQL As String
  Dim rst As Recordset

On Error GoTo ErrNumber
  strWHERE1 = "": strWHERE2 = ""
  ...
  ...
  strSQL = "SELECT * FROM звПоиск"
  If Not strWHERE1 = "" Then
    If Not strWHERE2 = "" Then
      strWHERE = strWHERE1 & " AND " & strWHERE2
    Else
      strWHERE = strWHERE1
    End If
    strSQL = strSQL & " WHERE " & strWHERE
    Set rst = CurrentDb.OpenRecordset(strSQL)
    If rst.RecordCount <> 0 Then
      Me.фпПоискЗаявок.Form.RecordSource = "SELECT DISTINCT * FROM звПоискЗаявок WHERE " & strWHERE1
'???как обновить RecordSource "фпПоискМИЦОВИВ"
'      Form_фпПоискМИЦОВИВ.RecordSource = strSQL '- не работает,т.е.обновление не происходит
'      Me!фпПоискЗаявок.Controls!фпПоискМИЦОВИВ.Form.RecordSource = strSQL 'ошибка 2455 - Введенное выражение содержит недопустимую ссылку на свойство "Form/Report"
'      Me.фпПоискЗаявок.Parent!фпПоискМИЦОВИВ.Form.RecordSource = strSQL 'ошибка 2455
    Else
      Me.фпПоискЗаявок.Form.RecordSource = "SELECT DISTINCT * FROM звПоискЗаявок WHERE [КодЗаявки] Is Null"
    End If
  ElseIf Not strWHERE2 = "" Then
    strWHERE = strWHERE2
    strSQL = strSQL & " WHERE " & strWHERE
    Set rst = CurrentDb.OpenRecordset(strSQL)
    If rst.RecordCount <> 0 Then
      rst.MoveFirst
      strWHERE1 = "[КодЗаявки] = " & rst.Fields("КодЗаявки").Value
      Do Until rst.EOF
        strWHERE1 = strWHERE1 & " OR " & "[КодЗаявки] = " & rst.Fields("КодЗаявки").Value
        rst.MoveNext
      Loop
      Me.фпПоискЗаявок.Form.RecordSource = "SELECT DISTINCT * FROM звПоискЗаявок WHERE " & strWHERE1
'???как обновить RecordSource "фпПоискМИЦОВИВ"
'      Form_фпПоискМИЦОВИВ.RecordSource = strSQL '- не работает,т.е.обновление не происходит
'      Me!фпПоискЗаявок.Controls!фпПоискМИЦОВИВ.Form.RecordSource = strSQL 'ошибка 2455 - Введенное выражение содержит недопустимую ссылку на свойство "Form/Report"
'      Me.фпПоискЗаявок.Parent!фпПоискМИЦОВИВ.Form.RecordSource = strSQL 'ошибка 2455
    Else
      Me.фпПоискЗаявок.Form.RecordSource = "SELECT DISTINCT * FROM звПоискЗаявок WHERE [КодЗаявки] Is Null"
    End If
  End If
  rst.Close
'  Call Form_фпПоискЗаявок.ПоискПоПолям(strSQL)
'  Call Form_фпПоискМИЦОВИВ.ПоискПоПолям(strSQL)
'  Me!фпПоискЗаявок.Controls!фпПоискМИЦОВИВ.Requery 'ошибка 2455 - Введенное выражение содержит недопустимую ссылку на свойство "Form/Report"
'  Me.фпПоискЗаявок.Parent!фпПоискМИЦОВИВ.Requery 'ошибка 2455
'  Form_фпПоискМИЦОВИВ.Requery '- не работает,т.е.обновление не происходит
  Me.фпПоискЗаявок.Requery

ExitHeare:
  Set rst = Nothing
  Erase arrWHERE2
  Erase arrWHERE1
Exit Sub

ErrNumber:
  Select Case Err.Number
    Case 2455 'Введенное выражение содержит недопустимую ссылку на свойство "Form/Report"
      MsgBox "Процедура: ПоискПоПолям. Форма: " & Me.Name & vbCrLf & _
        Err.Description, , "№ " & Err.Number
      
'      Me.фпПоискЗаявок.Parent!фпПоискМИЦОВИВ.Form.RecordSource = strSQL
'      Me.фпПоискЗаявок.Parent!фпПоискМИЦОВИВ.Requery
'      Me.фпПоискЗаявок.Requery
      
      Resume ExitHeare
    Case Else
      MsgBox "Процедура: ПоискПоПолям. Форма: " & Me.Name & vbCrLf & _
        Err.Description, , "№ " & Err.Number
      Resume ExitHeare
  End Select
End Sub



А и еще такой момент, при открытии общей Формы1 по умолчанию присваиваю Форме2 RecordSource со значением «Is Null», чтобы изначально записи были скрыты.

Заранее признательна за помощь.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39655234
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

Код: vbnet
1.
 Me.фпПоискЗаявок.Parent.Form.фпПоискМИЦОВИВ.Form.RecordSource
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39655832
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
Parent.фпПоискМИЦОВИВ.Form.RecordSource
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39656959
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверин
Код: vbnet
1.
 Me.фпПоискЗаявок.Parent.Form.фпПоискМИЦОВИВ.Form.RecordSource


__Michelle
Код: vbnet
1.
Parent.фпПоискМИЦОВИВ.Form.RecordSource


Выдает ошибку: 2465 - Application-defined or object-defined error
К сожалению выложить пример бд не получается, весит больше 150кб, исключила все по максимуму.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39657263
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23, базу надо сжать и заархивировать.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39657387
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23, если правильно понял, то описываемый код расположен в форме 1.
Форма 2- подчиненная формы 1, форма 3 - подчиненная формы 2.
рекордсорс формы 3 из формы 1 будет выглядеть так:
Код: vbnet
1.
Me.controls("фпПоискЗаявок").form.controls("фпПоискМИЦОВИВ").form.RecordSource =strSQL 


' здесь "фпПоискЗаявок" и "фпПоискМИЦОВИВ" - названия тех контролов в которых расположены формы 2 и 3.
т.е.
Me.controls("фпПоискЗаявок").sourceObject = "Форма2" ' это в общем случае форма2 присвоена контролу на форме1
2. лучше всего в форме 1 создать 2 переменные в которых описать формы 2 и 3 и работать с ними из формы 1.
т.е. это
Код: vbnet
1.
2.
3.
Dim forms2 as form, forma3 as form ' если у этих форм есть события типа  Load и пр. то добавить withevents
Set forma2=Me.controls("фпПоискЗаявок").form
set forma3=Me.controls("фпПоискЗаявок").form.controls("фпПоискМИЦОВИВ").form'  (можно и set forma3=forma2.controls("фпПоискМИЦОВИВ").form)


очевидно это forma3.RecordSource =strSQL


forma2.RecordSource ="" ' красивее forma2.RecordSource =vbnullstring

Свойство Parent используется если Ваш код будет в Форме3, тогда,для того чтобы из формы 3 изменить рекордсорс формы 2 применяете Parent (поднимаетесь выше по иерархии в оношении предок/потомок
Код из формы3
Me.Parent.RecordSource =strsql2
чтобы изменить что то в форме1 из формы3
Me.parent.Parent.recordsource=strsql3
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39657949
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleckonataxa23, если правильно понял, то описываемый код расположен в форме 1.
Форма 2- подчиненная формы 1, форма 3 - подчиненная формы 2.
Да, все верно. Единственное чего не поняла, это куда и где и для чего использовать:
aleckoforma2.RecordSource ="" ' красивее forma2.RecordSource =vbnullstring
спасибо за наводку:
aleckoСвойство Parent используется если Ваш код будет в Форме3, тогда,для того чтобы из формы 3 изменить рекордсорс формы 2 применяете Parent (поднимаетесь выше по иерархии в оношении предок/потомок
Код из формы3
Me.Parent.RecordSource =strsql2
чтобы изменить что то в форме1 из формы3
Me.parent.Parent.recordsource=strsql3
Озверинбазу надо сжать и заархивировать.
Да я в курсе, когда отписывалась, что бд весит больше 150кб. Просто я взяла копию и исключила из нее все лишнее по максимуму. Этого оказалось не достаточно.

Сделала иначе, создала пустую бд и экспортировала все необходимое, получилось тютелька в тютельку, так что выкладываю свой пример. Только в процедуре, которую приводила в своем посте, убрала свои закоментированные попытки добраться до РекордСурса подчиненной формы3.

Заметила такую вещь, я применяю для формы2 в Load: «Me.SubdatasheetExpanded = False», чтобы изначально все «+» были свернутыми, и это влияет на РекордСурс подчиненной формы3 – вызывает ошибку: 2455 Введенное выражение содержит недопустимую ссылку на свойство "Form/Report".

Пробовала так же через переменную присваивать объект формы по совету alecko , срабатывает та же ошибка, если таблица не развернута на форме2. Т.е. ему не нравится, что все записи находятся в свернутом состоянии, ему надо их разворачивать – видимо он закрывает форму3 как объект, если на форме2 подчиненная форма3 имеет свернутое состояние, соответственно и ссылка на форму3 становится недопустимой. Но это мои догадки.

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

Выкладываю свой пример. В моем примере 3-й столбец выборки по полям и комбобокс – это та часть, которая делает выборку для формы3.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39658163
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23, у меня не удалось распаковать
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39659075
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверинnataxa23, у меня не удалось распаковать
хм..., странно у меня архив распаковывается.
Выкладываю повторно.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39659092
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23Озверинnataxa23, у меня не удалось распаковать
хм..., странно у меня архив распаковывается.
Выкладываю повторно.

http://www.sql.ru/forum/actualfile.aspx?id=21482698] Приложенный файл (Database1.rar - 148Kb)
лучше зазипуйте RAR у многих не распаковывается(версия новомодная)
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39659126
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если делать стандартным способом от винды, то тогда вес превышает 150кб.
Выкладываю еще раз. в настройках винрара выбрала др.формат, может это поможет.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39659204
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

все равно не открывается

прилагаю zip
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671033
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет , хочу снова поднять свою тему, т.к. до конца так и не удалось решить ее.
Остались такого рода вопросы, правда с последнего раза код я несколько переделала. Выкладывать его здесь пока не стану, надеюсь приложенный пример не вызовет проблем с распаковкой, как в прошлый раз, хотя для меня это так и осталось загадкой, WinRAR использую v.5.50 (64-разрядная).

1) на точке останова возникает непонятное сообщение Access в процедуре "RefreshRecordSourse" на строке:
frm.SubdatasheetExpanded = True
при этом видно, что св-во frm.SubdatasheetExpanded = "False" все же меняется на "True", код продолжает выполнятся дальше, где в последствии в той же процедуре отслеживается ошибка 2455.
-----------------
2) ошика 2455: «Введенное выражение содержит недопустимую ссылку на свойство "Form/Report".»
Методом проб и ошибок подозрения падают на то, что приходится менять св-во «Развернутая подтаблица» = "НЕТ" на "ДА", т.е. «+» влияют на объект - подчиненную форму3 (фпПоискМИЦОВИВ) в форме2 (фпПоискЗаявок), которая в свою очередь находится в форме1 (фПоиск).
-----------------
3) напрягает мерцание экрана. Application.Echo "False"\"True" - не помогает.
-----------------
4) непонятно какой код отвечает за выполнение действия нажатие кн.мыши на непосредственно сам «+», т.е. "скрыть"\"раскрыть" строку одного рекордсета, чтобы отобразить связанные с ним данные в подтаблице.

Буду очень признательна, если кто откликнется, поможет с вопросами, а так же поможет добить тему и решить проблему в целом, и все же реализовать задуманное.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671036
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23, архив поврежден. можно кинуть файл в облако (типа Ядиск), а сюда ссылку выложить.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671052
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш файл посмотреть не удалось (наверно новее 2007)
Может как-то так:
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671069
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuВаш файл посмотреть не удалось (наверно новее 2007)
блин, да. Прошу меня извинить, с самого начало все время как то ускользает из памяти указать, что у меня Access 2010, поэтому 2007 к сожалению его не откроет.
aleckoархив поврежден. можно кинуть файл в облако (типа Ядиск), а сюда ссылку выложить.
Ядиск не использую, пришлось залить на файлообменник, ссылка: zip-файл
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671075
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuМожет как-то так:
http://www.sql.ru/forum/actualfile.aspx?id=21552285] Приложенный файл (tmp1.rar - 20Kb)
Похожий вариант, но есть разница. У вас форма (получатель), через которую делается выборка по полю фамилия привязан к запросу. В этом случае, когда форма открывается то она встает на 1 имеющуюся запись. Т.е. форма не будет выводить по несколько записей главной таблицы, а только лишь 1.
У меня не так, моя форма1 к запросу не привязана и поля на ней свободные, в этом случае это дает возможность подчиненной форме2:
- выводить либо все записи сразу;
- записи, сделанные через выборку по полям на форме1;
- либо все записи скрыть.
Но моя проблема заключена в том, что у подчиненной формы2 есть своя подчиненная форма3. Поля на форме1 выведены как для выборки подчиненной формы2, так и для подчиненной формы3. И соответственно, если делать выборку по полям для подчиненной формы3, вот здесь то и возникает вся трудность, а главное ошибка 2455.
Методом проб и ошибок я прихожу к такой мысли, что «+» влияют на подчиненную форму3, ссылка на объект формы вроде бы есть, но при закрытых «+» обновлять RecordSours подчиненной формы3 не получается. Однако, если я применяю .SubdatasheetExpanded = "False" меняю на "True", то ошибка 2455 то выводится, то нет, но чаще всего она выводится.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671085
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
архив открылся, но ... мой Акс2007 непрочитал. (бывает читает 10-е) - ждем в .mdb .
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671091
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleckoархив открылся, но ... мой Акс2007 непрочитал. (бывает читает 10-е) - ждем в .mdb .
В одном архиве zip-файла сохранила на всякий пожарный случай в 2-х вариантах: 2000 и 2002-2003
Блин, чета раньше мне такого делать не приходилось как то, я прям даже для себя щас америку открыла, когда пересохраняешь в более позднюю версию, акс ругается на то, что такие формы не поддерживаются и своих форм я не вижу в боковой панели навигации, но при этом, если открываешь пересохраненный файл, то он формы то грузит, только интерфейс немного отличается.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671093
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23У меня не так, моя форма1 к запросу не привязана и поля на ней свободные, в этом случае это дает возможность подчиненной форме2:
- выводить либо все записи сразу;(А они поместятся на экран-не знаю Вашу базу-но ведь их может быть довольно много и очень спорна необходимость их вывода-ведь придется прокручивать записи,что неудобно и требует внимательности, или применять,таки поиск)
- записи, сделанные через выборку по полям на форме1;(на форме2 выводятся записи по выборке на форме1,на форме3 выводятся записи по выборке на форме2-щелчке на "+")
- либо все записи скрыть.(какие именно и где?)
Но моя проблема заключена в том, что у подчиненной формы2 есть своя подчиненная форма3. Поля на форме1 выведены как для выборки подчиненной формы2, так и для подчиненной формы3.(выборка на Ф3 соответствует записи на Ф2(иначе быть не может)- одновременно подчиняться и Ф1 и Ф2-так быть не может и какой в этом смысл?)
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671107
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkunataxa23У меня не так, моя форма1 к запросу не привязана и поля на ней свободные, в этом случае это дает возможность подчиненной форме2:
- выводить либо все записи сразу;(А они поместятся на экран-не знаю Вашу базу-но ведь их может быть довольно много и очень спорна необходимость их вывода-ведь придется прокручивать записи,что неудобно и требует внимательности, или применять,таки поиск)
- записи, сделанные через выборку по полям на форме1;(на форме2 выводятся записи по выборке на форме1,на форме3 выводятся записи по выборке на форме2-щелчке на "+")
- либо все записи скрыть.(какие именно и где?)
Но моя проблема заключена в том, что у подчиненной формы2 есть своя подчиненная форма3. Поля на форме1 выведены как для выборки подчиненной формы2, так и для подчиненной формы3.(выборка на Ф3 соответствует записи на Ф2(иначе быть не может)- одновременно подчиняться и Ф1 и Ф2-так быть не может и какой в этом смысл?)

1) если пользователю нужно вывести на распечатку все записи

2) форма1 формирует вывод записей для формы2 и формы3 по связанному ключевому полю у каждой формы свой запрос, я описала об этом в своем первом посте, чтобы не повторяться. А выборка делается так. Вначале формируется запрос формы3, затем по ключевому полю формируется запрос для формы2. Это нужно для того:
а) если юзер делает выборку по полям, которые относятся только к форме2;
б) если юзер делает выборку по полям, которые относятся только к форме3;
в) если юзер делает выборку по полям формы2 и формы3.

3) под скрытием всех записей я имею ввиду форму2, типа отобразить пользователю пустую таблицу.

Да выборка на Ф3 соответствует, чтобы сформировать запрос по полям, которые относятся к Ф2, а как же иначе то тогда? Я тогда не смогу сформировать запрос Ф3, если юзер будет делать выборку по полям к Ф2. А так я получаю вначале общий запрос для Ф3, а потом получаю запрос для Ф2.

Если у Вас все же получится просмотреть мой выложенный пример, то при тестировании вы сможете увидеть такую штуку, что если не обращать внимания на ошибку 2455 (она у меня отлавливается моим сообщением с выводом названия процедуры, в которой она произошла) и повторно нажать кнопку поиск, то он формирует согласно сделанной выборке.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39671140
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыл!
nataxa23, подподформой управлять из формы не получится, т.е. recordsource должен быть неизменный, (для примера попробуйте создать переменную form для неё - не получится). (Гетц рекомендует делать синхронизированные подформы 1-го уровня)
SubdatasheetExpanded для того чтобы использовать нужно его создать
кажется примерно так
Код: vbnet
1.
2.
3.
4.
Dim db As DAO.Database
Dim prp As DAO.Property
Set prp = db.CreateProperty("SubdatasheetExpanded", dbBoolean, blnAllDisabled(?))
        db.Properties.Append prp


подобные задачи помоему проще и нагляднее решаются при помощи списков
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688293
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди помогите с кодом добить вопрос:
Ошибка 2455: «Введенное выражение содержит недопустимую ссылку на св-во "Form/Report".»
Неужели никто не сталкивался с такой задачей?

Код: vbnet
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.
69.
70.
71.
72.
73.
74.
75.
Private Sub RefreshRecordSourse(SQL As String, Query As String)
On Error GoTo ErrNumber
  Application.Echo False 'отключить обновление экрана Access

  Me.фпПоискЗаявок.Form.RecordSource = Query
  With Me.фпПоискЗаявок.Form.Recordset
    .MoveFirst
    Do Until .EOF
      Me.Controls("фпПоискЗаявок").Form.Controls("фпПоискМИЦОВИВ").Form.RecordSource = SQL 'Ошибка 2455
      .MoveNext
    Loop
    .MoveFirst
  End With
  Me.фпПоискЗаявок.Requery
  Me.НадписьКоличествоЗаявок.Caption = Me.фпПоискЗаявок.Form.Recordset.RecordCount
  DoCmd.GoToControl "фпПоискЗаявок"
ExitHeare:
  Application.Echo True 'включить обновление экрана Access
Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: RefreshRecordSourse. Форма: " & Me.Name & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub
________________________
'SQLзапрос Скрыть все
Private Sub HideAll()
On Error GoTo ErrNumber
  Me.фпПоискЗаявок.Form.RecordSource = "SELECT DISTINCT * FROM звПоискЗаявок WHERE [КодЗаявки] Is Null"
  Me.НадписьКоличествоЗаявок.Caption = Me.фпПоискЗаявок.Form.Recordset.RecordCount
ExitHeare:
  Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: HideAll. Форма: " & Me.Name & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub
________________________
'SQLзапрос Показать все
Private Sub ShowAll()
  Dim strSQL As String
On Error GoTo ErrNumber
  Application.Echo False 'отключить обновление экрана Access

  Me.Controls("фпПоискЗаявок").Form.Controls("фпПоискМИЦОВИВ").LinkMasterFields = ""
  Me.Controls("фпПоискЗаявок").Form.Controls("фпПоискМИЦОВИВ").LinkChildFields = ""

  strSQL = "SELECT DISTINCT * FROM звПоискЗаявок"
  Me.фпПоискЗаявок.Form.RecordSource = strSQL

  Call OpenQuery(strSQL) 'получим данные в глобальную переменную "strКодЗаявки" - для отчетов и диаграмм

  strWHERE = strКодЗаявки
  Me.Controls("фпПоискЗаявок").Form.Controls("фпПоискМИЦОВИВ").LinkMasterFields = "КодЗаявки"
  Me.Controls("фпПоискЗаявок").Form.Controls("фпПоискМИЦОВИВ").LinkChildFields = "КодЗаявки"

  Me.НадписьКоличествоЗаявок.Caption = Me.фпПоискЗаявок.Form.Recordset.RecordCount
  DoCmd.GoToControl "фпПоискЗаявок"
ExitHeare:
  Application.Echo True 'включить обновление экрана Access
Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: ShowAll. Форма: " & Me.Name & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub


...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688334
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

была у меня ситуация, вот так вот тоже вложенности глубиной 3.
Все было сделано на табличных формах.
Так вот я заметил, что событие Open самой глубокой формы срабатывало только при первом обращении к этой форме.
Т.е. пока не кликнешь плюсик для раскрытия подчиненных - подчиненной как бы и не существует.
После первого раскрытия потом уже все как обычно.
Может и здесь попытка присвоить глубокой подчиненной источник влоб.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688365
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИгортанМожет и здесь попытка присвоить глубокой подчиненной источник влоб.
Возможно, только я не пойму, как тогда правильно это реализовать?
Сложно сказать при каком действии она срабатывает, после которого в коде процедуры " RefreshRecordSourse " происходит эта ошибка в указанной мной строке. Пытаюсь уловить этот момент.
Возможно, скорее всего, похоже она происходит, если перед этим применялась моя процедура " HideAll " - для скрытия всех записей на ф2 " фпПоискЗаявок ".
ИгортанТак вот я заметил, что событие Open самой глубокой формы срабатывало только при первом обращении к этой форме.
Не знаю на ск-ко правильным можно считать код в моей процедуре " ShowAll ", но в ней он каждый раз заходит в процедуру " Form_Load " ф3 " фпПоискМИЦОВИВ ", когда таблица ф2 " фпПоискЗаявок " не пустая, а содержит какие-либо записи:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Form_Load()

On Error GoTo ErrNumber
  Me.RecordSource = "SELECT * FROM звПоиск"
ExitHeare:
  Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: Form_Load. Форма: " & Me.Name & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub


Т.е. в ней он отрабатывает как надо, сбрасывая примененную ранее выборку и выводит весь источник данных.
А вот как быть здесь, я ума не приложу?
Ясно только одно, что ссылку надо каким то образом делать доступной.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688407
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

сейчас посмотрел как у меня сделано.
Каждая форма имеет свой источник, уже прописанный в конструкторе.
Ну, связи соответственно.
Перепроверил.
- Пока не кликнешь на плюсик для открытия самой глубокой формы - она вообще не загружается.
Form_Open только после "плюсика".
Ваш лоад срабатывает, потому что вы переписываете все время источник форм.
Переосмыслите. Может можно сделать как я писал в своем варианте.
Или на событии открытия формы - присваивать источник, строку sql, которую будет дергать из главной формы.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688422
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИгортанПереосмыслите. Может можно сделать как я писал в своем варианте.
т.е. повесить код вместо процедуры " Form_Load " на процедуру " Form_Open "?
Что вы имеете в виду под "я писал в своем варианте"??
ИгортанИли на событии открытия формы - присваивать источник, строку sql, которую будет дергать из главной формы.
каким образом дергать из главной формы?
Если честно я ни разу не поняла вашего совета.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688434
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

nataxa23т.е. повесить код вместо процедуры " Form_Load " на процедуру " Form_Open "?
да, ноя сейчас не про код. А про присваивание строки источника в целом.

nataxa23каким образом дергать из главной формы?
Сделайте скрытое поле на главной форме. По какому то действию (сильно в код не вникал)
в это поле записывайте sql строку источник
потом на событие Form_Open подчиненной
me.form.RecordSource = me.Parent.ПолеГдеСохранилиSQLСтроку
если связи нужны, желательно прописать в самих свойствах форм
тогда не нужно будет чистить и устанавливать связи.
Если у вас источник не меняется прям по наборам таблиц, а только набором полей.
nataxa23Что вы имеете в виду под "я писал в своем варианте"??
имел ввиду, что прописать источники форм прямо в свойство.
Если это для ваших условий допустимо.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688602
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то не складывается у меня в голове предложенный вариант плана реализации.
Игортанnataxa23каким образом дергать из главной формы?
Сделайте скрытое поле на главной форме. По какому то действию (сильно в код не вникал)
в это поле записывайте sql строку источник
потом на событие Form_Open подчиненной
me.form.RecordSource = me.Parent.ПолеГдеСохранилиSQLСтроку
если связи нужны, желательно прописать в самих свойствах форм
тогда не нужно будет чистить и устанавливать связи.
Если у вас источник не меняется прям по наборам таблиц, а только набором полей.
Перефразирую свой вопрос. Зачем прописывать источник в главной форме, если она - гл.форма, не имеет своего источника? Все поля на гл.форме для выборки данных свободные.
Между собой связаны только подчиненная ф2 и подчиненная ф3 по ключевому полю, каждая из которых (ф2 и ф3) имеет свой источник данных.
Непонятно к какой форме применять:
Игортанпотом на событие Form_Open подчиненной
me.form.RecordSource = me.Parent.ПолеГдеСохранилиSQLСтроку
Если честно я не понимаю какой смысл, в моей ситуации, хранить в скрытом поле строку sql-запроса?
Работать должны обе подчиненные формы, т.к. на гл.форме есть поля, которые относятся к выборке на ф2 и есть поля, кот.относятся к выборке на ф3.

Вы же сами обратили внимание на:
ИгортанВаш лоад срабатывает, потому что вы переписываете все время источник форм.
А здесь пишете:
ИгортанЕсли у вас источник не меняется прям по наборам таблиц, а только набором полей.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688749
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИгортанЕсли у вас источник не меняется прям по наборам таблиц, а только набором полей.

Подразумевалось, что источники ф2 и ф3 построены на одних таблицах и отличаются только набором полей

Как я понял проблему,
не удается присваивать источник для ф3 лежит в ф2

ф3 присваивать источник ДО момента открытия (клика по плюсику) не удастся. По крайней мере первый раз. Ибо ф3 до первого обращения к ней, как бы не существует, не загружена.
На мой взгляд 2 решения вопроса
1. Прописать источники в свойствах форм + связи + ссылки на поля фильтры: Forms!ГлФ!ПолеФильтра. При изменении параметра - тупо обновлять нужную подчиненную
2. В момент первого обращения (клика по плюсику) в событии Form_Open присваивать источник.
Что то вроде этого
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Form_Open(Cancel As Integer)
    Cancel = MySource
End Sub

Public Function MySource() as Boolean
    On Error Resume Next
    MySource=true
    me.form.recordsource = Ваша строка 'Статичная или собирается на ходу
    if err.Number=0 then MySource=false
end function


Далее, уже сможете обращаться к публичной функции и переписывать источник в любой момент
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39688958
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовала ваш вариант:
Игортан2. В момент первого обращения (клика по плюсику) в событии Form_Open присваивать источник.
Что то вроде этого
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Form_Open(Cancel As Integer)
    Cancel = MySource
End Sub

Public Function MySource() as Boolean
    On Error Resume Next
    MySource=true
    me.form.recordsource = Ваша строка 'Статичная или собирается на ходу
    if err.Number=0 then MySource=false
end function


Ошибка 2455 все равно появляется, как раз по причине, если не трогать «+». Т.е.в момент, когда таблица ф2 с выборкой по ключ.полю имеет значение Is Null для мгновенного скрытия всех записей на ф2.
1 вариант не даст мне скрывать записи не очищая поля на гл.ф1.
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39689070
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nataxa23,

если столько бодаетесь и никак не идет
Может стоит задуматься о принципиально другом решении задачи?
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39689125
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игортанесли столько бодаетесь и никак не идет
Может стоит задуматься о принципиально другом решении задачи?
Может и стоит, раз майкрософт не дает такой возможности. Это им, кстати, в минус.
Но я не знаю какой тогда сделать альтернативный подход, если моя процедура " RefreshRecordSourse " выдает ошибку 2455?
...
Рейтинг: 0 / 0
RecordSource подчиненной формы
    #39689133
nataxa23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К слову о «+», поэкспериментировала с ними. Сделала глобальную переменную для св-ва развернутая подтаб. Меняю в процедуре " HideAll " св-во формы Me.фпПоискЗаявок.Form.SubdatasheetExpanded = True , ну т.е. когда выборка делается со значением " Is Null " по ключевому полю. Ошибка 2455 вроде бы не вылезает, работает стабильно. Но я не уверена, что это помогло, как пить дать, завтра она все равно вылезет.
Я не первый раз уже замечаю такую вещь, когда пытаешься что то доработать, например исправить ту или иную ошибку или что еще делать, смотришь, вроде бы все работает, косяк исправился, а на следующий день запускаешь бд, а ошибочка то хрясь - никуда и не девалась, вот она родимая.

Один минус заметила только с этим экспериментом. Когда меняю св-во подтаб., то поиск срабатывает с раскрытыми плюсиками.
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / RecordSource подчиненной формы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]