Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1356681047
Dmitry1987
2012-12-28 11:50
2013.04.28
Verisign vs GlobalSign


2-1350146126
ixen
2012-10-13 20:35
2013.04.28
Загадочный dxDBLookUpTreeList


10-1184304459
d_oleg
2007-07-13 09:27
2013.04.28
DataSnap: "взаимоотношения" RDM между собой


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


15-1356810276
alexdn
2012-12-29 23:44
2013.04.28
Новый космодром





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский