![]() |
|
|
![]()
|
|
| Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: нет Всего: 34 |
Люди, каким образом происходит Update через TDBGRid?
Есть необходимость делать обновление данных через грид в котором есть 5 колонок. После того как данные изменяются ко мне на сервер приходит сумасшедшее количество Updat'ов. Мне кажется что при Update одной строчки на каждое поле одной записи запускается по 1 запросу Update. Так ли это? Если да, то как этого избежать? |
|||
|
||||
| jack128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 18.5.2005 Репутация: нет Всего: 4 |
||||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 3 Всего: 13 |
Модификация одной записи одной таблицы - один update. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| jack128 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 18.5.2005 Репутация: нет Всего: 4 |
||||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 3 Всего: 13 |
Хмм. Человека интересует: На сколько я понимаю, дело обстоит следующим образом: TDBGrid говорит датасету, когда выполнить post и соответственно произвести update -> количество post-ов будет определять DBGrid. На модификацию одной записи DBGrid датасету скажет сделать один пост. Если компонент доступа к данным во время выполнения поста пошлет 1-н update, то я прав. Если он пошлет несколько update-ов, в чем очень сомневаюсь, то это не правильные пчелы, которые едят неправильный мед -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Fedia,
Зачем так горячиться? Компоненты доступа - одна песня, источник данных - другая. А в сумме - можно иметь разное совершенно количество update. BDE, DBExpress, ADO - совершенно по-разному кэшируют данные и обновляют. А есть еще UpdateMode, Cached Updates и куча чего, крутящегося ручками. Так что пока имеем "ошибку в 17 строке". Достаточно например, не определить явно, какие поля из таблицы идут в датасет, и будет обновляться схема данных. |
|||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 3 Всего: 13 |
SergeBS,
Лучше быть холодным или горячим, чем теплым. Но это оффтопик. Сорри. Заголовок темы:
Цепочку отправки update-ов при работе в TDBGrid я описал. Если я нигде не ошибся, то она верна в случае отсутствия дополнительных обработчиков событий, написанных "ручками". . Так можно ли привести пример, в котором при модификации одной записи одной таблицы на сервер БД поступит более одного update-а ? (в случае если в ручную не попортить стандартную схему потока данных). Да вроде вопрос конкретный, ели не брать во внимание возможные ошибки разработчика программы. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| SergeBS |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Fedia,
А насчет Cashed Update как? К DBGrid оно никаким боком не относится, и "ручками" тоже не надо работать. Например. Это я к тому, что DBGrid может "попросить", так сказать, update, но что будет в результате - не от него зависит. Поэтому, без уточнения, что за БД, что за компоненты доступа к данным применяются - "ошибка в 17 строке".
Уже привел:
Подробнее (на примере ADO): кинул на форму ADOTable, подключил к таблице, Fields Editor не вызывал: при любом обновлении вначале будет считываться схема данных таблицы, а потом уже - обновляться поля. |
||||||
|
|||||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 3 Всего: 13 |
Хех. Может я чего-то не понимаю, но это же не несколько update-ов. Это выборка структуры и 1-н update. -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Fedia,
Скорее всего так, так что пример получился неудачный. Попробую изложить точнее: DBGrid не определяет ни количество запросов, ни количество update. Это Data Control - элемент отображения, а не доступа. Я видел, например, систему, в которой нужно было заполнять несколько разных форм, касающихся одной записи, а данные запоминались только после заполнения последней. О разумности такого подхода я говорить не хочу. Просто если полей в записи много и они не умещаются в одну форму, то вполне получим - изменение 1 записи (не 1 поля!) - несколько update. |
|||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 3 Всего: 13 |
Начинаю обижаться
В вопросе автора ветки такого условия таки не было -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| SergeBS |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Fedia,
А у него вообще НИЧЕГО по поводу обновления не было. Например: к этому гриду докину 2 кнопки: commit и rollback. Дальше буду работать в этом гриде сколько хочу (ну почти сколько хочу сколько и каких update делать. Потому и "ошибка в 17 строке", т.е. - телепаты в отпуске. Какой сервер, какой доступ - я гадать не собираюсь. Немного цитат из док:
Вопрос: сколько будет update, если я изменил 1 запись? |
||||
|
|||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 3 Всего: 13 |
Да, он рулит необходимостью осуществлять или нет пост.
Похоже, что может послать все имеющиеся записи. Вот и пользуйся после этого TADODataSet -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
| Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: нет Всего: 34 |
Сорри, не мог доступится к форуму. Только прочел.
Именно. Я смотрел сколько и что он постит, так вот при кажом update он посылал всю таблицу! При условии репликации данных это просто ужас. СУБД MS SQL. Технология доступа ADO, толстый клиент. Спасибо за ответы. Скоро отпишусь, если поборю. Если у кого есть идеи как, можете описать. Пасип. |
|||
|
||||
| Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 3 Всего: 13 |
Mephisto,
Свойство MarshalOptions у TADODataSet установить в значение moMarshalModifiedOnly. За эту инф. спасибо SergeBS. По свойствам ADO почитать можно здесь. Правда, перевод корявый, но понять что к чему можно. Это сообщение отредактировал(а) Fedia - 11.8.2006, 14:25 -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |