|
|
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Необходимо добавить в форму возможность групповой обработки записей: отметить нужные -> проделать с ними операцию -> снять выделение. Добавить в таблицу логическое поле, чтоб в нём отмечать выделение - не проблема. Дело в том, что пользователей много и если один отметил записи 1 и 2, а другой - 3 и 4, то запрос с условием Выделено = True обработает все 4 записи, а это не есть гут. Добавить не привязанный к таблице флажок (вроде на форуме rusimport был примерчик с добавлением в лент.форму свободного "флажка) тоже не решение: дрожание изображения при каждом изменении флажков на медленных компьютерах слишком заметно. Никто не решал нечто похожее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 12:05 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
вариант номер раз - локальные таблицы. туда качаешь все данные, там и отмечаешь. безо всяких многопользовательских конфликтов. вариант номер два - выделение с помощью листбокса со множественным выделением. вариант номер три - некий мутант. пользователь выделяет нужную запись, жмет кнопку - запись (ID-шник) переносится в локальную таблицу/запоминается в памяти. и выбранные записи отображаются в отдельной подформочке/списке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 14:48 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Вариант 3 - это, точно, для мутантов. Вариант 2 - малоосуществим из-за особенностей программы. Остаётся вариант 1. Только боюсь это заметно на задержке скажется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 15:48 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Ну уж не знаю насколько вариант 3 для мутантов. Он (вариант) сам мутант :) Пользователь просматривает всю таблицу (серверную), по даблклику или по кнопке тукущая запись переносится в списочек. В куче программ всречается список слева (доступные для выбора) - список справа (выбранные) - кнопки переноса туда-сюда. Ну а у тебя левый список будет таблицей. Разве что при большом количестве выбранных записей со списком становится неудобно работать. Ну и с точки зрения интерфейса кривовато :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 16:24 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Драсте... Подобную (почти) задачу решил другим вариантом: Есть временная локальная таблица, содержащая два поля - ID(тип соответствует типу ключевого поля "основной" таблицы) и Mark(логический), хотя, можно обойтись и одним ID (у меня задача была несколько путанней, поэтому во временной использовалось много больше полей). Временная таблица - пустая, т.е. перед открытием формы нужно ее чистить. Далее, запрос, предоставляющий данные для формы содержит объединение "основной" и временной таблиц. Заполняя поле во временной таблице, вы фактически добавляете в нее новую запись... Ну а дальше понятно. ДА! Маленький "минус"... Набор должен быть несогласованным... Мне сначало было страшно, но потом ничего... привык :) Плюсов при этом достаточно много: - достижение поставленной задачи; - никаких "сливаний" во временные таблицы; - никаких лишних данных (тока временно временные:); - абсолютно естественная дальнейшая обработка средствами SQL; - ну может еще чего... з.ы. не бейте сильно... сами мы не местные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 20:46 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Далее, запрос, предоставляющий данные для формы содержит объединение "основной" и временной таблиц. Заполняя поле во временной таблице, вы фактически добавляете в нее новую запись... Ну а дальше понятно. Непонятно прям тут, а не дальше: Если времянка изначально пустая, то как в неё данные попадают? Кто заполняет поле во временной таблице? Если пустую таблицу объединить с основной, чего получится? Не, как раньше говорили на партсобраниях, обсуждая "аморалку": "Подробности давай!". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 21:55 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю: Данные попадают при клике по записи. При объединении получатся данные из основной таблицы, но с ключами, взятыми из временной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 22:26 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Да, Владимир Саныч прав. Поле из временной таблицы надо отобразить в форме и при вводе Пользователем в нее данных (например при отметке чекбокса) во временную таблицу автоматически добавляются данные... Единственное, что я упустил, это то, что связь "основной" таблицы со "временной" (пустой в момент открытия формы) должна быть "правой", т.е. все записи из основной таблицы и только те из временной, которые соответствуют основной... Теперь вроде (и самому) понятней :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 23:12 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Нуфвсе записи из основной таблицы и только те из временной, которые соответствуют основной А не наоборот ли? Я как раз понял наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 23:15 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Значит я плохо объяснил :) Открытие формы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Пользователь отметил Укроп, что приводит к добавлению записи во врем.табл: Код: plaintext 1. 2. 3. 4. 5. 6. Чтобы этого добиться, в наборе должны отображаться все записи из основной и только те из временной, которые совпадают с основной. Важно, чтобы набор был не согласованным, без чего запись во временную таблицу просто не будет добавляться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2003, 23:42 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Да, Нуф, твое решение надо на бумаге распечатать и в томик Гетца вложить. Дабы не забывать про него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 00:06 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
А, нет, тогда все в порядке. Я имел в виду, что наоборот должно быть на более позднем этапе, когда надо обработать выбранные записи. И вот тогда нужны все записи из временной таблицы, а из основной только те, которые есть во временной. А то, что ты добавил, действительно было не очень понятно. Про саму технику занесения во временную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 00:34 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
для ЛП (если прикалывается): Сам такой! :) для ЛП (если не прикалывается): ЛП, а сколько мне это решение в своё время гемора стоило... Досих пор помню название своего топика в котором оно и нашлось: "Риторические вопросы из тупика" :) Хорошо, что тогда модераторов небыло, а то в угол бы за такую тему поставили бы Ну так что, ЛП, еще одного ЖИРНОГО енота я заработал от тебя? :) //Не помню за что был первый, но, надеюсь, к следующему году (когда планирую побывать в Первопристольной) вспомню и мы их отметим за бутылочкой пива :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 00:43 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Саныч, ну да. На более позднем (момент обработки группы) всё так, как ты и сказал. Вообщем, сорри за косноязычность... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 00:45 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
А я пока в тумане........:(( Попробовал, ничего у меня само не добавляется. Вспом.табл: поля id (Long) и Выбрать (Boolean). Связал ключевое поле осн.таблицы и id временной (все из основной и только совпадающие из временной). В свойствах запроса указал - Динамический(несогласованный). В запросе вывел поля: Выбрать, Ключ осн.табл. и id вспомогательной. Открываю запрос: число записей равно числу записей осн.таблицы, запрос допускает редактирование, но все "Флажки" - в "состоянии 3". Ладно, хрен с ними, щёлкаю на первом флажке, он "отмечается", но ничего в поле id не возникает, щёлкаю другой флажок, теперь отмечены оба и в "предыдущем" поле id возникает 0. И что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 02:48 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
для АндрейК: Ну вот, теперь ЖИРНОГО я фиг получу точно :) Щас проверил... Если запрос не слишком сложен и именно содержит Основную таблицу и Временную таблицу, то набор можно оставить Согласованным и всё будет работать именно так, как я и сказал: юзер кликает на временном чекбоксе и запись автоматически добавляется во временную таблицу с необходимой ID-шкой... Т.е. главный заявленный мной недостаток (несогласованный набор записей) снимается! Остается, правда, как оказалось и как я сейчас вспомнил "неопределенное состояние чекбокса", которое лично у меня получилось таки обратить в достоинство :) По поводу моих настырных утверждений о несогласованном наборе... Пойду погляжу в свой "запомнившийся" топик... Посмотрел... В моем случае объединялись таблицы, связанные отношением "многие-ко-многим" (через еще одну таблицу), в результате попытки реализовать рассматриваемый вариант появлялась ошибка "Невозможен ввод значения в пустое поле со стороны "один" внешнего объединения." Поэтому набор пришлось делать несогласованным и, коль скоро он несогласован (т.е. Акс умыл руки в плане поддержания реляционной целостности), то я "ручками" в коде после изменения пользователем логического поля брал и копировал ID текущей измененной пользователем записи в ID-поле временной таблицы этой же самой записи... Цена показалась мне не очень высокой и решение реально сейчас работает у одного клиета. Проблем с данным решением нет. В целом с базой есть :), а с этим решением - нет. Ну и в качестве оправдания: Не относись ко мне серьезно, делай как все! :) Ибо так получилось, что Аксом я щас очень мало занимаюсь, поэтому вроде бы элементарные когда-то для меня вещи стали вдруг какими-то расплывчатыми и зыбкими Удачи! Иван ака Нуф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 10:47 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
К Нуф-нуф: > делай как все! А как все? Никто не торопиться секретами делиться. Я пытаюсь разобраться в Вашем способе. Есть в нём какая-то "изюмина". 1. Если я объединяю 2 таблицы и не указываю "несогласованный набор", то не получается изменить флажок - "объект Recordset не является обновляемым". В запросе всего 2 таблицы, одна - пустая (с двумя полями), другая с данными. 2. Так всё-таки данные в поле ID временной, оказывается, заносятся не "автоматически", а либо ручками, либо специальной процедурой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 12:59 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
для АндрейК: Ну так не честно, в самом деле... :) Уже ж вроде всё досканально рассказано, проверено даже (еще раз:)! АндрейК1. Если я объединяю 2 таблицы и не указываю "несогласованный набор", то не получается изменить флажок - "объект Recordset не является обновляемым". В запросе всего 2 таблицы, одна - пустая (с двумя полями), другая с данными. В запросе две таблицы или другой запрос и временная таблица? Если именно две таблицы, то Вы уверены, что ID обеих таблиц имеют одинаковый тип? Если всё так, то... То что-то вы не так делаете... Что бы еще один разок не "обламаться", приведу выполненный мной специальный тест (A2000, хотя роли не играет): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Если после подобного повторения, записи во временную таблицу при изменении поля Bool не добавляются, то один из нас точно что-то не так делает. Если записи у вас всё же в указанном мной тесте добавляются, то что-то не так со своим реальным вариантом делаете Вы. Что именно - хз... Возможно, как уже сказал, объединяете некий сложный запрос с временной таблицей, от чего набор становится нередактируемым, возможно что-то другое... Телепатировать так и не научился :( АндрейКТак всё-таки данные в поле ID временной, оказывается, заносятся не "автоматически", а либо ручками, либо специальной процедурой? В простейшем (описанном мной) случае данные заносятся автоматически, и только в случае сложных запросов приходится делать набор несогласованным и вставлять следующий код в процедуру, которая изменяет поле во временной таблице (обработка события "Клик"/"Чэндж"/"Афтер/БефорАпдэйт"/прочие по желанию): Me("TempID") = Ме("ID") или Me.Recordset("TempID") = Ме.Recordset("ID") или Me.RecordsetClone("TempID") = Ме.RecordsetClone("ID") Я просто не помню... Поиграйтесь с этой строкой в случае несогласованного набора записей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.12.2003, 14:15 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
Простите нас, сами мы не местные.... ;-) А что если делать, как предложил автор в певом посте, но только не логическое поле делать, а текстовое и заносить туда при клике на нем =CurrentUser() ??? Причем давать его изменять, если оно пустое, т.е. если его еще никто пока в набор не добавил. Ну а дальше составить нужный запрос на обновление - дело техники. P.S. Сильно только не бейте. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 01:31 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
По-моему, красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 01:40 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
2 Саныч Ни <отмодерировано> не красиво. Одну и ту же запись могут выбрать несколько пользователей. Через запятую будешь их идентификаторы хранить??? 2 Нуф И ни фуя я не прикалывался. Какой КЮ! Хотел отделаться одной бутылкой пива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 01:48 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
То Лох Позорный: > Одну и ту же запись могут выбрать несколько пользователей. Ты не внимательно прочитал! Я же сказал, что давать ее изменить, только если это поле пустое, в противном случае выдавать пользователю сообщение, что данную запись обновляет другой пользователь и что надо подождать. Одновременно с обновлением записей, данное поле становится Нул или пустой строкой и снова любой пользователь может ее менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 01:56 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
То ЛП: И еще, заканчивай пить!!! А то уже буковок не видишь, да и Гео с Нуфом путаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 01:58 |
|
||
|
Групповая обработка записей.
|
|||
|---|---|---|---|
|
#18+
2 Траблез Я же сказал, что давать ее изменить, только если это поле пустое, в противном случае выдавать пользователю сообщение, что данную запись обновляет другой пользователь и что надо подождать Т.е. если поле непустое (запись уже кто-то "отселектил") - то никому больше не давать эту запись менять ("селектить")? Ничем не отличается от обычной оптимистической блокировки + транзакции по форме. Только транзакции делает сам аксес, а тум еще какой-то код придется писать. И еще, заканчивай пить!!! Еще атин путыльк - и закончу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2003, 02:12 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1703&tid=1677521]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 408ms |

| 0 / 0 |
