Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Вниз

Проблема при вводе данных ! Поделитесь экспириенсом   Найти похожие ветки 

 
MsGuns   (2002-09-06 12:55) [0]

При редактировании/добавлении датасетов юзерам очень удобно переносить в текущую запись содержимое этого же поля из передыдущей (верхней в гриде). Пример

Запись Поле 1 Поле2
---------------------------------------------------------------
n-1 6.09.02 Процессор Celeron 800 Mh
> n 6.09.02 Процессор Celeron 900 Mh

Ясно, что вводить наименование процессора каждый раз утомительно, очеь удобно по Short-Cut`у или кнопке сначала копировать из поля сверху, а потом просто слегка откорректровать.
Но как это сделать, не вызывая события постирования, особенно для датасетов с ключами ?
Я эту проблему решил, но по моему мнению коряво:
1. Для режима Edit при <ключевые поля>.ReadOnly := true:
- Post обновляемой записи.
- ds.Prior
- newval (Variant) := <текущее поле>.Value
- ds.Next
- <текущее поле>.Value := newval (Variant)
Недостаток: метод Cancel не "срабатывает" в полном объеме, да и "лазание" по датасету мне не нравится. (особенно если учесть, что не для всех БД это возможно
2. Для режима Insert
- В обработчике BeforeInsert создается маасив вариантов по числу видимых полей ds и туда в цикле "закачаваются" содержимое всех полей тек.записи.
- Insert срабатывает не "перед", а "после" текущей записи
- при нажатии фишки "Копи" определяется индекс текущего поля в списке видимых полей ds, по этому индексу в массиве вариантов ищется значение и присваивается полю новой записи
Недостатки: вставка "после", время (на медленных компах тормозит заметно для глаза), громоздкость и некрасивость метода.

Резюме Интуиция мне посказывает, что это можно сделать проще, причем значительно ! Но вот до сих пор не сообразил :-(
Думаю, что многим из вас приходилось решать подобную задачку. Буду весьма признателен всем, кто поделится опытом.


 
Val   (2002-09-06 13:26) [1]

как вариант:
создаем record c аналогами полей НД. чекбокс cbClone.
в BeforeInsert:
if cbClone.Checked then перенос значений из активной записи в record;
в AfterInsert:
if cbClone.Checked then перенос из record в активную запись.


 
Mike Kouzmine   (2002-09-06 13:53) [2]

Я делаю стандартно - Ctrl-C Ctrl-V. Только перед вставкой нажимать надо F2


 
MsGuns   (2002-09-06 13:54) [3]

>Val © (06.09.02 13:26)
Спасибо за ответ, но..
>создаем record c аналогами полей НД.
Ну а я создаю массив. Не вижу существенной разницы. Более того,
создание (динамическое) TRecord несколько громозче по тексту.
>if cbClone.Checked then перенос из record в активную запись.
Не совсем понял. Переносить надо не автоматически ВСЕ поля, а по команде Юзера и одно конкретное поле (текущее)
И совсем не понятно, зачем тут чекбокс.

А самое, главное, не решена проблема избежания постирования в Edit-режиме.

Но за совет благодарен !>)



 
MsGuns   (2002-09-06 13:57) [4]

Mike Kouzmine (06.09.02 13:53)
>Я делаю стандартно - Ctrl-C Ctrl-V. Только перед вставкой >нажимать надо F2

Не проходит априори, т.к. для этого самого Ctrl+C надо переместиться в пред.запись, тут-то и возникает та самая проблема (POST).


 
Mike Kouzmine   (2002-09-06 13:59) [5]

при AfterInsert пост не вызывается, поэтому есть время отредактировать и самому запостить. А идея с CheckBoxом самая правильное.
>Не совсем понял. Переносить надо не автоматически ВСЕ поля, а по команде Юзера и одно конкретное поле (текущее)
Так и переноси то что надо в AfterInsert.


 
Val   (2002-09-06 14:03) [6]

1.массив вариантов - зачем, если вы знаете структуру таблицы? Не расточительно ли?
2. чекбокс включает/выключает режим клонирования записи, ведь не всегда юзеру он нужен? Про то что вам нужно конкретное поле не понял, но исправить несложно - будет даже красивее - при включенном режиме клонирования показываете пользователю чеклистбокс, в котором он уже сам отмечает, какие поля ему нужно клонировать. алгоритм остается прежним, только анализируете выбор юзера и переносите значения отмеченных полей.


 
MsGuns   (2002-09-06 14:29) [7]

>Val
Идея с чекбоксом принимается как вариант. Что-то в этом, наверное, есть. Надо попробовать, что скажут юзера ?
Если можно, дайте сампл работающего проекта.


 
Val   (2002-09-06 14:52) [8]

>MsGuns © (06.09.02 14:29)
Если можно, дайте сампл работающего проекта.
о как, вы ли это, Сергей???
хорошо, в понедельник попытаюсь раскопать у себя, где-то такая штуковина была.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
3-85414
Awex
2002-09-05 19:02
2002.09.26
Русские имена метаобъетов в Interbase (Диалект 3)


3-85356
pavit
2002-09-04 11:30
2002.09.26
начальное значение в DBLookupComboBox


7-85725
SemFLY
2002-07-16 15:55
2002.09.26
Как программно определить версию BIOS а любого устройства ?


3-85393
manowar
2002-09-05 15:25
2002.09.26
как правильно инициализировать роль приложения из Delphi?


3-85330
maxim2
2002-09-04 12:51
2002.09.26
В Table есть свойства Recno и Recordcount а есть ли такиеже в AD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский