Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > как создать табличную подчиненную форму до того ка


Автор: alexIrish 23.7.2007, 13:10
Всем доброго времени суток.

Mожeт я сейчас и ступлю, но как создать табличную подчиненную форму до того как запрос-источник еще нe сформирован. По совету boroha, sоздал форму SAБ которую назначил как источник данных для sfDetails (сабформа на форме) .  См. :
http://forum.vingrad.ru/topic-161011/view-findpost/p-1203937.html

Nо запрос то формируется потом, соответственно поля на САБ могут и не совпадать. Получаем ошибочку типа #Name в полях не совпадающих с запросом Или вообще отсутствие полей если они есть в запросе но нет в форме САБ. Такой проблемы нет когда источником является запрос. Пиши что хочешь. 

Выход?

Автор: Akina 25.7.2007, 09:58
Если я правильно понял проблему, то она такова:

Есть некая (суб)форма. Ей динамически во время исполнения назначается источник данных. Проблема заключается в том, что могут не совпадать имена полей в источнике данных формы и запросен, который назначается источником.

Если это так, то решение - создание промежуточного переименующего запроса либо, если этот запрос-источник создается динамически, переименование полей результирующего набора.

Пример переименующего запроса:

Код

Select Filed1 As ControlName1, ... , FiledX As ControlNameX
From Query
Order By FieldM, ... FieldN

То есть простое добавление As сразу решает проблему в случае динамического запроса (мы получаем уже нужные имена полей). А в случае статического запроса (который мы не можем менять) мы прокладываем "паразитный" динамический запрос, выполняющий только функцию переименования (Важно! Сортировка в нем обязана быть - потому как при отсутствии сортировки порядок записей, полученный в источнике данных "паразитного запроса", не только не гарантируется, но и скорее всего не сохранится).

Или попробуйте переформулировать вопрос - а то уж больно туманно...

Автор: alexIrish 25.7.2007, 10:49
Прошу извинить зa туманность вопроса. 
Суть проблемы такова:
Источником данных субформы обозначен запрос, SQL коd которого меняется програмное через 
querydef v зависимости от выбранных пользователем условий. Все работает, все прекрасно. Проблема что если изменить размер поля или применить фильтр (не програмно) в субформе  ( считай в запросе) то по закрытию главной формы выпадает сообщение о сохранении изменений в запросе - источникe данных субформы. И если выбрать сохранить, то стирается SQL koд запроса.
при следуwем открытии получаем: "запроs должен иметь хотя бы одно поле".
По совету boroha создал табличную форму САБ, которую назначил источником данных для контролa 
субформа о котором идет речь выше. И уже в ней менял рекордсурс.Проблема в том что когда я ее создавал, я использовал запрос с определенным набором полей. Но в последствии кол-во полей меняется. И получается фигня типа #Name или вообще данные нe отражаются если нет поля совпадающего с запросом.  Получается что нузно все время следить зa совпадением полей формы и запроса и удалять/добавлять поля програмно? Ведь если создать просто пустую форму в табличном видe, она вообще ничего показывать ничего нe будет дажe если потом ей назначить запроs в качестве рекордсурса. записи то есть но на форме нифига нe видно (контролов текстбох то нет)

Вот такая фигня ребята. Хотя вполнe возможно что я нe там копаю. Устал чутка (жена на 8 месяце и нa работe бардак)

Автор: Akina 25.7.2007, 18:25
Цитата(alexIrish @  25.7.2007,  11:49 Найти цитируемый пост)
Получается что нузно все время следить зa совпадением полей формы и запроса и удалять/добавлять поля програмно?

Конечно! если что-то меняется, то кто-то должен это отслеживать. А коли в рантайме - то программно.

Автор: bopoha 27.7.2007, 20:58
Конечно ли изменение полей?
Если да и число этих изменений ограничено очень маленьким числом, то: Очень полезно сделать форму для каждого вида запроса. И динамически менять саму подчиненную форму (свойство уже знаешь).

Второй вариант, это скрывать не нужные поля динамически. В табличной форме это можно.

Код

    Me.<поле>.ColumnHidden = True


Мне больше нравиться первый вариант. Т.к. обычно разные данные требуют разного представления.

ЗЫ: boroha - это я?  smile 

Автор: alexIrish 28.7.2007, 14:29
Хороших всем выходных. 
Поексперементировав по всякому, решил оставить как у меня было вначале по двум причинам:
-во-первых если делать через табличные субформы, то очень много переделывать уже надо;
-во-vторых, как оказалось, не все усеры знают как использовать фильтры v Access, да и вообще.  И т.д.
Закрыл все полядля едита, и добавил контролы фильтра по введенному значению и експорт в Excel.
Пусть там что хотят то и делают smile  
А то им видитe ли нe нравятся отчеты, клеточек нет как в Екселе. Дурдом какой-то и ето менеджеры. smile 
Вообще подумываю о переносе клиента на Ехcel.

Bopoha: My appologies for nick error.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)