Форум: "Прочее";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
ВнизМозговой штурм на тему разработки клиент-серверного приложения Найти похожие ветки
← →
O'ShinW © (2012-12-28 14:40) [80]Ганс вроде прав :)
хоть ADOTable базируется на TCustomADODataSet, откуда ноги у всех растут, но
вводится режим TableDirect, что делает - не понятно, но не поддерживает события
например
procedure TCustomADODataSet.EnableEvents;
if (CommandType = cmdTableDirect)
then
DatabaseError(SEventsNotSupported);
← →
знайка (2012-12-28 14:41) [81]
> DVM © (28.12.12 14:38) [79]
У нас клиенты не бухгалтеры, но тоже им делаем в гриде, да и не то что мы это их требование. И что вы хотели сказать?
← →
sniknik © (2012-12-28 14:43) [82]> Затем запустите два экземпляра этого приложения. И вы получите дупу.
только при удалении в одном и попытке редактирования этой же записи в другом... в фоксе для этого не было физического удаления, до ZAP-а.
а если удалять/редактировать в формах, ну по правилам, разве не тоже самое будет?
← →
Jeer © (2012-12-28 15:26) [83]
> Единственный в мире грид, который я видел и который подходит
> для редактирования данных - это excel.
Именно поэтому и тогда, когда нужны массовые закачки данных, непротиворечащих закачкам от других юзеров, отдаю юзерам спец.формы Excel, куды они молотят в гриде свои данные - потом программная верификация и массовая закачка.
Т.е. для таких случаев реализую технологию импорта.
← →
Аббат Пиккола (2012-12-28 15:56) [84]Фигня это все.
В гриде прекрасно можно редактировать.
Только нужно с умом организовать ряд вещей. Например, совершенно не к чему подтверждать транзакции после изменений в каждой строке.
У меня все многострочные документы редактируются в гриде.
Краеугольным является решение проблемы со ссылочным полем (например, товар в накладной). Я делаю традиционно так: пользователь набирает кусочки наименования прямо в поле сетки. Сетка имеет специальное событие (OnSetEditText), которое я добавил в этот компонент. Что позволяет на каждое нажатие клавиши осуществлять поиск в справочнике товаров. Под сеткой позиций документа во дополнительной сетке отображается результат SQL-запроса вроде этого:
SELECT ID, NAME FROM GOODS
WHERE UPPER(NAME) LIKE "%НА%" AND
UPPER(NAME) LIKE "%50%" AND
UPPER(NAME) LIKE "%BLUE%" AND
Запрос формируется на лету. В данном случае пользователь искал "Наволочка 50x50 Amazon Blue"
Как только он видит нужный объект в нижней сетке, он жмет дважды Enter. Первый раз это переводит фокус ввода в нижнюю сетку , потом стрелками он может выбрать из нижней сетки, если там к этому моменту больше 1 товара видно, затем он жмет Enter еще раз, фокус ввода возвращается в верхнюю сетку, наименование копируется туда. где он раньше набирал признаки поиска, параллельно ID товара копируется в датасет, а фокус ввода переводится на следующую ячейку (обычно это количество).
Скорость набора документа просто фантастическая. Добавление новой строки - просто стрелка вниз. В любой момент пользователь может нажать кнопку "сохранить", что вызывает Commit. Все, кто использовал этот интерфейс, ни на что другое смотреть потом не хочет. Именно из-за колоссальной скорости набора данных.
В некоторых случаях вместе с наименованием может быть запрошена цена или единица измерения, да и вообще все что угодно. То есть из нижней сетки в верхнюю может быть переброшена на ходу кроме наименования еще и иная информация.
← →
Аббат Пиккола (2012-12-28 16:05) [85]Для организации полей "сумма" используется событие DataChange датасоурса. В этом событии если переданный параметр Field
if (Field = <поле кол-ва>) or (Field = <поле цены>) then
<поле суммы> := <произведение цены на кол-во>;
Здесь могут быть и более сложные обработки. Это еще до отсылки на сервер все вычисляется. Иногда даже поверх вычисляемых сервером полей. Чтобы еще до отсылки видеть результат прямо в редактируемой строке.
На мой взгляд главное в этих делах - скорость и удобство для пользователя.
← →
Ega23 © (2012-12-28 16:29) [86]
> Для организации полей "сумма" используется событие DataChange
> датасоурса. В этом событии если переданный параметр Field
На TDataLink завяжись.
← →
Anatoly Podgoretsky © (2012-12-28 21:07) [87]
> DevilDevil © (27.12.12 12:52) [9]
> и не скажется ли это на производительности БД, если хранить
> в ней файлы
А не скажется ли это на производительности БД, если хранить извне, тоже про целостность и прочее.
← →
vuk © (2012-12-28 22:17) [88]to MsGuns © (28.12.12 14:22) [75]:
> Для примера, напишите простое приложение на работу с таблицей
> в акцесе используя "нормально перехватывающий" TADOTable.
>
Это имеет отношение скорее к функционированию компонентов типа TTable (которыми я, кстати, завязал пользоваться лет 15 назад) вообще и соответствующего провайдера, а вовсе не к редактированию "через грид".
← →
MsGuns © (2012-12-29 12:04) [89]>имеет отношение скорее к функционированию компонентов типа TTable
Это имеет отношение к весьма популярной технологии проектирования "базовых" приложений по принципу "тяни-бросай", где грид играет основополагающую роль посредника между "базой" и "юзером".
Об чем собсна и был пост.
← →
Павел Калугин © (2012-12-29 14:08) [90]
> Если разграничивать доступ не персонально по пользователям,
> а по группам, и иметь не более 64 групп, то разграничение
> прав даже на отдельных записях делается очень легко и совсем
> без снижения быстродействия при выборке. Просто каждой записи
> ставится в соответствие некоторое 64 бит число, каждый бит
> в котором означает доступ той или иной группе. Два таких
> числа дают возможность проверять доступ на чтение и запись.
> Маска группы передается в каждую хранимую процедуру делающую
> запрос, бинарными операциями (которые есть почти в каждой
> субд) можно отобрать подходящие под маску записи. Способ
> почти не снижает быстродействие.
Ну может быть можно и так. Но это не отменяет необходимости реализовывать задачу раздачи прав. Только "гайками сервера" это не докрутишь.
← →
vuk © (2012-12-29 14:12) [91]to MsGuns © (29.12.12 12:04) [89]:
> Это имеет отношение к весьма популярной технологии проектирования
> "базовых" приложений по принципу "тяни-бросай", где грид
> играет основополагающую роль посредника между "базой" и
> "юзером".
Ну мы тут вроде не на уровне "Delphi для чайников" рассуждаем. Или не? :))
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.006 c