|
|
|
| Помогите решить (или хотя бы подскажите в каком направлении смотреть) следующую задачу.
Необходимо на форме дать пользователю осуществить выбор из существующих таблиц (эту часть легко решить используя MSysObjects, сделав выборку столбца Name с необходимыми условиями из этой таблицы источником для поля со списком), а после выбора таблицы пользователю необходимо предоставить наименования всех столбцов выбранной таблицы чтобы он смог отметить необходимые (например через флажки). После чего надо сохранить именования столбцов которые выбрал пользователь, например св строковую переменную по нажатию кнопки "ОК"...
Вторую часть не понимаю как решить, ясно что взяв имя таблицы можно получать имена всех ее столбцов а вот как это отобразить на форме не понимаю что то а еще надо и дать возможность выбора пользователю???
подскажите как это сделать... | |
|
| |
|
|
|
| Копать в направлении объекта Table (в поиске справочной системы). Пробежавшись по всем полям экземпляра объекта Table, полученного от выбранной таблицы, можно заполнить список на форме. Список может быть с возможностью множественного несвязанного выбора. Конечно, не галочки ставить, но уже кое-что. Вообще, я бы сделал два списка: один, это который со всеми полями, а в другой бы переносил выбранные пользователем поля, как в большинстве мастеров это сделано. | |
|
| |
|
|
|
| а примера у вас нигде не завалялось случайно:)? | |
|
| |
|
|
|
| а мона вопрос - на фига юзеру такие действия???? - дальше что с этим списком выбраных столбцов - формировать отчет, писать обработку - повеситесь однозначно. | |
|
| |
|
|
|
| ответ прост после выбора столбцов, пользователь еще ключевое слово напишет в поле и по выбранным столбцам нужно будет всего лишь поиск вхождения слова запустить и все... вешаться не придется. | |
|
| |
|
|
|
| есть стандартный поиск | |
|
| |
|
|
|
| поподробнее? что вы имеете ввиду под стандартным поиском? | |
|
| |
|
|
|
| в форме по нажатию Ctrl+F - выскочит формочка "Найти"
может проще открывать нужную таблу a форме и дальше пусть ищут сами что хотят | |
|
| |
|
|
|
| то есть под каждую таблицу надо нарисовать свою форму... не катит... | |
|
| |
|
|
|
| сделайте без всяких форм
DoCmd.OpenTable имяТаблицы [, режим] [, режимДанных]
Метод OpenTable выполняет макрокоманду ОткрытьТаблицу (OpenTable) в программе Visual Basic. Подробное описание макрокоманды и ее аргументов см. в разделе справки о макрокоманде. | |
|
| |
|
|
|
| а как осуществляется вывод строк куда входит слово введеное пользователем - если он сам выбирает столбцы - форму то придется рисовать каждый раз новую | |
|
| |
|
|
|
| Все примеры в справочной системе имеются, или на сайте (как подсказывают старшие товарищи :-)). Если что конкретное не будет получаться, тогда спросите и подскажем. ;-) | |
|
| |
|
46 Кб. |
|
|
Вообще, я бы сделал два списка: один, это который со всеми полями, а в другой бы переносил выбранные пользователем поля
|
и еще нужен комбо бокс для выбора таблицы | |
|
| |
|
|
|
| выбор полей произвольной таблицы реализовал так
http://slil.ru/28612804 | |
|
| |
|
|
|
| а сюда что - аттачем не помещается? | |
|
| |
|
|
|
| что то не захотело:) 268 Кб. за идею спасибо. теперь надо придумать куда результаты деть:) | |
|
| |
|
|
|
| результаты (все) можно хранить в локальной таблице "favorites" или "layouts" - сохранять по запросу пользователя, или не хранить, или хранить только последний... | |
|
| |
|
|
|
| так число столбцов будет произвольным. я думаю от 1 до 5-ти 6-ти, как правильно тогда создавать таблицу? | |
|
| |
|
|
|
| SchemeID - идентификатор схемы запроса (может быть автономер или что угодно еще)
PartitionID - идентификатор места применения (в каком контексте применяется схема)
SchemeName - название схемы - дает сам пользователь "фильтр-список поставщиков по типу"
Statement - сохраненное в таблице SQL выражение запроса SELECT * FROM tblCustomers WHERE InustryCode = "строители"
CreatedBy - Get UserName
CreatedOn - дата создания сохраненного запроса
возможны разные варианты... отмечу что речь идет не о таблице а о представлении | |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=view&id=437 | |
|
| |
|
|
|
| а теперь и встал вопрос как грамотно вывести результаты поиска по этим полям, как и написал ранее kot_k_k... что ту посоветуете умные головы??? отчет собрать как нибудь или еще как нибудь? | |
|
| |
|
|
|
| вариантов несколько - вот только что дальше пользователь будет делать?
1. на форму собрать в строку "Название столбца " + "содержание" - скрыто держим поле с кодом записи - юзер выбирает понравившееся - переходим на него -> обрабатываем....
2. поток выводм на отчет - на милый смотри любуйяся и фиг тебе больше.
3. можно откырть таблу в ленточной форме - с фильтром по собраным полям - работай юзер.... | |
|
| |
|
|
|
| ну вот форма примерно такая у меня будет
http://slil.ru/28613242
наверно вариант три подошел бы, только пока не понимаю как создать заранее такую форму в которой неизвестно сколько полей... | |
|
| |
|
|
|
| то есть сделать подчиненную ленточную форму пустую как бы, а после того как юзер все выбрал выставить, усточником строк - выбранную таблицу а все выбранные столбцы впихать в фильтр? правильно я понял?
тогда все равно не понимаю как на данной форме появятся нужные мне текстовые поля?
откырть таблу в ленточной форме - это как? что то туплю:( | |
|
| |
|
|
|
|
откырть таблу в ленточной форме - это как? что то туплю:(
|
не в ленточной а в табличной - почувствуй разницу | |
|
| |
|
|
|
| 1. Explorer - прав, протупил, дурной день сегодня.
2. ты хочешь обойтись одной формой. Выбирая ее источником однй из любого кол-ва таблиц - задачка даже для неНачинающего.
3. Самый простой вариант :
- создаешь Таблу (назовем TMP_Запрос) с полями Название_Поля, Содержание_Записи, Код_Записи /добавить что еще нужно по вкусу/
- на основании этой таблы делаешь форму любого вида.
- при нажатии кнопки Найти/Поиск/Посмотреть - из твоей формы с выборкой происходит следующее:
- обнуляем таблу TMP_Запрос, запросом/программно ее заполняем, открываем форму на оновании созданной таблы - дальше юзер работает с полученными результатами.
самое простое - открыть юзеру таблу с фильтром и все. но так не кошерно.
да и давать юзеру доступ к таблице которая хуже контролируется чем форма - наживать себе бесплатно гемор. | |
|
| |
|
|
|
|
обнуляем таблу TMP_Запрос, запросом/программно ее заполняем
|
не надо временной таблицы - это незачем.
нужно сохранить шаблонную болванку запроса qryUserData "по умолчанию" и потом программно менять в ней текст запроса (самого SQL выражения) | |
|
| |
|
|
|
|
нужно сохранить шаблонную болванку запроса qryUserData "по умолчанию" и потом программно менять в ней текст запроса (самого SQL выражения)
|
а вот с этого места по подробней, с шаблонами не работал - могу не знать - открой очи мне, о Исследователь | |
|
| |
|
|
|
| да уж вот себе придумал задачу:) надо было нарисовать 20 формочек для поиска для каждой таблицы.... хм...
может покажете пример мне в моей простой базе? второй пример базы я выложил чуть выше ... | |
|
| |
|
|
|
| или имел в виду создаем запрос на основании одной из табл:
"select naimen as Выражение1, kol_vo as Выражение2, Data_1 as Выражение3 from Spisok"
|
на основании его делаем форму и програмно меняем текст запроса | |
|
| |
|
|
|
|
на основании его делаем форму
|
форму дельть необязательно - просто указать как SourceObject вместо сабформы твой запрос | |
|
| |
|
|
|
| ну я обычно использую временные таблы для редактирования/ввода с последующей перезаливкой в основные, поэтому и написал. | |
|
| |
|
|
|
| в итоге решил так, после всех выборов пользователя собрал строчку SELECT'a и использовал данную выборку в конструкции SELECT * INTO tmp_tab FROM собранный_запрос
после чего получается временная таблица которую просто можно открыть и показать пользователю как результат. | |
|
| |
|
|
|
|
после чего получается временная таблица которую просто можно открыть и показать пользователю как результат.
|
временные таблицы делай во временных БД - не плоди мусор в основной - рабочей | |
|
| |
|
|
|
|
на основании его делаем форму и програмно меняем текст запроса
|
именно это я и сказал - только форму делать не надо | |
|
| |
|
|
|
| а чем принципиально отличается создание\удаление временной таблицы от постоянного наличия болванки запроса в которой программно меняется sql-код???
да кстати а как отредактить в коде вба sql текст запроса? | |
|
| |
|
|
|
| Explorer я правильно понял вас что вы имели ввиду что то типа
sqlstr = "select " & str & " from " & ПолеСоСписком0.Text
Set qs = CurrentDb.QueryDefs("q")
qs.SQL = sqlstr
DoCmd.OpenQuery "q", , acReadOnly | |
|
| |
|
|
|
|
что вы имели ввиду что то типа
|
есть разные способы - в хелпе все подробно расписано для DAO для ADO.
можно например глянуть сюда: Build SQL Statements That Include Variables and Controls
текст запроса можно хранить в служебной таблице "сохраненных запросов пользователя"
плюс будет в том, что системных объектов (в частности сохраненных запросов в БД) будет определенное нормированное количество и следовательно
не придется разгребать завалы запросов сохраненных пользователем
и тщательно контролировать пространство имен объектов в разных БД
кроме того, тексты сохраненных запросов можно сделать общедоступными - дав пользователям права доступа к таблицам-хранилищам запросов и лэйаутов.
что касается временных таблиц в БД - если ты часто сохраняешь удаляешь данные во временных таблицах или создаешь удаляешь сами таблицы - БД пухнет и появляется отнюдь не нулевой шанс вымучить себе какой-нибудь сбой либо при работе с данными либо при обслуживании БД
если ты вынужден создавать временные таблицы - например для ускорения работы с данными или работы с агрегированными данными из основных таблиц (разные варианты - агрегированные аналитические данные за прошлые периоды, OLAP кубы, варианты решений и т.п.)
создавай такие таблицы во временных БД - создаешь временную БД, создаешь в ней таблицы, потом все удаляешь по окончании работы (тут есть несколько важных моментов связанных с безопасностью данных)
------------
да, а еще это подходит для MDE | |
|
| |