Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TQuery против TTable


Страницы:   1 2

Delphi basic ©   (2006-06-23 11:42:00) 

Для клиент-серверного приложения, когда желательно уменьшить объем сетевого трафика, в хелпах советуют использовать TQuery. А есть ли другие причины? Например, пусть имеется 1000 строк в таблице, из них отбирается 10. Что передается клиенту в каждом случае:
IBQuery - только 10 строк, отобраных SQL-запросом,
IBTable - вся 1000, из которой уже на клиенте отфильтровывается 10?


Desdechado   (2006-06-27 15:52:00) [1]

И это, кстати, никоим образом не касается сервера БД, на котором реализована программа.


Desdechado   (2006-06-27 15:51:00) [2]

> а почему бы системе в момент открытия уже редактируемого кем-то док-та
Это или неверное проектирование (когда не выяснили бизнес-процессы и возможность одновременной работы над документом для разруливания оного), или неверно розданные полномочия (например, когда пользователи работают на запись только со своими документами и нет "общих").


Игорь Шевченко   (2006-06-27 15:47:00) [3]


> > Тогда, получается, если в таблице 1млн. записей, из которых,
>  
> > допустим, нужно отобрать только 100, то TTable все их
> сначала
> > затащит на клиента, а потом будет фильровать? жуть...
>
> ага.


О сколько нам открытий чудных готовит просвещенья дух.


Sergey13   (2006-06-27 15:34:00) [4]

>Посмотрел я, как в одной довольно серьезной системе реализована параллельная работа пользователей - жуть.

На любой связке БД-компоненты такое можно сделать. А можно не сделать. 8-)


Delphi basic   (2006-06-27 15:23:00) [5]


> > Delphi basic ©   (23.06.06 13:49) [26]
> > Всем спасибо за советы и обоснованную критику.
> > Я понял, что от Query мне никуда не деться :)
> >
>
> Используй IBDataSet, и смотри
> > Desdechado ©   (23.06.06 12:46) [17]
> > Идея верна, реализация жутковата.
> >
> > > DBEdit не идут, т.к. датасет нередактируемый (IBQuery)
> > Идут-идут. Только потом нужно почитать про значения свойств
>
> > InsertSQL, UpdateSQL, DeleteSQL


В общем, поставил я FIBPlus. Более менее разобрался.
Правда, вот на что внимание обратил. Посмотрел я, как в одной довольно серьезной системе реализована параллельная работа пользователей - жуть.
Ситуация: есть документ.
1) Юзер 1 открывает его для редактирования.
2) Юзер 2 открывает его для редактирования.
3) Юзер 1 сохраняет изменения.
4) Юзер 2 сохраняет изменения.
5) Юзер 1 открывает тот же документ и очень удивляется увиденному
(а почему бы системе в момент открытия уже редактируемого кем-то док-та
не предупредить об этом юзера 2 и не запретить редактирование? Юзер 1, может, ночь не спал, редактируя его?)

Меня возможность такой коллизии в довольно серьезной системе (используется в электроэнергетике и нефтяной отрасли) очень неприятно удивила...


Виталий Панасенко   (2006-06-23 16:02:00) [6]


> Delphi basic ©   (23.06.06 13:49) [26]
> Всем спасибо за советы и обоснованную критику.
> Я понял, что от Query мне никуда не деться :)
>

Используй IBDataSet, и смотри
> Desdechado ©   (23.06.06 12:46) [17]
> Идея верна, реализация жутковата.
>
> > DBEdit не идут, т.к. датасет нередактируемый (IBQuery)
> Идут-идут. Только потом нужно почитать про значения свойств
> InsertSQL, UpdateSQL, DeleteSQL


evvcom   (2006-06-23 14:15:00) [7]


> Просто данные из таблицы отбираются одним квери, а апдейты,
> инсерты и делейты - другим.

А [17] в игнор попал? За что ж?


Delphi basic   (2006-06-23 13:49:00) [8]

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


Sergey13   (2006-06-23 13:48:00) [9]

> [24] Delphi basic ©   (23.06.06 13:46)

Да уж, Чебурашка тут не катит.


Delphi basic   (2006-06-23 13:46:00) [10]


> Desdechado ©   (23.06.06 13:34) [23]
> а, может, почитать книжки?

Я их в свое время жуткое количество перечитал. Жалко, тогда по программированию не попадались :)


Desdechado   (2006-06-23 13:34:00) [11]

а, может, почитать книжки?


Delphi basic   (2006-06-23 13:31:00) [12]

А может, все это делать через StoredProc?


Delphi basic   (2006-06-23 13:28:00) [13]


> Sergey13 ©   (23.06.06 12:57) [19]
> 2[18] Delphi basic ©   (23.06.06 12:51)
> > Да... по сравнению с Table код рааспухает прямо на глазах.
> ..
> Это от незнания и от упертости в своем незнании.
> Напиши у кверика в запросе
> select * from table
> (что собственно и происходит при использовании ТТабл),
> и код обработки вообще не будет отличаться.

Так я у квери так и записал. Просто данные из таблицы отбираются одним квери, а апдейты, инсерты и делейты - другим.


Desdechado   (2006-06-23 13:03:00) [14]

> код рааспухает прямо на глазах...
За все нужно платить. За гибкость - особенно.
Ttable - для ленивых. Если ты такой, забудь все говоренное тебе, пользуйся своей ленью.


Sergey13   (2006-06-23 12:57:00) [15]

2[18] Delphi basic ©   (23.06.06 12:51)
> Да... по сравнению с Table код рааспухает прямо на глазах...
Это от незнания и от упертости в своем незнании.
Напиши у кверика в запросе
select * from table
(что собственно и происходит при использовании ТТабл),
и код обработки вообще не будет отличаться.


Delphi basic   (2006-06-23 12:51:00) [16]


> Идея верна, реализация жутковата.

Можно, конечно, и параметры использовать...
Да... по сравнению с Table код рааспухает прямо на глазах...


Desdechado   (2006-06-23 12:46:00) [17]

Идея верна, реализация жутковата.

> DBEdit не идут, т.к. датасет нередактируемый (IBQuery)
Идут-идут. Только потом нужно почитать про значения свойств InsertSQL, UpdateSQL, DeleteSQL


Sergey13   (2006-06-23 12:45:00) [18]

2 [14] Delphi basic ©   (23.06.06 12:41)
>Как я понял, при работе с Query последовательность такая:
Это один из вариантов. Не самый плохой. Основной недостаток - необходимо переоткрыть исходный датасет для визуализации изменения на клиенте.


Danilka   (2006-06-23 12:45:00) [19]

[14] Delphi basic ©   (23.06.06 12:41)
Это один из кучи вариантов, причем, далеко не самый удачный. :)
Я-бы рекомендовал почитать что-нибудь. :)


Delphi basic   (2006-06-23 12:41:00) [20]

Как я понял, при работе с Query последовательность такая:
Пусть нужно отредактировать запись таблицы. Для редактирования берется текущая запись в DBGrid'е. Открываем окно, в котором поля записи раскидываются, допустим, по Edit'ам (DBEdit не идут, т.к. датасет нередактируемый (IBQuery)). После нажатия какой-нибудь кнопки закидываем их значения (пусть пока без проверки) в SQL.

 DataModuleMain.IBSQL_Temp.Close;
 DataModuleMain.IBSQL_Temp.SQL.Clear;
 DataModuleMain.IBSQL_Temp.SQL.Add('update subdivision set code = ''' +
   EditCode.Text + ''', name = ''' + EditName.Text + ''' where UI = ' +
   IntToStr(DataModuleMain.IBQuerySubdiv.FieldByname('UI').AsInteger));
 DataModuleMain.IBSQL_Temp.ExecQuery;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо