powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Счетчик + поле со списком = фигня
11 сообщений из 11, страница 1 из 1
Счетчик + поле со списком = фигня
    #32691101
Фотография andrey137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые Господа!!! Подскажите как побороть такую пакостную заковыку:

Упрощенно: есть две таблицы ТОВАР и ПРОИЗВОДИТЕЛЬ в производителе ключевое поле - счетчик [производитель_id].
Создал форму для просмотра/ввода данных о товаре. В числе этих данных и производитель с его названием, телефоном и т.д.

Для упрощения ввода данных помимо полей в которых размещены данные о производителе вставил в форму поле со списком в котором отображаются все производители.

Что бы пользователь ПРИ ВВОДЕ нового товара мог выбрать производителя из числа уже введенных.

Это -то и не работает: для УЖЕ ВВЕДЕННОГО товара все ок - меняешь производителя в поле со списком (в нем присоединенный столбец [ПРОИЗВОДИТЕЛЬ].[производитель_id] он привязан к [ТОВАР].[производитель_id]) - меняется значение в [ТОВАР].[производитель_id] и все отлично!

НО!

Когда вводится новая запись, счетчку автоматом присваивается новое значение, оно же автоматом появляется в поле [ТОВАР].[производитель_id] а при попытке выбрать введенного ранее производителя возникает ругательство:

"Текущее поле должно совпадать с ключем связи [ПРОИЗВОДИТЕЛЬ].[производитель_id] в таблице со стороны 'один' отношения 'один-ко-многим'. Введите на стороне 'один' запись с требуемым значением ключа связи, а затем создайте запись с тем же значением ключа в таблице на стороне 'только многие'"

1. Можно ли побороть эту бяку не меняя (интер)фейса формы.
2. Что вообще происходит?

Заранее благодарен за ответ / С уважением, Андрей!
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32691288
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- Структура таблиц где?
Или мы угадать должны, чего вы там нахимичили?
- Добавление новой записи в какую таблицу?
- На основе какого запроса(таблицы) построена форма для ввода? (текст запроса, плиз)
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32691703
Фотография andrey137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok!

В самом деле речь идет о базе сертификатов на товары. В сертификации участвуют 3 организации: орган по сертификации(агентство), производитель товара и владелец сертификата.
Соответственно, имеются 4 таблицы CERTIF_TBL, AGENCY_TBL, OWNER_TBL, CERTIF_TBL.
Структуру базы данных я приложил ниже.


Новая запись добавляется не в таблицу, а в запрос основанный на всех 4 таблицах, т.е. предполагается ввод информации о сертификате и об организациях его выдавших на одной форме.

Уникальных производителей(а равно агентств и владельцев) гораздо меньше чем сертификатов на их товары.
Поэтому хочется что бы при вводе сертификата на товар N, если его производитель был уже введен в базу при вводе другого сертификата производителя не пришлось бы забивать пальца'ми еще раз.
А можно было выбрать из списка прежде введенных.

Вот, так же, запрос на основе которого построена форма:
Код: plaintext
1.
2.
3.
4.
5.
SELECT CERTIF_TBL.*, AGENCY_TBL.*, MANUFACT_TBL.*, OWNER_TBL.*,
FROM OWNER_TBL INNER JOIN (MANUFACT_TBL INNER JOIN 
(AGENCY_TBL INNER JOIN CERTIF_TBL ON
AGENCY_TBL.AGENCY_ID = CERTIF_TBL.AGENCY_ID) ON
MANUFACT_TBL.MANUFACT_ID = CERTIF_TBL.MANUFACT_ID) ON
OWNER_TBL.OWNER_ID = CERTIF_TBL.OWNER_ID;

Надеюсь теперь все ясно. :-)
С уважением, Андрей!
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32691718
Фотография andrey137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу, блин, все пепепутал
таблицы

CERTIF_TBL - данные о сертификате
AGENCY_TBL - об агентстве
MANUFACT_TBL - о производителе
OWNER_TBL - о владельце

впрочем, это ясно из рисунка и запроса.
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32691775
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж больно у тебя наворечено :(

Может сделать форму на основе только таблицы CERTIF_TBL
На форме окромя ее полей еще будет 3 комбика
Возможно, также поля (свободные - точнее привязанные к комбику; типа =ComboAgency.Column(2), =ComboAgency.Column(3), ...) для просмотра информации по организации
И рядом 3 кнопки - "добавить новую организацию", которые открывают 3 разных формы на добавление записей в соответсвующие таблички
Т.к. организаций меньше, чем товаров, то и эти функции будут использоваться не очень часто (в сравнении с операцией добавления/изменения товара)

Нажал кнопку --> добавил организацию --> Закрыл форму --> обновил комбик (ComboAgency.ReQuery) --> можешь выбирать добавленную организацию

Это как предложение

А то у тебя 4 таблички в одном запросе и как себя должен вести запрос при попытке добавления в него записи не совсем понятно
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32691839
Фотография andrey137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, как неохота все переделывать ;-)
но это я подумаю еще...

Но, главное!
Все-таки не понятно что происходит!

Просматриваю и редактирую запись - выбрал в комбобоксе другое агентство (т.е. выбрал другое значение [AGENCY_TBL].[AGENCY_ID]) - при этом, грубо говоря, в таблице [CERTIF_TBL] в соответствующей строке поменялся [CERTIF_TBL].[AGENCY_ID] и соответственно все данные об агентстве.

А при создании новой записи в полях [AGENCY_TBL].[AGENCY_ID] и [CERTIF_TBL].[AGENCY_ID] возникает новое значение счетчика и ХРЕН ИХ ПОМЕНЯЕШЬ комбобоксом в ручную!!!

Что за ботва?!

(Для полной ясности аттачу форму)
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32692012
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты свой запрос в виде таблицы открой!

У тебя в конце будет запись со звездочкой - типа сюда вставляется новая запись и у четырех полей будет написано "(счетчик)" - как ты думаешь что там повится при попытке добавления записи в такой запрос?
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32692810
Фотография andrey137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Происходит совсем другая ошибка!
"В таблице ... ядром бд MS Jet не найдены записи с совпадающим ключевым полем ..."
Т.к. счетчики и соответствующие им внешние ключи остаются пустыми при вводе в режиме таблицы!

ПРИ ВВОДЕ В РЕЖИМЕ ФОРМЫ ПОЛЯ СЧЕТЧИКА ЗАПОЛНЯЮТСЯ АВТОМАТОМ, НА ЗНАЧЕНИЕ СЛЕДУЮЩЕЕ ЗА УЖЕ ВВЕДЕННЫМ. Все как положено!

При вводе новой записи если не прибегать к комбо-боксу все работает отлично!

Поэтому, уважаемый paparome , Вашего замечания я не понял!

А при использовании комбо бокса не работает!
Этого я тоже не понял!
Мож кто знает а!?
Совсем замучался я...
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32692816
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andrey137НО!

Когда вводится новая запись, счетчку автоматом присваивается новое значение, оно же автоматом появляется в поле [ТОВАР].[производитель_id]
О каких двух полях речь? Где они на схеме?

Если речь о счетчике таблицы CERTIF_TBL, то он не должен больше нигде "появляться автоматом". А если о счетчике одной из малых таблиц, то там вообще не должна появляться новая запись.
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32692872
Фотография andrey137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УРА, ТОВАРИЩИ!!!

Ниже вы можете лицезреть ответ который я долго вымучивал, будучи в отчаянии от всеобщего непонимания!
Настолько мучительно, что для очистки совести решил создать описанную ниже базу данных... и... О, боже!...
Убедился что глюка-то описанного мною и нет!!!
Усложнил ситуацию, добавил еще пару таблиц аналогичных таблице ПРОИЗВОДИТЕЛЬ.
Все-равно работает!

Короче выяснилось - глюк в том, что у меня в полях ПРОИЗВОДИТЕЛЬ_НАЗВАНИЕ и налогичных ему стояло по умолчанию "значение будет введено позднее"!

Если ничего не вводить по умолчанию и не редактировать поля ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_НАЗВАНИЕ, ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_АДРЕС И Т.Д. и воспользоваться комбо-боксом, то все работает!

Но вот если эти поля поредактировать, а потом использовать комбо-бокс, то хана.
ВОЗНИКАЕТ ОПИСАННАЯ НИЖЕ ОШИБКА!!!

Почему, правда, по-прежнему непонятно!?

=================================================
ВС! paparome!

Все я окончательно всех запутал!

Сколько раз замечал чем больше пишешь тем непонятнее становится!

Еще раз.
Упрощенная модельная ситуация.
Две таблицы ТОВАР, ПРОИЗВОДИТЕЛЬ
Связаны INNER JOIN по полю ПРОИЗВОДИТЕЛЬ_ID.
Поле ПРОИЗВОДИТЕЛЬ_ID в таблице ПРОИЗВОДИТЕЛЬ ключевое, счетчик.
Это все, относительно схемы БД.

Есть форма.
Форма для ввода/просмотра/редактирования данных от товаре и его производителе "в одном окошке"!
Основана она на запросе:

Код: plaintext
1.
SELECT ТОВАР.*, ПРОИЗВОДИТЕЛЬ.*
FROM ПРОИЗВОДИТЕЛЬ INNER JOIN ТОВАР ON ТОВАР.ПРОИЗВОДИТЕЛЬ_ID = ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_ID;

В форму вставлено поле со списком.
Основанно оно на запросе:

Код: plaintext
1.
SELECT ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_ID, ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_НАЗВАНИЕ, ...
FROM ПРОИЗВОДИТЕЛЬ;

В свойстве "данные" этого поля со списком стоит:

ТОВАР.ПРОИЗВОДИТЕЛЬ_ID

Присоединенный столбец 1, т.е. ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_ID.


ИТАК:

Когда в форму я ввожу новый товар и заполняю поля касающиеся как товара так и производителя (а именно: поля ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_НАЗВАНИЕ, ПРОИЗВОДИТЕЛЬ.ПРОИЗВОДИТЕЛЬ_АДРЕС И Т.Д.)
все работает великолепно!

СРАЗУ СОЗДАЮТСЯ ДВЕ ЗАПИСИ ОДНА В ТАБЛИЦЕ ТОВАР, ДРУГАЯ В ТАБЛИЦЕ ПРОИЗВОДИТЕЛЬ, СВЯЗАННЫЕ ПО НОВОМУ АВТОМАТОМ СФОРМИРОВАННОМУ ЗНАЧЕНИЮ СЧЕТЧИКА ПРОИЗВОДИТЕЛЬ_ID.

А КОГДА Я ПЫТАЮСЬ ПРИ ВВОДЕ НОВОЙ ЗАПИСИ ВЫБРАТЬ ПРОИЗВОДИТЕЛЯ В ПОЛЕ СО СПИСКОМ ИЗ ЧИСЛА ПРЕЖДЕ ВВЕДЕННЫХ - ВОЗНИКАЕТ ОШИБКА!!!!!

ОШИБКА:

"Текущее поле должно совпадать с ключем связи [ПРОИЗВОДИТЕЛЬ].[производитель_id] в таблице со стороны 'один' отношения 'один-ко-многим'. Введите на стороне 'один' запись с требуемым значением ключа связи, а затем создайте запись с тем же значением ключа в таблице на стороне 'только многие'"

1. что происходит?
2. что делать?

В любом случае!
Уважаемые ВС, paparome и все остальные, Большое спасибо что отвечаете!
...
Рейтинг: 0 / 0
Счетчик + поле со списком = фигня
    #32692874
Фотография andrey137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И если вообще все поля касающиеся таблицы ПРОИЗВОДИТЕЛЬ оставить пустыми и комбо бокс не трогать - тоже ругается (после Form_BeforeUpdate)
ВОТЪ!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Счетчик + поле со списком = фигня
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]