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

Вниз

Уходя от DBAware, зашился. Что можно мне посоветовать?   Найти похожие ветки 

 
12 ©   (2010-12-28 10:01) [0]

Хотелось, чтоб не напрямую редактировал пользователь. Стал делать простые TEdit, TStringGrid и т.п.
Перед загрузкой все заполняется, по кнопке все пробегается, перезапрашивается БД,  и смотрится что менялось, потом только выборочно это и апдейтится.

4й или 5й раз меняется ТЗ, опять все менять, форм много, контрлов тоже. Чувствую, могу не успеть все это "ручное" переписать "в ручную"..
Но и не хочется DBAware делать.

TClientDataSet рассматриваю, но что-то не нравится, на первый взгляд. Наверное, потому что не юзал еще никогда :)

Юзать или не юзать? или что-то еще можно придумать?


 
Ega23 ©   (2010-12-28 10:19) [1]

НД - только на чтение. Из DBAware - только DBGrid + были у меня несколько вспомогательных контролов и компонентов типа DBImageList.
CDS - я честно говоря не очень представляю архитектуру, где он жизненно необходим.


 
Petr V. Abramov ©   (2010-12-28 10:30) [2]


> по кнопке все пробегается, перезапрашивается БД,  и смотрится
> что менялось, потом только выборочно это и апдейтится.
>

перезапрос убивает всю экономию от "выборочно это и апдейтится."
обычный датасет + CachedUpdates.


 
Sergey13 ©   (2010-12-28 10:35) [3]

Какая то БД-фобия, ИМХО.


 
Ega23 ©   (2010-12-28 10:49) [4]


> обычный датасет + CachedUpdates.


Для одного клиента - отличное решение. Для 100 - ..опа, ибо данные безнадёжно устаревают.


 
12 ©   (2010-12-28 10:55) [5]

клиентов около 30. максимум.


 
Petr V. Abramov ©   (2010-12-28 11:06) [6]


> Ega23 ©   (28.12.10 10:49) [4]


> Для одного клиента - отличное решение. Для 100 - ..опа,
> ибо данные безнадёжно устаревают.

умничко :)
осталось найти технологию,
- при которой устаревают небезнадежно
- идеологически несовместима с обычный датасет + CachedUpdates.
переоткрывать раз 0.1 сек, mssql, xml и пр. г... не предлагать


 
Ega23 ©   (2010-12-28 11:09) [7]


> клиентов около 30. максимум.


Ну я бы именно так бы и поступил.
Типичная картина: форма, DBGrid, в ней - ну например какой-то справочник. НД - только для чтения. Хочешь подредактировать - дабл-клик на записи, вывалилась модальная форма. В модальную форму передался ID записи, выполнился запрос на вытаскивание актуальных на данный момент данных. Заполнились всякие Edit-ы, комбо-боксы, чек-боксы и т.д.
Пользователь отредактировал как надо, нажал "Применить". Прошла проверка на валидность (ну это уже по бизнес-логике), данные обновились в базе, форма закрылась, НД в изначальной форме обновился (в любом случае, даже если "Отмена" нажали), НД спозиционировался на запись с данным ID.


 
12 ©   (2010-12-28 11:10) [8]


> обычный датасет + CachedUpdates.

м-да. Как обычно, слона и не заметил.
Ща одну форму переделал минут за 10 - нормально, вроде..

Спасибо!


 
DiamondShark ©   (2010-12-28 11:11) [9]


> Ega23 ©   (28.12.10 10:49) [4]
>  Для 100 - ..опа, ибо данные безнадёжно устаревают.

При connected-модели доступа для 100 клиентов "опа" настанет раньше.

Вообще-то, disconnected-модель доступа была придумана для того, чтобы минимизировать нагрузку на СУБД и уменьшить взаимовлияние клиентов.

ЯХДР. 2011 год скоро. А дельфисты всё ещё эмулируют методы доступа ФоксПро.


 
XXL   (2010-12-28 11:12) [10]

Я к такому выводу (отказаться от DBAware компонент) пришел примерно на 5-й год разработки под DB.
Для вывода используются TMS Unicode. Запросы на обновление формируются вручную по шаблону.


 
DiamondShark ©   (2010-12-28 11:12) [11]


> Юзать или не юзать? или что-то еще можно придумать?

Что тут придумывать? Выкинуть мусор на помойку, взять VS.NET и радоваться жизни.


 
12 ©   (2010-12-28 11:14) [12]


> Ega23 ©   (28.12.10 11:09) [7]

ну так и делал примерно. Но это ужас же..

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


 
12 ©   (2010-12-28 11:15) [13]


> Что тут придумывать? Выкинуть мусор на помойку, взять VS.
> NET и радоваться жизни.

не, отклоняется, однозначно.


 
DiamondShark ©   (2010-12-28 11:15) [14]


> Ega23 ©   (28.12.10 11:09) [7]

Потом это приложение отдали на поддержку другому программисту, и в стране ухудшилась криминогенная ситуация.


 
DiamondShark ©   (2010-12-28 11:16) [15]


> 12 ©   (28.12.10 11:15) [13]
> не, отклоняется, однозначно.


*пожимает плечами*


 
12 ©   (2010-12-28 11:17) [16]

когда все устоится (пару месяцев будет работать без правок) обязательно все же перепишу как было. Edit, Grid и т.п.
Все же так правильнее, имхо.


 
Ega23 ©   (2010-12-28 11:21) [17]


> При connected-модели доступа для 100 клиентов "опа" настанет
> раньше.


А кто тебе сказал, что приложение напрямую с СУБД работает? Я про общую концепцию говорю, а она - да хоть на тонком клиенте может быть реализована.


> 12 ©   (28.12.10 11:10) [8]
> Ща одну форму переделал минут за 10 - нормально, вроде..


Нормально, но если один пользователь одни данные поменял, другой в это время - другие, третий - третьи, то их изменений ты не увидишь. Только свои.

З.Ы. Естественно, всё зависит от задачи и от требований к системе. Я 8 лет СКУД-ами занимался, там это было (по тем ТЗ) вполне обоснованно, и даже необходимо.


 
DiamondShark ©   (2010-12-28 11:23) [18]

Идея DBAware компонент была в своё время если и не хороша, то, по крайней мере, оправдана тем, что любые имеющиеся тогда альтернативы были ещё хуже.
Теперь этот подход явно морально устарел.


 
Ega23 ©   (2010-12-28 11:28) [19]


> DiamondShark ©   (28.12.10 11:23) [18]
>
> Теперь этот подход явно морально устарел.


За язык тебя никто не тянул, так что давай, объясняй почему.


 
DiamondShark ©   (2010-12-28 11:28) [20]


> Ega23 ©   (28.12.10 11:21) [17]
> А кто тебе сказал, что приложение напрямую с СУБД работает?


Да пофиг.


> Я про общую концепцию говорю

Какую, нахрен, концепцию? Какая, к лешему, концепция избавит от устаревания данных во время редактирования? Чо ты мОзги пудришь?


 
12 ©   (2010-12-28 11:32) [21]


> Какая, к лешему, концепция избавит от устаревания данных
> во время редактирования?

как будто в VS.NET избавит как то


 
Ega23 ©   (2010-12-28 11:37) [22]


>  Какая, к лешему, концепция избавит от устаревания данных
> во время редактирования? Чо ты мОзги пудришь?


Не во время редактирования.
Я открыл форму с набором данных. И ушёл сначала на перекур, потом на обед, а потом ещё куда-то. Меня не было, например, час. За это время данные были модифицированы другими пользователями. Не все, но какая-то часть. Например, 10%.
Я вернулся и дабл-кликнул на какую-то запись. У меня в модальную форму передался ID данной записи. Из формы пошёл запрос на актуальные данные по этому ID. Они отобразились, я их отредактировал, либо вообще отмену нажал. И вот уже потом пошёл рефреш основного набора. Того, который был на 10% изменён.


 
Petr V. Abramov ©   (2010-12-28 11:43) [23]


> 12 ©   (28.12.10 11:32) [21]
>
>
> > Какая, к лешему, концепция избавит от устаревания данных
> > во время редактирования?
>
> как будто в VS.NET избавит как то

здохнешь и отмучаешься :)


 
vuk ©   (2010-12-28 11:50) [24]

to Ega23 ©   (28.12.10 11:37) [22]:

> Они отобразились, я их отредактировал, либо вообще отмену
> нажал.

Прально. А пока ты их редактируешь, на них должна быть блокировка поставлена, чтобы никто своими грязными ручками не лез поперек твоего редактирования.

Собсно, у нас по такому принципу всё и живет. В обычной двухзвенке. И с обычными DB-aware. Проблем нет.


 
Ega23 ©   (2010-12-28 11:53) [25]


> Прально. А пока ты их редактируешь, на них должна быть блокировка
> поставлена, чтобы никто своими грязными ручками не лез поперек
> твоего редактирования.


А, ну да, это тоже. Забыл написать. Типа "Эта запись редактируется Васей Пупкиным с рабочей станции Workstation".


 
DiamondShark ©   (2010-12-28 12:50) [26]


> Ega23 ©   (28.12.10 11:28) [19]
> > DiamondShark ©   (28.12.10 11:23) [18]> > Теперь этот
> подход явно морально устарел.За язык тебя никто не тянул,
>  так что давай, объясняй почему.

Потому что появилась явно более обобщённая и удобная модель data binding, в которой нет разницы между ДБ и не-ДБ контролами, а источником данных может быть не только датасет, но и любой объект вообще.

В дельфи ДБ-контролы были сделаны на скорую руку, потому что ни у кого такой фичи не было, а на рынок выходить надо было. Во времена Д-1 это была действительно суперская фича, а теперь уши аврального решения торчат слишком явно.
В ДБ-контролах нет никакой общей абстракции и единообразия.
Так, например, ДБ-контролы не имеют общего корня наследования. Т.е., нет иерархии вида:
TControl - TDBControl
- TDBEdit
- TDBDateTimePicker
и т.д.
Ну ладно, вывод из единого корня -- не единственный вариант построения семейств объектов. Есть, к примеру, ещё подходы агрегации, примесей, аспектов и т.п.
Но дельфийские ДБ-контролы не тянут ни на агрегаты, ни на носители аспектов и примесей. С ними вообще нельзя обращаться каким-либо абстрагированным и унифицированным способом.
Их БД-шность реализована тупым копипастом!


 
DiamondShark ©   (2010-12-28 12:51) [27]


>  А пока ты их редактируешь, на них должна быть блокировка
> поставлена,

Привет^Wпрощай масштабируемость.


 
DiamondShark ©   (2010-12-28 12:55) [28]


> Ega23 ©   (28.12.10 11:37) [22]

Не-не-не, Дэвид Блэйн. Я предлагаю другой сценарий.

Я кликнул запись, у меня открылась модальная форма со свежей записью, я изменил половинну полей, и только потом пошёл курить/обедать/какать/пиво пить.

А потом вернулся и нажал "Сохранить".


 
Ega23 ©   (2010-12-28 13:07) [29]


> Не-не-не, Дэвид Блэйн. Я предлагаю другой сценарий.


см. [25], я просто забыл этот момент описать.


 
Вариант   (2010-12-28 13:08) [30]


> DiamondShark ©   (28.12.10 12:55) [28]
> Я кликнул запись, у меня открылась модальная форма со свежей
> записью, я изменил половинну полей, и только потом пошёл
> курить/обедать/какать/пиво пить А потом вернулся и нажал "Сохранить".


Ну вот кроме после потом пошел от ниже приведенного не увидел разницы (что и там возможно).... (Посты о блокировках и прочем пока не рассматриваю)


> Ega23 ©   (28.12.10 11:37) [22]


>  дабл-кликнул на какую-то запись. У меня в модальную
> форму передался ID данной записи. Из формы пошёл запрос
> на актуальные данные по этому ID. Они отобразились, я их
> отредактировал, либо вообще отмену нажал


PS:
Для одинакового прочтения
Я понял
> отредактировал, либо вообще отмену нажал
как отредактировал и сохранил, либо отмену нажал


 
12 ©   (2010-12-28 13:08) [31]


> DiamondShark ©   (28.12.10 12:55) [28]


> Я кликнул запись, у меня открылась модальная форма со свежей
> записью, я изменил половинну полей, и только потом пошёл
> курить/обедать/какать/пиво пить.
> А потом вернулся и нажал "Сохранить".

Вот и именно,
я делал так: В обычном контрле есть что было, в новом (Форме для редактирования) что стало, а перед записью получаем новые данные в НД.

Соответственно, имеется что поменялось мной, что не мной, что вообще не поменялось.


 
Ega23 ©   (2010-12-28 13:11) [32]


> Потому что появилась явно более обобщённая и удобная модель
> data binding, в которой нет разницы между ДБ и не-ДБ контролами,
>  а источником данных может быть не только датасет, но и
> любой объект вообще.


Ну TDataSet, собственно, это всего лишь абстрактный класс. Вполне можно написать TXMLDataSet, статья с Getting Started где-то тут на сайте лежит (древняя, правда, но сути не меняет).
А из DBAware использовал только DBGrid (только для отображения). И то не родной.


 
Игорь Шевченко ©   (2010-12-28 13:21) [33]

Use Oracle Forms, Luke


 
Anatoly Podgoretsky ©   (2010-12-28 13:31) [34]


> А, ну да, это тоже. Забыл написать. Типа "Эта запись редактируется
> Васей Пупкиным с рабочей станции Workstation".
> <Цитата>

Телефон такой то, палка стоит в кладовке.


 
Kerk ©   (2010-12-28 13:34) [35]


> Игорь Шевченко ©   (28.12.10 13:21) [33]
>
> Use Oracle Forms, Luke

Как Oracle Forms позволяет взаимных блокировок избежать?
В свое время задолбался с этим.


 
Petr V. Abramov ©   (2010-12-28 13:38) [36]


> DiamondShark ©   (28.12.10 12:51) [27]
>
>
> >  А пока ты их редактируешь, на них должна быть блокировка
> > поставлена,
>
> Привет^Wпрощай масштабируемость.
>

с какого перепугу?
если куча народу ломится редактировать одно и тоже, проблема организационная, и создавать автоматизированный бардак безблагодатно. к относительно специфичечным вещам типа продажи жд-билетов, это, ессно, не относится.


 
vuk ©   (2010-12-28 14:18) [37]

to Petr V. Abramov ©   (28.12.10 13:38) [36]:

> если куча народу ломится редактировать одно и тоже, проблема
> организационная

Именно. Ибо нефиг. Непротиворечивость и целостность данных - важнее.


 
Inovet ©   (2010-12-28 14:49) [38]

> [29] Ega23 ©   (28.12.10 13:07)
> см. [25], я просто забыл этот момент описать.

> [25] Ega23 ©   (28.12.10 11:53)
> "Эта запись редактируется Васей Пупкиным с рабочей станции
> Workstation"

Статус: отошёл какать, после обедать.


 
Ega23 ©   (2010-12-28 14:58) [39]


> Статус: отошёл какать, после обедать.


Не вижу причин, почему нельзя реализовать мессенджер, если такой присутствует в ТЗ.


 
Petr V. Abramov ©   (2010-12-28 15:19) [40]


> Ega23 ©   (28.12.10 14:58) [39]
>
>
> > Статус: отошёл какать, после обедать.
>
>
> Не вижу причин, почему нельзя реализовать мессенджер, если
> такой присутствует в ТЗ.
>

(только никому не говори). в субд, на которой сидит Влад, нету штатных средств узнать, кто заблокировал запись.



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

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

Наверх





Память: 0.56 MB
Время: 0.005 c
1-1251722023
Spot
2009-08-31 16:33
2011.04.10
Ошибка при поиске в Excel


1-1252149503
zod33
2009-09-05 15:18
2011.04.10
Копонент TMemo


2-1294821073
student_92
2011-01-12 11:31
2011.04.10
Классы


15-1293461610
ANB
2010-12-27 17:53
2011.04.10
Вместо наведения порядка - возврат к прописке ?


2-1294752413
начинающий1993
2011-01-11 16:26
2011.04.10
вызвать B из A





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