Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий

Модерирует : ShIvADeSt

ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение раздела http://forum.ru-board.com/topic.cgi?forum=33&topic=6607&start=0  
Ссылки приветствуются.

См. также:

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:33 20-06-2007 | Исправлено: XPerformer, 14:41 24-10-2013
Sota

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Лучше всю работу с БД в отдельный поток выкинуть.
 
Если это ни как, то придется мудрить, GUI в Delphi потоко-небезопасный, просто так в поток ничего не засунешь.
Но можно в потоке, например, отдельное окошко создать и в нем рисовать.
Вот тут идея описана.
 
Сам такое не пробовал, всю работу с БД по-максимумом постарался в потоки выкинуть.

Всего записей: 273 | Зарегистр. 19-12-2005 | Отправлено: 15:58 26-10-2011
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sota
работа с БД в потоке мысль конечно интересная, но проблематична в реализации и усложняет причем сильно саму программу - елементарно - закинуть открытие таблиц в поток - можно - и не сложно, но ... - надо стопить главное окно пока не откроются таблицы, смысл открывать главное окно и фиг знает сколько ждать пока не откроются таблицы, дальше - вставка/обновление в потоке - тоже не сложно, но опять же надо блокировать главную форму, если етого не делать будет такая ж... па шо потом не разгребеш.И я честно говоря не думаю что таблицы будут открыватся намного быстрее в отдельном потоке
Проще модификацию данных да и селекты тоже реализовывать через процедуры и выполнять все на сервере, тогда точно будет быстрее - попробуйте в ибексперте выполнить запрос для таблички с тисяч 50 000 записей и забросте етот селект в процедуру и сравните время выполнения - вот почему я и реализовал
модификацию данных через обыкновенные едиты, но в етой байды есть недостаток - после модификации надо передергивать всю таблицу а не только текущую если бы модификация шла через дб едиты.
А статью ету я читал и в своем посте выше написал что без использования апи - надо будет полностью
рисовать форму ручками, а она у меня собрана из ТМС-овских компонентов а через апи такую фиг сделаеш,- хотя можно конечно , но придется очень сильно повозится - написать свои компоненты

Всего записей: 2127 | Зарегистр. 09-04-2003 | Отправлено: 16:22 26-10-2011
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol

Цитата:
запрос для таблички с тисяч 50 000

А я не понял - процедура возвращает 50000 записей или в базе в таблице 50000 записей всего? Если возвращает 50000 - то проблема скорее всего в логике прикладной программы - я представить себе не могу пользователя, которому на экране перед глазами, да еще в режиме редактирования понадобилось бы 50000 записей. А если подготовка на сервере идет долго - надо проверять план запроса(скорректировать запрос, добавить при необходимости индексы). Я извиняюсь - про птичку ничего не знаю, но предполагаю, что что-то похожее должно быть.  И еще. Я для себя придерживаюсь правила: при работе с базами данных программирования должно быть минимально. Я имею в виду всякие программные хитрости типа потоков, какого-то рисования и т.п.

Всего записей: 2596 | Зарегистр. 18-05-2005 | Отправлено: 16:39 26-10-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol

Цитата:
а подробнее ?

На стороне клиента можно использовать AqTime он покажет время выполнения ваших методов. На стороне сервера - использовать средства сервера, планы запросов, серверный профайлер, трассировка. Я не знаю, что из этого есть в файерберде. Никогда с ним не работал.

Цитата:
Создавать поток - а из потока запускать сплашскрин?  

Да, совершенно верно. Главная форма пусть отправляет мессаги, это вроде как совершенно обычная практика.

Цитата:
Refresh() работает быстрее чем FullRefresh()

А что такое FullRefresh()? Правильно созданные индексы и никаких проблем с селектами быть не должно. Опять же, про файерберд ничего сказать не могу, но 50000 это вообще-то небольшая таблица.
Дбаваре вс сторедпроц думаю не стоит даже поднимать эту тему, ничем хорошим это обычно не заканчивается...

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 17:10 26-10-2011
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
wasilissk

Цитата:
Дбаваре вс сторедпроц

в смысле заганять селекты и инсерт/апдейты в ХП?

Цитата:
А что такое FullRefresh()?

Resresh() обновляет только текущую запись , FullRefresh() - обновляет все записи селекта

Цитата:
Правильно созданные индексы
а моно чуть подробнее , в двух словах, я просто не соображу по каких полях их строить, и их же надо подключить на клиенте ?
если можно пример простенький

Цитата:
я представить себе не могу пользователя, которому на экране перед глазами, да еще в режиме редактирования понадобилось бы 50000 записей

полностью согласен - одновременно редактировать моно токо несколько записей, и то в моей практике
только одну, но - представьте базу абонентов, к примеру телефонов Москвы - я думаю пару миллионов наберется - как реализовать быстрый поиск в гриде если грубо говоря толком не знаешь  че ищешь -  
известно к примеру часть фамилии  или часть номера и тд. Я вижу два варианта - 1.выводить в грид все записы абонентов и получаем долгое открытие таблиц, но быстрый поиск по гриду, средствами самого грида, 2. или же вообще отказаться от грида на главном окне и не открывать главную таблицу или же открывать с заведомо пустым запросом и формировать поиск в селекте через лайк и тд.  
Второй вариант будет работать быстрее, но у меня была задача , когда на главном окне должен был быть грид с остатками - и как в таком случае быть - делать динамический запрос с выводом к примеру первых 100 записей - достиг последней - пере открыл таблицу с следующей сотней ???? опять же - быстрый поиск по гриду конкретной записи??? особенно если она не вошла в первую сотню????
 

Всего записей: 2127 | Зарегистр. 09-04-2003 | Отправлено: 09:44 27-10-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
в смысле заганять селекты и инсерт/апдейты в ХП?

В смысле DB-aware контролы, с полями Dataset и FieldName вс обычные контролы по которым пробегает  итератор и закидывает их в базу через сторед проц.  

Цитата:
а моно чуть подробнее , в двух словах, я просто не соображу по каких полях их строить, и их же надо подключить на клиенте ?  

По тем полям, что используются в where, по тем, по которым идет сортировака, по тем, по которым идет объединение двух таблиц.
Если приходится искать внутри текстовой строки (запросы типа where text like '%Петров%') использовать полнотекстовые индексы.

Цитата:
Resresh() обновляет только текущую запись , FullRefresh() - обновляет все записи селекта

Используйте where и обновляйте только то, что нужно.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 10:31 27-10-2011
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol

Цитата:
но - представьте базу абонентов, к примеру телефонов Москвы

Вообще все эти проблемы давным давно обсуждались и надо было только почитать книжки соответствующие, инет. С моей точки зрения тащить даже больше сотни записей, если это не отчет какой нибудь - значит что-то не так. Кстати откройте любую телефонную базу и посмотрите интерфейс с пользователем.

Цитата:
быстрый поиск по гриду конкретной записи?

То-есть вы тем самым уговариваете себя получить все данные с сервера, а потом в них что-то искать. Но логика клиент-серверных приложений ровно в обратном - вопрос отправляется на сервер, на клиент только результаты вычислений. Конечно не надо быть фанатом, но такая логика правильно работает в 99.99% случаев. Ваш случай совершенно тривиальный.

Всего записей: 2596 | Зарегистр. 18-05-2005 | Отправлено: 10:51 27-10-2011
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Samotek

Цитата:
То-есть вы тем самым уговариваете себя получить все данные с сервера

возможно, я думаю действительно стоит поменять логику приложений и выбирать только то что нужно
wasilissk

Цитата:
В смысле DB-aware контролы, с полями Dataset и FieldName вс обычные контролы по которым пробегает  итератор и закидывает их в базу через сторед проц.  

У меня сегодня после день рождения дочери почему-то голова не хочет думать  и я не соображу -  
для операций над базой лутше использовать дб контролы или все таки обыкновенные  едиты и закидать параметры в ХП ???
Да кста ни у кого нет русифицированного Collection Messages for Eurekalog 6,1 и где они хранятся перерыл все винты и реестры так и не нашол

Всего записей: 2127 | Зарегистр. 09-04-2003 | Отправлено: 14:34 27-10-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol

Цитата:
 лутше использовать дб контролы или все таки обыкновенные  едиты и закидать параметры в ХП ???

Это собственно и есть сабж для холивара. Тут уже личные предпочтения каждого.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 15:14 27-10-2011
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wasilissk

Цитата:
Тут уже личные предпочтения каждого.

Вот не очень я с этим согласен. Есть правило, что код должен быть написан единожды. И вот если писать бизнес правила в процедуре, как они будут исполнятся, если я редактирую данные через SQL Plus к примеру update table set Amount = 2 where id = 6?. Да, такого мы пользователям не позволяем, но проектируем серверную часть именно так.

Всего записей: 2596 | Зарегистр. 18-05-2005 | Отправлено: 15:25 27-10-2011 | Исправлено: Samotek, 15:25 27-10-2011
salexn1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Samotek
Имхо речь совсем не про то...
 

Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 15:46 27-10-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то типа такого

Код:
 
create procedure updtable(amount_val in number, id_val in number) is
begin
  update table set Amount = amount_val where id = id_val;
end;
 

Исполняться exec updtable(123, 456);  

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 15:56 27-10-2011
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Насколько я понял грамотные книги - пишущие транзакции рекомендуют делать как моно короче,
при использование дб контролов получаем стандартнуб ситуацию - юзер открыл запись для модификации и пошол на базар - в итоге зависшая транзакция - или же, я в своей практике сопровождающего ПО сталкивался очень часто, при одновременной записи в мастер-детал таблички - в мастере запись прошла а в детайле нет или наоборот, ето к примеру если в момент записи моргнул свет. Я понимаю что ето не совсем корректно организована логика, но при дб контролах ето стандартная ситуация.
При обыкновенных контролах запись производит сам сервер через ХП очень быстро и в большинстве случаев на серваках стоят упсы и поймать ситуацию с неполной записью очень тяжело, но как свегда есть ньюансы - очень сильно увеличиватся кол-во строк в коде, особенно для редактирования - прочитал состояние записи - передал их в форму с контролами - редактиреум - читаем все контролы и передаем их значение в ХП.Хотя все конечно в конечном итоге зависит от задач, для простенькой проги с несколькими табличками и без мастер-детайлов, особенно если большая лень писать код - тогда лутше дб-контролы    
 
Добавлено:
wasilissk
оно, причем я говорил с ребятами из приватбанка они и селекты загоняют в ХП и лично сам , как я писал
выше, проверял - если делать выборку всех записей таблицы через селект получаем ответ % на 30 дольше чем закинуть етот же селект в ХП

Всего записей: 2127 | Зарегистр. 09-04-2003 | Отправлено: 15:59 27-10-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
Т.е. как я понимаю холивару настарт!
Транзакця стартует в момент вызова метода post, а не в момент изменения дбконтрола. И если отключен автокоммит, то фиксируется тогда, когда вы пожелаете. Например когда проапдейтятся все нужные таблицы.
С М-Д если надо редактировать и то и другое, можно использовать CachedUpdates, либо вручную управлять М-Д через ренджи.
 
PS: я редко когда использую не дбконтролы.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 16:05 27-10-2011 | Исправлено: wasilissk, 16:08 27-10-2011
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
особенно если большая лень писать код - тогда лутше дб-контролы

Дико извиняюсь за оффтоп, но не сдержался:
если большая лень писать код - тогда лутше сменить профессию ))

Всего записей: 2567 | Зарегистр. 20-06-2011 | Отправлено: 16:09 27-10-2011
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
XPerformer
ето точно , но бывают ситуации когда сделать НАДО, а очень сильно не хотца

Цитата:
Транзакця стартует в момент вызова метода post
вообще-то да

Цитата:
либо вручную управлять
я так и делаю. Сначала, используя Fib+,я  делал все на автомате, в етих компонентах автокомит по умолчанию, но пару раз напоровшись на не полную  запись в М-Д перешол на управление ручками.глупый вопрос -
Цитата:
через ренджи
ето куда ,  
я постю все таблички а уже потом комитю
 
 

Всего записей: 2127 | Зарегистр. 09-04-2003 | Отправлено: 16:22 27-10-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ето куда

При автоматической М-Д через MasterSource и MasterFields валится слишком много селектов и при изменении любого поля мастера рефрешатся все детали. Можно повесится на OnChange мастера и обновлять детали вручную, отслеживать ренджи и обновлять детали только если меняются ключевые поля.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 16:31 27-10-2011
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wasilissk

Цитата:
PS: я редко когда использую не дбконтролы.

Согласен. Одна формочка на 200.
XPerformer

Цитата:
если большая лень писать код - тогда лутше сменить профессию

Лишний код - головная боль сопровождать такое. И к лени это не имеет отношение. Чтобы добавить реквизит в таблицу в случае с ХП надо добавить поле, изменить процедуру, добавить контрол, изменить код программы.  И все надо прописать причем одинаково. И данную тему я бы не назвал холиваром. Эти вещи относятся к основам структурного программирования и, если не хочешь головной для программы длительного сопровождения, надо соблюдать.  
 

Всего записей: 2596 | Зарегистр. 18-05-2005 | Отправлено: 17:01 27-10-2011
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
ренджи

я не понял что ето такое?
Цитата:
и обновлять детали только если меняются ключевые поля
я честно с такой ситуацией не встречался.Имеется ввиду поля ,через которые реализуется связь табличек?

Всего записей: 2127 | Зарегистр. 09-04-2003 | Отправлено: 17:01 27-10-2011
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Samotek

Цитата:
Лишний код - головная боль сопровождать такое. И к лени это не имеет отношение. Чтобы добавить реквизит в таблицу в случае с ХП надо добавить поле, изменить процедуру, добавить контрол, изменить код программы.  

 
Добавить поле придется в любом случае
А дальше зависит от архитектуры проекта.
Если все поля описаны с помощью метаданных, и есть надстройка, которая умеет работать с полями по их типам, дальше все на автомате. В больших проектах именно так и делают.
Только на методику комита в базу данных это никак не влияет.
Если его делать после того, как пользователь полностью скорректировал сложный М-Д документ, есть большой шанс запороть изменения другого пользователя.
Если по ходу редактирования - документ теряет целостность, даже и свету не надо моргать. В многопользовательской среде, как говорится, клювом не щелкай, кто-нибудь да втелющится между двумя коммитами и все испортит.
В итоге как ни крути, приходится блокировать документ на время редактирования.  
 
Добавлено:
ну и как бы опять оффтоп - головная боль сопровождать мутный непоследовательный код. Большое количество качественно написанного и хорошо отдокументированного кода сопровождать райское наслаждение, точно говорю...

Всего записей: 2567 | Зарегистр. 20-06-2011 | Отправлено: 17:13 27-10-2011
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий
ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru