Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > HELP


Автор: IvanLis 20.6.2006, 11:59
При создании БД столкнулся с ограничением числа полей в таблице.
Мне нужно сделать около 350 полей....
таблица будет содержать около 700 записей

Посоветуйте, что можно сделать 

Автор: Akina 20.6.2006, 13:01
Наличие такого количества полей в таблице обычно говорит о неправильном проектировании базы.

Экстенсивные методы обхода проблемы:
  • Разделение на несколько таблиц, связанных 1:1
  • Упаковка данных в структуры
 

Автор: IvanLis 20.6.2006, 13:59
Для того, чтобы связать 1-1.
Нужно опять таки сделать 350 полей....

Можно о структурах поподробнее.... 

Автор: skyboy 20.6.2006, 14:20
Цитата(Akina @  20.6.2006,  13:01 Найти цитируемый пост)
Экстенсивные методы обхода проблемы:

соотвественно, интеснивный метод решения проблемы - разделение на две таблицы со связями 1:N.
Скажи пару слов о структуре. Сдаётся мне, что Akina прав и у тебя, IvanLis, проблемы со структурой  

Автор: IvanLis 20.6.2006, 14:37
А какое максимально кол-во полей можно сделать?

а структура....

есть 30 групп людей в каждой из которых 10-30 человек
каждый из них описывается 157 характеристиками (которые разбиты на 4 раздела)

каждая характеристика имеет свой "вес"-коэф-т

потом на основании этих характеристик и весов вычисляется обобщенная характеристика каждого человека и группы 
 

Автор: skyboy 20.6.2006, 15:00
IvanLis, проблема в чём? В создании таблицы с таким большим количеством полей? Или в сложности формирования запросов при такомколичестве полей? 

Автор: IvanLis 20.6.2006, 15:09
В создании таблицы....
и связи показателя с его весом 

Автор: skyboy 20.6.2006, 15:13
дык, вынеси все характеристики в отдельную таблицу:
id_человека
id_характеристики
значение_характеристики
и ещё таблица:
id_характеристики
вес_характеристики
название_характеристики
 

Автор: IvanLis 20.6.2006, 15:18
спасибо...
попробую, сообщу результаты 

Автор: Akina 20.6.2006, 21:43
Типичная задача построения связи многие-ко-многим. Следовательно, промежуточная таблица. 

Автор: IvanLis 21.6.2006, 07:55
Все заработало.... СПАСИБО

А подскажите еще....

задача 
Есть таблица 1...
id_Группы
Описание группы


Есть таблица 2...
id_Человека
id_Группы
Описание человека


На форме id_Группы  представлен как выпадающий список
??? как сделать, что бы в поле при смене id_Группы менялось ее описание???

??? а потом  вывести всех людей относящихся к этой группе в подчиненной форме в виде ленточного списка???

все это желательно чтоб работало на одной форме!
это обязательно делать через подчиненные формы?

делаю через запрос...
запрос работает (когда в разных формах), а когда размещаю на одной.... обновления не происходит!  

Автор: Akina 21.6.2006, 09:13
Цитата(IvanLis @  21.6.2006,  08:55 Найти цитируемый пост)
это обязательно делать через подчиненные формы?

Нет, можно и без подчиненных. Но через подчиненные проще. Кода создавать меньше. Правда, полученная конструкция более костна.

Что касается остального - на форуме все это есть, и не по одному разу. Озаботьтесь поиском. 

Автор: IvanLis 23.6.2006, 08:20
Все получилось, чтолько возникла проблемма с построением запроса..... 

Автор: IvanLis 23.6.2006, 11:11
Со структурой разобрался, все работает!
Теперь проблемма такова! Не получается сделать запос...

Имеем таблицу Значения показателей в ней поля:
id_показателя
id_человека
Значение показателя


??? Необходимо выбрать Значение показателя по id_показателя   и  id_человека и отобразить его в Поле изначально заложено, что такой показатель всего один!

Для списка все работает....

Код

SELECT [Значения показателей].[Значение показателя]
FROM ( SELECT [Значения показателей].[id_показателя], [Значения показателей].[id_человека], [Значения показателей].[Значение показателя]
FROM [Значения показателей]
WHERE ((([Значения показателей].[id_показателя])=выбор_показателя) AND (([Значения показателей].[id_человека])=выбор_человека)));


Если делать запрос для Поля то пишет #Имя?... (но это и понятно почему)

Что мне делать???
Зараннее СПАСИБО!  

Автор: skyboy 23.6.2006, 11:25
не понял. если надо просто значения параметра, почему делать так
Код

SELECT [Значения показателей].[Значение показателя]
FROM ( SELECT [Значения показателей].[id_показателя], [Значения показателей].[id_человека], [Значения показателей].[Значение показателя]
FROM [Значения показателей]
WHERE ((([Значения показателей].[id_показателя])=выбор_показателя) AND (([Значения показателей].[id_человека])=выбор_человека)));

а не так:
Код

SELECT [Значения показателей].[Значение показателя]
FROM [Значения показателей]
WHERE (([Значения показателей].[id_показателя])=выбор_показателя) AND (([Значения показателей].[id_человека])=выбор_человека));

Автор: IvanLis 23.6.2006, 12:09
Цитата(skyboy @ 23.6.2006,  11:25)
не понял. если надо просто значения параметра, почему делать так, а не так:
Код

SELECT [Значения показателей].[Значение показателя]
FROM [Значения показателей]
WHERE (([Значения показателей].[id_показателя])=выбор_показателя) AND (([Значения показателей].[id_человека])=выбор_человека));
?

Этот код работает тоже только со списком....
А мне надо вернуть значение показателя в Поле

Хотя и значение всего одно, но структура подразумевает несколько значений показателя....
Значит из всего списка, который является результатом запроса, надо взять одно значение.
Я так пологаю... надо брать первое, только с First у меня ничего не получилось

??? Как это сделать? 

Автор: Akina 23.6.2006, 14:55
Цитата(IvanLis @  23.6.2006,  13:09 Найти цитируемый пост)
мне надо вернуть значение показателя в Поле

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

Автор: IvanLis 23.6.2006, 15:22
Но можно же из этого списка выдернуть значение....
В этом же запросе???

Тогда запрос будет возвращать ЗНАЧЕНИЕ а не СПИСОК! 

Автор: Akina 23.6.2006, 15:36
Цитата(IvanLis @  23.6.2006,  16:22 Найти цитируемый пост)
Тогда запрос будет возвращать ЗНАЧЕНИЕ а не СПИСОК!  

Запрос всегда возвращает набор записей. ВСЕГДА. Так что получи этот набор в рекордсет и оттуда уже тащи значения. 

Автор: IvanLis 23.6.2006, 16:00
А как это сделать?
Напишите примерчик.... 

Автор: skyboy 23.6.2006, 16:53
Akina, это зависит от СУБД - "понимает" она, когда ей дают явное значение, или нет. Например, в MySQL проходит следующее:
Код

SELECT * FROM table1 WHERE somefield= (SELECT min(somefield) FROM table2)

Т.е. парсер по использованию min определяет, что запись только одна, и можно применять оператор сравнения "=", а не только вхождения "in". Может, такой оборот заработает и в Access? Жаль, нет под рукой, чтоб проверить.

IvanLis, ты знаешь, где находятся персональные сообщения?
 

Автор: Akina 25.6.2006, 15:14
Цитата(skyboy @  23.6.2006,  17:53 Найти цитируемый пост)
Может, такой оборот заработает и в Access? 

Нет. 

Автор: IvanLis 2.7.2006, 02:43
Сделал, но не так как хотелось бы....
Все через ж.....!
Если есть идеи подскажите.

Еще один вопрос....
При смене значения СПИСКА.... приходиться нажимать F9
тогда при обновлении формы все работает....
??? Как сделать, что бы обновление основной формы и всех подчиненных происходило при изменении положения в списке ???
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)