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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Больной вопрос по полю со списком
 
 автор: Vlas   (16.04.2009 в 14:31)   личное сообщение
 
 

Ребята нужна помощь. Думаю вопрос легкий но я его никак победить не могу.
Проблема следующая:
Есть две таблицы Основная и Поставщики.
Есть форма Основная и подчиненная табличная (привязана к основной таблице).
Добавление записей происходит в табличной форме и начинается с ввода наименования поставщика. (поле со списком)
Задача, при начале ввода поставщика, должен вываливаться список в котором отображаются все поставщики имеющие данный набор букв в любой части наименования с возможностью их выбора из списка.
Попробовал решить эту проблемму следующим образом:

Me!Организация.RowSource = "SELECT Поставщик From Поставщики WHERE Поставщик LIKE ""*" & Me!Организация.Value & "*"""

Получилось, но при этом при введении нескольких букв необходимо выйти из поля и снова в него зайти, что не совсем удобно, вернее совсем не удобно.
Может подскажите как это можно решить по другому?
Заранее признателен

  Ответить  
 
 автор: Гамлет   (16.04.2009 в 14:44)   личное сообщение
17 Кб.
 
 

см.атач.

  Ответить  
 
 автор: Vlas   (16.04.2009 в 15:15)   личное сообщение
 
 

Спасибо за быстрый ответ, да на первый взгляд работает, но не ловит средину наименования, а необходимо, чтобы поиск был по любой части слова.

  Ответить  
 
 автор: Vlas   (16.04.2009 в 16:14)   личное сообщение
 
 

Большое спасибо, все получилось. Была техническая ошибка в формировании запроса

  Ответить  
 
 автор: Коровка   (19.05.2009 в 13:24)   личное сообщение
 
 

Здравствуйте!!! А вот еще, мне кажется, несложный вопрос на счет поля со списком. Сама никак не ммогу сообразить. В учебной базе "Борей" есть такая подчиненная форма заказов, где при выборе значения в поле со списком "Товары", автоматически заполняются все остальные поля табличной формы.
В моей базе табличнаяподчиненная форма составлена по таблице. Мне нужно сделать, что бы так же при выборе в поле со списком названия организации автоматически заполнялись все остальные поля, соответствующие этой организации. Данные эти, разумеется в самой таблице есть) Подскажите пожалуйста, как это сделать?

  Ответить  
 
 автор: Goblin   (19.05.2009 в 22:41)   личное сообщение
46 Кб.
 
 

Коровка, ты тему создай. По твоему вопросу очень похоже на поле со списком для поиска. Поставь в форму, через мастера укажи где искать и все.
2 вариант. Если в подчиненной форме все вываливается, то ищи в основной и через связанное поле вывалится все, что есть в подчиненной.
3 вариант уже показывал Леону. Сборная солянка с этого форрума. Пристегнул. (Новая инфа вводится прямо в поле со списком. 2 щелчка для корректуры) Но это не серьезно, видимо.

  Ответить  
 
 автор: Коровка   (26.05.2009 в 10:39)   личное сообщение
 
 

Спасибо за "сборную солянку"... Очень порадовало "Корректировать не****"
Но не совсем понятно, как все это сделано. Не могли бы вы описать поэтапно, как делается такая форма, как связываются поля? Связи между полем со списком и полем, которое заполняется после выбора какой-либо записи в поле со списком, нужно прописывать именно в коде, который написан для этого элемента (т.е. поля) или это можно сделать без вмешательства в код? Как связать поле со списком с формой, которая выводится при двойном щелчке мышью по записи в поле со списком?

  Ответить  
 
 автор: Goblin   (27.05.2009 в 21:55)   личное сообщение
 
 

Привет. Я уж думал что не заинтересовало. Описать поэтапно. Нравится мне этот сайт головолмками. Лучше кроссвордов. Ну держи. (Возможно что-нить упущу, не факт)
Созданы 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] Там только видим буквы, а на самом деле - счетчик. Код, ко которому завязаны таблицы. Оно же поиск.
Можно егосделать вручную, но это небольшая возня.
Все остальное добавляешь по вкусу. Понятно?

  Ответить  
 
 автор: Коровка   (17.06.2009 в 10:29)   личное сообщение
 
 

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);
??????

  Ответить  
 
 автор: Анатолий (Киев)   (17.06.2009 в 11:13)   личное сообщение
 
 

Для начала нужно перепахать 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 можно добавлять многие другие предложения. Для получения более подробных сведений смотрите описания этих предложений.

  Ответить  
 
 автор: Гоблин   (17.06.2009 в 22:13)   личное сообщение
 
 

Анатолий дал хорошую научную раскладку. Я же просто (по просбе) описал технологию того, что делал. Проще говоря - делай запросы в конструкторе и вставляй в нужное место.
Открой пример, создай запрос. Только сразу переведи его в 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 - Технологии программирования
Rambler's Top100 TopList