Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.28;
Скачать: CL | DM;

Вниз

Мозговой штурм на тему разработки клиент-серверного приложения   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.012 c
15-1356525814
Аббат Пиккола
2012-12-26 16:43
2013.04.28
Новогодний подарок тем, у кого еще есть ИП


15-1356883379
Baks
2012-12-30 20:02
2013.04.28
Восстановление фабричного состояния Acer (PQService)


15-1356642898
ННН
2012-12-28 01:14
2013.04.28
Подскажите программу для перехвата DEBUG-сообщений.


2-1350057756
Mihaip
2012-10-12 20:02
2013.04.28
Вопрос по UDP


15-1356763220
slvcomputer
2012-12-29 10:40
2013.04.28
Требуется ведущий Delphi-разработчик (з/п 80-120 т.р.)