Microsoft Access 2000, помогите решить проблему!
Существует таблица содержащая три поля: КОД (ключевое поле), ПОНЯТИЕ (adVarWChar), ТОЛКОВАНИЕ (adVarWChar).
в ListBox находящийся во всплывающей форме FORM1 требуется поместить только повторяющиеся элементы поля ПОНЯТИЕ и соответствующие им значения в поле ТОЛКОВАНИЕ, сортировка по полю КОД, которое не должно отображаться в ListBox. И это еще цветочки! Хотелось бы, чтобы в ListBox'е было бы три колонки, одна для ПОНЯТИЕ, вторая ТОЛКОВАНИЕ, а третья указывала бы состояние, которое с помощью группы переключателей задает пользователь. В группе три переключателя: + (объединить две текущую и корневую строки в одну), - (удалить текущую строку) и 0 оставить без изменений. Четвертый вариант: пустая ячейка обозначающая корневую строку с которой пользователь ничего сделать не может. Хотелось бы, чтобы в правой крайней колонке динамически(!) отображались бы выбранные пользователем действия для данной повторяющейся строки. Например: ПОНЯТИЕ ТОЛКОВАНИЕ СОСТОЯНИЕ ------------------------------------- ДУРАК |Стакан (турецк.) | | (корневая строка) ДУРАК |Глупый человек | 0 | (пользователь оставил эту строку без изменений ДУРАК |Карточная игра | - | (эту строку он захотел удалить) ДУРАК |Придворный шут | + | (эту слить с корневой) НОСОК |Перед ступни | | (корневая строка) НОСОК |Элемент одежды | - | (эту строку пользователь захотел удалить) ------------------------------------- и т.д. Я знаю, что проще было бы организовать новую таблицу с которой и работать через LisBox, а потом ее удалить изменив данные в таблице источнике, но это некрасиво, да и говорят, что при коллективном доступе будут возникать ошибки и некорректное отображение данных. Вариант с Value List (RowSourceType) тоже не проходит: данных очень много от 700 строк до 2000, и когда строка RowSource переполняется (на моем компьютере это 56кбайт) возникает ошибка runtime error 2176 "Слишком болшое значение для заданного свойства". Как решить задачу изящно и без багов? |
Цитата:
Это наоборот правильно и единственно верно в многопользовательской среде, иначе куча пользователей нафиг заблокируют вашу таблицу. Гм. я с Access как с базой никогда не работал, обычно использовал его как генератор консолидированных отчетов для MS SQL. Пара вопросов, по текущему состоянию дел в MS Access: - там временные таблицы существуют? - View? Вобще с точки зрения платформенной независимости приложения и разделения данных, правильно решать данную задачу через временные таблицы. |
Цитата:
И еще я знаю как указать вывод всех значений SELECT ALL, знаю как отсечь повторяющиеся SELECT DISTINCT, но вот как выбрать только повторяющиеся элементы? Нет, я могу решить эту задачку в VB модуле, но как ее решить через sql запрос, вот в чем вопрос! |
В MS SQL 6.x это было бы так
SELECT понятие, COUNT(*) FROM таблица GROUP BY понятие HAVING COUNT(*)>1 |
Цитата:
Как вариант, можно создать форму для отображения таблицы, а в ней - свободные (т.е. не ссылающиеся ни на какое конкретное поле данных) элементы, изменения которых обрабатывать сразу как были сделаны. Еще разумней - по двойному щелчку на понятии открыть отдельную диалоговую форму, в которой только одно понятие со всеми его толкованиями отобразить, дать пользователю возможность изменить что хочет, просмотреть результат и принять окончательное решение сохранять ли такие изменения или откатить к исходному состоянию. Но если так уж требуется именно пакетная обработка всего словаря сразу, а не понятия за понятием - то создать временно дополнительную таблицу программно, причем свою для каждого пользователя, а процесс применения изменений объединить с процессом удаления этой таблицы в одну транзакцию. |
Время: 23:24. |
Время: 23:24.
© OSzone.net 2001-