Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - Microsoft Access 2000, помогите решить проблему!

Ответить
Настройки темы
Прочие БД - Microsoft Access 2000, помогите решить проблему!

Аватара для LiXiQing

Пользователь


Сообщения: 68
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Существует таблица содержащая три поля: КОД (ключевое поле), ПОНЯТИЕ (adVarWChar), ТОЛКОВАНИЕ (adVarWChar).

в ListBox находящийся во всплывающей форме FORM1 требуется поместить только повторяющиеся элементы поля ПОНЯТИЕ и соответствующие им значения в поле ТОЛКОВАНИЕ, сортировка по полю КОД, которое не должно отображаться в ListBox.
И это еще цветочки!
Хотелось бы, чтобы в ListBox'е было бы три колонки, одна для ПОНЯТИЕ, вторая ТОЛКОВАНИЕ, а третья указывала бы состояние, которое с помощью группы переключателей задает пользователь. В группе три переключателя: + (объединить две текущую и корневую строки в одну), - (удалить текущую строку) и 0 оставить без изменений. Четвертый вариант: пустая ячейка обозначающая корневую строку с которой пользователь ничего сделать не может.
Хотелось бы, чтобы в правой крайней колонке динамически(!) отображались бы выбранные пользователем действия для данной повторяющейся строки. Например:

ПОНЯТИЕ ТОЛКОВАНИЕ СОСТОЯНИЕ
-------------------------------------
ДУРАК |Стакан (турецк.) | | (корневая строка)
ДУРАК |Глупый человек | 0 | (пользователь оставил эту строку без изменений
ДУРАК |Карточная игра | - | (эту строку он захотел удалить)
ДУРАК |Придворный шут | + | (эту слить с корневой)
НОСОК |Перед ступни | | (корневая строка)
НОСОК |Элемент одежды | - | (эту строку пользователь захотел удалить)
-------------------------------------

и т.д.
Я знаю, что проще было бы организовать новую таблицу с которой и работать через LisBox, а потом ее удалить изменив данные в таблице источнике, но это некрасиво, да и говорят, что при коллективном доступе будут возникать ошибки и некорректное отображение данных.
Вариант с Value List (RowSourceType) тоже не проходит: данных очень много от 700 строк до 2000, и когда строка RowSource переполняется (на моем компьютере это 56кбайт) возникает ошибка runtime error 2176 "Слишком болшое значение для заданного свойства".
Как решить задачу изящно и без багов?

Отправлено: 23:31, 11-12-2007

 

Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


Цитата LiXiQing:
Я знаю, что проще было бы организовать новую таблицу с которой и работать через LisBox, а потом ее удалить изменив данные в таблице источнике, но это некрасиво, да и говорят, что при коллективном доступе будут возникать ошибки и некорректное отображение данных. »
С какого перепугу это не красиво?
Это наоборот правильно и единственно верно в многопользовательской среде, иначе куча пользователей нафиг заблокируют
вашу таблицу.

Гм. я с Access как с базой никогда не работал, обычно использовал его как генератор консолидированных отчетов для MS SQL.
Пара вопросов, по текущему состоянию дел в MS Access:
- там временные таблицы существуют?
- View?

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

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий


Отправлено: 09:43, 14-12-2007 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для LiXiQing

Пользователь


Сообщения: 68
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата kim-aa:
- там временные таблицы существуют?
- View? »
Да объекты типа view есть, насчет временных таблиц не знаю, я вообще за Access за DB взялся недавно, месяца не прошло. У меня есть пара мануалов для чайников, но читать их с начала и до конца терпения не хватает, к тому же я что-то не уверен, что там есть такие тонкости. Почитаю про view в хэлпе по VB. Организую какую нибудь временную adox коллекцию, что-то должно быть кроме таблиц и списка значений в качестве источника строк. Буду искать. Спасибо за указанное направление.

И еще я знаю как указать вывод всех значений SELECT ALL, знаю как отсечь повторяющиеся SELECT DISTINCT, но вот как выбрать только повторяющиеся элементы? Нет, я могу решить эту задачку в VB модуле, но как ее решить через sql запрос, вот в чем вопрос!

Отправлено: 12:21, 14-12-2007 | #3


Аватара для kim-aa

Назгул


Сообщения: 2633
Благодарности: 345

Профиль | Отправить PM | Цитировать


В MS SQL 6.x это было бы так

SELECT понятие, COUNT(*)
FROM таблица
GROUP BY понятие
HAVING COUNT(*)>1

-------
Мы овладеваем более высоким стилем спора. Спор без фактов. Спор на темпераменте. Спор, переходящий от голословного утверждения на личность партнера. (c)Жванецкий

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:20, 14-12-2007 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата kim-aa:
С какого перепугу это не красиво?
Это наоборот правильно и единственно верно в многопользовательской среде, иначе куча пользователей нафиг заблокируют
вашу таблицу. »
Ну, чтобы прям "единственно" верно - не соглашусь. Верный, но не единственный же.

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

Но если так уж требуется именно пакетная обработка всего словаря сразу, а не понятия за понятием - то создать временно дополнительную таблицу программно, причем свою для каждого пользователя, а процесс применения изменений объединить с процессом удаления этой таблицы в одну транзакцию.

Отправлено: 21:01, 02-02-2008 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - Microsoft Access 2000, помогите решить проблему!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
BSOD - помогите решить проблему... Necessary Хочу все знать 3 28-07-2008 14:47
Помогите решить проблему shron Сетевые технологии 2 05-08-2007 02:11
Помогите решить проблему. vint29 Материнские платы и память 14 22-01-2007 19:07
[решено] Как решить проблему в win 2000? Rusman Microsoft Windows NT/2000/2003 4 31-08-2006 10:20
Помогите решить проблему!!!! Guest Сетевые технологии 1 14-10-2004 23:46




 
Переход