Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| Ребята нужна помощь. Думаю вопрос легкий но я его никак победить не могу.
Проблема следующая:
Есть две таблицы Основная и Поставщики.
Есть форма Основная и подчиненная табличная (привязана к основной таблице).
Добавление записей происходит в табличной форме и начинается с ввода наименования поставщика. (поле со списком)
Задача, при начале ввода поставщика, должен вываливаться список в котором отображаются все поставщики имеющие данный набор букв в любой части наименования с возможностью их выбора из списка.
Попробовал решить эту проблемму следующим образом:
Me!Организация.RowSource = "SELECT Поставщик From Поставщики WHERE Поставщик LIKE ""*" & Me!Организация.Value & "*"""
Получилось, но при этом при введении нескольких букв необходимо выйти из поля и снова в него зайти, что не совсем удобно, вернее совсем не удобно.
Может подскажите как это можно решить по другому?
Заранее признателен | |
|
| |
|
17 Кб. |
|
| см.атач. | |
|
| |
|
|
|
| Спасибо за быстрый ответ, да на первый взгляд работает, но не ловит средину наименования, а необходимо, чтобы поиск был по любой части слова. | |
|
| |
|
|
|
| Большое спасибо, все получилось. Была техническая ошибка в формировании запроса | |
|
| |
|
|
|
| Здравствуйте!!! А вот еще, мне кажется, несложный вопрос на счет поля со списком. Сама никак не ммогу сообразить. В учебной базе "Борей" есть такая подчиненная форма заказов, где при выборе значения в поле со списком "Товары", автоматически заполняются все остальные поля табличной формы.
В моей базе табличнаяподчиненная форма составлена по таблице. Мне нужно сделать, что бы так же при выборе в поле со списком названия организации автоматически заполнялись все остальные поля, соответствующие этой организации. Данные эти, разумеется в самой таблице есть) Подскажите пожалуйста, как это сделать? | |
|
| |
|
46 Кб. |
|
| Коровка, ты тему создай. По твоему вопросу очень похоже на поле со списком для поиска. Поставь в форму, через мастера укажи где искать и все.
2 вариант. Если в подчиненной форме все вываливается, то ищи в основной и через связанное поле вывалится все, что есть в подчиненной.
3 вариант уже показывал Леону. Сборная солянка с этого форрума. Пристегнул. (Новая инфа вводится прямо в поле со списком. 2 щелчка для корректуры) Но это не серьезно, видимо. | |
|
| |
|
|
|
| Спасибо за "сборную солянку"... Очень порадовало "Корректировать не****"
Но не совсем понятно, как все это сделано. Не могли бы вы описать поэтапно, как делается такая форма, как связываются поля? Связи между полем со списком и полем, которое заполняется после выбора какой-либо записи в поле со списком, нужно прописывать именно в коде, который написан для этого элемента (т.е. поля) или это можно сделать без вмешательства в код? Как связать поле со списком с формой, которая выводится при двойном щелчке мышью по записи в поле со списком? | |
|
| |
|
|
|
| Привет. Я уж думал что не заинтересовало. Описать поэтапно. Нравится мне этот сайт головолмками. Лучше кроссвордов. Ну держи. (Возможно что-нить упущу, не факт)
Созданы 2 таблицы. Основная - Таблица1 и подчиненная - Таблица2 В подчиненной форме есть поле КОД, через которое будет привязана к основной таблице через к такому же полю. В таблице1 Код - счетчик. В таблице2 - код числовое.
Далее форма для таблицы1. Вот тут начинается. Источником ее строк является запрос. SELECT Таблица1.*, Таблица2.* FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.ПолеВсе = Таблица2.ПолеВсе1 WHERE (Forms![Форма таблицы 1]!ПолеСоСписком6='0' Or Таблица1!Код=Forms![Форма таблицы 1]!ПолеСоСписком6);
По загрузке. Делай в конструкторе, перейди в рержим sql, скопируй то, что там получилось и вставь в свойство формы "Загрузка". Добавь только впереди Me.RecordSource = и далее в кавычках то, что получилось.
ЗАтем поставь поле со списком для поиска в форме1. Сотри все что там будет в VBA. И как у сампле в примере. Т.е. строишь в конструкторе запрос на таблицу SELECT Таблица1.Код, Таблица1.Поле FROM Таблица1; и также в sql копируешь в буфер. Затем в конструкторе снова делаешь запрос на таблицу, только тут не выводишь поля, а пишешь: там где
поле Код должно быть ставишь 0 а там где поле - "Все" получаешь в sql SELECT 0 AS Выражение1, "Все" AS Выражение2 FROM Таблица1. Затем в режиме sql стираешь позади ; и вместо нее влепляешь union и далее то, что в буфере обмена. Получаешь в итоге запрос на объединение. Текстовые поля с текстовыми,
а счетчик с нулем. Все это копируешь и вставляешь в источник строк поля со списком на форме1. Огранич его списком (Свойства - Данные - Ограничиться списком - Да)
Далее в свойствах, на вкладке События - после обновления Me.Requery - для обновления формы. Отсутствие в списке - то что там есть. Ну а так как добавить запись в такую таблиу можно, но корректировать ее невозможно, создай форму2 на таблицу1, выведи в нее одно поле для корректуры, затем поставь
на форму1 кнопку для открытия этой формы с выбором по значению. (через мастера). Скопируй что получилось в этой кнопке и вставь на (Свойство-события-двойное нажатие кнопки) поле со списком.
Далее подчиненная форма. Создай запрос в конструкторе из 2х таблиц. SELECT Таблица1.*, Таблица2.* FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.ПолеВсе = Таблица2.ПолеВсе1 WHERE (Forms![Форма таблицы 1]!ПолеСоСписком6='0' Or Таблица1!Код=Forms![Форма таблицы 1]!ПолеСоСписком6);
Скопируй то что тут есть и поставь в sql в построителе запросов. Увидишь.
Ну а потом точно так же задай условия для подмены источников данных для форм. критерием которых является поле со списком.
Для главной формы - запрос SELECT Таблица1.*, Таблица2.* FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.Код = Таблица2.Код WHERE (Forms![Форма таблицы 1]!ПолеСоСписком6='0' Or Таблица1!Код=Forms![Форма таблицы 1]!ПолеСоСписком6);
* - все поля, что бы не мучиться. Задаешь условия. Если ..., то такой источник, в остальных случаях... Все через if. Глянь в свойстве формы в загрузке.
Ну и для формы2 запрос в конструкторе SELECT Таблица1.*, Таблица2.* FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.Код = Таблица2.Код WHERE (Forms![Форма таблицы 1]!ПолеСоСписком6='0' Or Таблица1!Код=Forms![Форма таблицы 1]!ПолеСоСписком6);
Затем через if задаешь соответствующие условия какой источник строк в каких условиях. Посмотри в загрузке на форму2.
Теперь главное. А как связать эти формы? да выведи поле [Код], через которое завязаны таблицы, и задай значение по умолчанию в свойствах этого поля (Свойства-данные-Значения по умолчанию) вот это =[Forms]![Форма таблицы 1]![ПолеСоСписком6] Там только видим буквы, а на самом деле - счетчик. Код, ко которому завязаны таблицы. Оно же поиск.
Можно егосделать вручную, но это небольшая возня.
Все остальное добавляешь по вкусу. Понятно? | |
|
| |
|
|
|
| Goblin
Спасибо... Пока к сожалению непонятно совсем ничего... Несмотря на то, что работаю в Access достаточно долго, части кода понять не могу
Но я попробую разобраться
Может вы сможете что!нибудь посоветовать типа книжки какой-нибудь, в которой можно почитать что-нибудь про выражения в Access, что бы хотя юбы примерно понимать записи типа SELECT Таблица1.*, Таблица2.* FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.ПолеВсе = Таблица2.ПолеВсе1 WHERE (Forms![Форма таблицы 1]!ПолеСоСписком6='0' Or Таблица1!Код=Forms![Форма таблицы 1]!ПолеСоСписком6);
?????? | |
|
| |
|
|
|
| Для начала нужно перепахать HELP, причем желательно начать с А97 rus (где-то на этом сайте затерялась ссылка (а жаль!), или поищите в инете). Оттуда:
Инструкция SELECT
По этой инструкции ядро базы данных Microsoft Jet возвращает данные из базы данных в виде набора записей.
Синтаксис
SELECT [предикат] { * | таблица.* | [таблица.]поле_1
[AS псевдоним_2] [, [таблица.]поле_2 [AS псевдоним_2] [, ...]]}
FROM выражение [, ...] [IN внешняяБазаДанных]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
Ниже перечислены аргументы инструкции SELECT:
Элемент Описание
предикат Один из следующих предикатов отбора: ALL, DISTINCT, DISTINCTROW или TOP. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL.
* Указывает, что выбраны все поля заданной таблицы или таблиц.
таблица Имя таблицы, из которой должны быть отобраны записи.
поле_1, поле_2 Имена полей, из которых должны быть отобраны данные. Если включить несколько полей, они будут извлекаться в указанном порядке.
псевдоним_2, псевдоним_2 Имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице.
выражение Имена одной или нескольких таблиц, которые содержат отбираемые данные.
внешняяБазаДанных Имя базы данных, которая содержит таблицы, указанные с помощью аргумента выражение, если они не находятся в текущей базе данных.
Дополнительные сведения
При выполнении этой операции ядро базы данных Microsoft Jet находит указанную таблицу или таблицы, извлекает заданные столбцы, выделяет строки, соответствующие условию отбора, и сортирует или группирует результирующие строки в указанном порядке.
Инструкции SELECT не изменяют данные в базе данных.
Обычно слово SELECT является первым словом инструкции SQL. Большая часть инструкций SQL является инструкциями SELECT или SELECT...INTO.
Ниже приведен минимальный синтаксис инструкции SELECT:
SELECT поля FROM таблица
Для отбора всех полей таблицы можно использовать символ звездочки (*). Следующая инструкция отбирает все поля из таблицы "Сотрудники":
SELECT * FROM Сотрудники;
Если несколько таблиц, включенных в предложение FROM, содержат одноименные поля, перед именем такого поля следует ввести имя таблицы и оператор . (точка). Предположим, что поле "Отдел" содержится в таблицах "Сотрудники" и "Начальники". Следующая инструкция SQL отберет поле "Отдел" из таблицы "Сотрудники" и поле "Начальник" из таблицы "Начальники":
SELECT Сотрудники.Отдел, Начальники.Начальник
FROM Сотрудники INNER JOIN Начальники
WHERE Сотрудники.Отдел = Начальники.Отдел;
При создании объекта Recordset ядро базы данных Microsoft Jet использует имя поля таблицы в качестве имени объекта Field в объекте Recordset. Если требуется другое имя поля, или выражение, создающее поле, не определяет имя, используйте зарезервированное слово AS. В следующем примере заголовок "Рождение" становится именем объекта Field в результирующем объекте Recordset:
SELECT [Дата рождения]
AS Рождение FROM Сотрудники;
При работе со статистическими функциями или запросами, которые возвращают повторяющиеся имена объекта Field, используйте предложение AS для задания другого имени объекта Field. В следующем примере заголовок "Численность" задается для возвращаемого объекта Field результирующего объекта Recordset:
SELECT COUNT(КодСотрудника)
AS Численность FROM Сотрудники;
Для дальнейшего отбора и организации искомых данных в инструкцию SELECT можно добавлять многие другие предложения. Для получения более подробных сведений смотрите описания этих предложений.
|
| |
|
| |
|
|
|
| Анатолий дал хорошую научную раскладку. Я же просто (по просбе) описал технологию того, что делал. Проще говоря - делай запросы в конструкторе и вставляй в нужное место.
Открой пример, создай запрос. Только сразу переведи его в sql режим и скопируй туда
SELECT Таблица1.*, Таблица2.* FROM Таблица1 INNER JOIN Таблица2 ON Таблица1.ПолеВсе = Таблица2.ПолеВсе1 WHERE (Forms![Форма таблицы 1]!ПолеСоСписком6='0' Or Таблица1!Код=Forms![Форма таблицы 1]!ПолеСоСписком6);
Затем открой в режиме конструктора и посмотри что это такое. | |
|
| |
HiProg.com - Технологии программирования
|