Как связать поля запроса и формы?

Автор andy_trotc, 1 июня 2016, 20:52

0 Пользователи и 1 гость просматривают эту тему.

andy_trotc

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

andy_trotc

Мне хотелось бы, чтобы при внесении в форму названия населенного пункта, который уже есть в таблице и в запросе, в поле формы "Код нп" автоматически попадал соответствующий этому населенному пункту буквенно-цифровой код из запроса. Возможно требуется использовать какой-то макрос или запрос? А может это вообще невозможно осуществить  средствами LO Base?

rami

Есть два варианта заполнения формы:
1. если данные имеются в базе, — раскрываем список и выбираем населенный пункт, код появляется автоматически. Жмём ENTER. (Проверяем запись в таблицу)

2. новые данные (нет в базе и в списке), — пишем название, жмём ENTER, пишем код, жмём ENTER. (Раскрываем список и видим новый населённый пункт, можно проверить запись в таблицу)

andy_trotc

Rami, понимаю, что огромное спасибо - это слишком много, поэтому сходил по ссылке в Вашей подписи ))
Во всяком случае, пинок я получил в нужном направлении ) 

rami

Цитата: andy_trotc от  6 июня 2016, 19:41Rami, понимаю, что огромное спасибо - это слишком много, поэтому сходил по ссылке в Вашей подписи ))
Спасибо :beer:

Hasim

rami, в таблице не должно быть повторяющихся строк (Сидоровка У12) - это грубая ошибка.
Возможно, там есть два населенных пункта Сидоровка, но с разными кодами.

rami

Цитата: Hasim от  7 июня 2016, 11:12в таблице не должно быть повторяющихся строк (Сидоровка У12) - это грубая ошибка.
С учётом автозаполнения первичного ключа полностью повторяющиеся строки невозможны.
Цитата: Hasim от  7 июня 2016, 11:12Возможно, там есть два населенных пункта Сидоровка, но с разными кодами.
Я не знаю что должно быть в реальной базе, автор вопроса урезал до минимума образец базы чтобы не отвлекать внимание от вопроса. Я ответил на вопрос как макросом заполнить поле соответствующими данными, если будут дополнительные вопросы, можно продолжить.

Hasim

Цитата: andy_trotc от  1 июня 2016, 18:52В таблице "Нас. пункты" встречаются повторяющиеся названия и соответствующие им буквенно-цифровые коды.
Из этой фразы ТС прямо следует, что есть повторяющиеся названия с разными кодами.

rami

Цитата: Hasim от  7 июня 2016, 14:35
Цитата: andy_trotc от  1 июня 2016, 18:52В таблице "Нас. пункты" встречаются повторяющиеся названия и соответствующие им буквенно-цифровые коды.
Из этой фразы ТС прямо следует, что есть повторяющиеся названия с разными кодами.
Я бы не сказал, что "прямо следует". Автору вопроса не нужно готовое решение, а нужен образец как решаются подобные задачи.

Но если вы хотите рассмотреть вариант где одному населённому пункту соответствуют несколько кодов (список выбора), нужно поле "кодНП" заменить на поле со списком. Вот такой вариант, может пригодится кому.

andy_trotc

#9
Попробовал скопировать этот макрос в свою базу, в одном случае работает, в другом — нет. Для начала прочел бегло 500 страниц Питоньяка, но ответов не нашел.

Sub Main(ev)
DB=ThisComponent.Parent.DataSource.getConnection("","")
Statement=DB.createStatement()
zapros="SELECT ""MyColumn""    REM допустимо ли такое название столбца таблицы: «My)Column», т. е. с круглой скобкой?
FROM ""MyTable""                          REM допустимо ли такое имя таблицы: «My Table», т. е. с пробелом в названии?
WHERE ""MyColumn""='" & ev.Source.Text & "'"  REM что такое ev.Source? Поиск выдает сайты электромобилей
oResult=Statement.executeQuery(zapros)
If Not IsNull(oResult) And Not IsEmpty(oResult) Then
If oResult.Next Then s=oResult.getString(1)  REM что означает цифра «1» в скобках?
End If
ev.Source.Context.Controls(3).Text=s  REM что означает цифра «3» в скобках?
DB.Close()
End Sub


Где еще почитать?

rami

Цитироватьдопустимо ли такое название столбца таблицы: «My)Column», т. е. с круглой скобкой?
Цитироватьдопустимо ли такое имя таблицы: «My Table», т. е. с пробелом в названии?
Я стараюсь использовать сокращённые слова состоящие из букв и цифр без пробелов (без спецсимволов), хотя на пробелы и скобки база не ругается.
Цитироватьчто такое ev.Source? Поиск выдает сайты электромобилей
Поиск смотрит в будущее ;D
ev сокращение от слова event — событие — это параметр переданный событием (изменение содержимого элемента управления) в макрос, ev.Source это свойство Source переменной ev. Фактически ev.Source это элемент запустивший макрос, ev.Source.Text это текст записанный в элементе управления.
ЦитироватьIf oResult.Next Then s=oResult.getString(1)  REM что означает цифра «1» в скобках?
Цитироватьev.Source.Context.Controls(3).Text=s  REM что означает цифра «3» в скобках?
Цифра в скобках означает номер элемента в массиве, в первом случае массив поиска, во втором массив элементов управления.
Цитата: andy_trotc от 16 июня 2016, 15:15Попробовал скопировать этот макрос в свою базу, в одном случае работает, в другом — нет.
В моём примере номер элемента управления 3 (второе поле со списком), но если в новой базе (форме) другие элементы, нужно вносить соответствующие изменения в макрос.
Цитата: andy_trotc от 16 июня 2016, 15:15Где еще почитать?
Кроме Питоньяка — форумы (как наш, только на других языках с Гуглом) и документация

andy_trotc

Благодарю! Пошел курить документацию  ??? Но я еще вернусь, обязательно  :D