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

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

Вставка записи после запроса [D7, MS Access]


Страницы:   1 2

Grinders ©   (2005-05-05 13:21:00) 

Приветы Мастера! Тут у меня такой вопрос встал:
Есть запрос который выводит данные по определенному условию, н-р:
SELECT day,summa FROM table WHERE month='Сентябрь'.
Так вот, данные показываются в форме через DBCtrlGrid, т.е. через объеты ввода. При выполнении запроса данные выводятся, но менять их нельзя, пробовал по разному (DBEdit, DBGrid).
Подскажите че-нить pls.
За раннее благодарен.


Johnmen   (2005-05-06 10:41:00) [1]

>AlexO ©   (05.05.05 19:19) [18]

Заглянул в хелп. Откопал тут один старый проект.
Не пользуюсь обсуждаемыми делами в части TUpdateSQL уже лет 5-6...
Признаю, что был неправ.


AleKo   (2005-05-06 09:06:00) [2]

При работе через ADO.
Необходимо в свойстве указать Таблицу в которой делаеш изменния.

Properties['Unique Table'].Value:=Имя таблици.

Пользуюсь ADO+MSSQL.

Если запрос без объединения то может проще пользоваться ADOTable ?


evvcom   (2005-05-06 08:34:00) [3]

Ну и делай с UpdateObject. Про это мы тут уже много написали. А чтобы агрегатные поля в гриде нельзя было изменять (это наиболее логично), то измени свойства этих полей ReadOnly на True (если поля строятся автоматом при открытии, то это можно сделать в обработчике AfterOpen)


Grinders   (2005-05-06 07:23:00) [4]

А RequestLive = True работает только если в запросе нет агрегатных ф-ий, т.е. даже с запросом с условием WHERE.


AlexO   (2005-05-05 19:19:00) [5]

Johnmen
У меня есть подозрение, что вы никогда не использовали UpdateObject, если вы позволяете утверждать, что CachedUpdates никак не связаны UpdateObject.
Мне не удалось найти способа его использования без включения CachedUpdates. Если вы нашли, то поделитесь, буду очень благодарен.


AlexO   (2005-05-05 19:13:00) [6]

Johnmen
А как тогда трактовать строку в хелпе?

TBDEDataSet.UpdateObject
Specifies the update object component used to update a read-only result set when cached updates are enabled.


Johnmen   (2005-05-05 17:25:00) [7]

>AlexO ©   (05.05.05 17:09) [14]
>В таком случае подскажите другие способы обновления нескольких
>таблиц без использования CachedUpdates ?
>Я, к своему стыду, ничего не нашел.

На эту тему можно много долго и занудно рассуждать. :)
Вот только нужны четкие подробные входные данные...

>UpdateObject невозможно использовать без механизма кеширования или я не прав?

Не прав. Они никак не связаны...


AlexO   (2005-05-05 17:11:00) [8]

UpdateObject невозможно использовать без механизма кеширования или я не прав?


AlexO   (2005-05-05 17:09:00) [9]

Johnmen
В таком случае подскажите другие способы обновления нескольких таблиц без использования CachedUpdates ?
Я, к своему стыду, ничего не нашел.


Johnmen   (2005-05-05 16:59:00) [10]

>Следовательно этот механизм можно использовать для изменения не
>только одной таблицы, а нескольких,

НЕ следовательно.
Механизм кеширования никакого отношения к этому НЕ имеет.


AlexO   (2005-05-05 16:51:00) [11]

Это уж твое дело куда ты поместишь ApplyUpdates. Если после AfterPost, AfterDelete, то запись будет прозводиться сразу. Следовательно этот механизм можно использовать для изменения не только одной таблицы, а нескольких, что невозможно при использовании RequestLive.


evvcom   (2005-05-05 16:41:00) [12]


> Ничего не оттягивает

Вот именно оттягивает до ApplyUpdates. Если CachedUpdates=False, то ничего этого писать и вовсе не придется. Это нужно на случай, если пользователь решает отменить ему или принять изменения. А если сразу в AfterPost, то лучше и вовсе этого не делать. Имхо.


AlexO   (2005-05-05 16:33:00) [13]

Ничего не оттягивает, если сразу после AfterPost, AfterDelete сделать ApplyUpdates:

procedure TDataModule.QueryAfterPost(DataSet: TDataSet);
begin
if TDBDataSet(DataSet).UpdatesPending then
with TDBDataSet(DataSet) do
try
 ApplyUpdates;
 CommitUpdates;
except
 CancelUpdates;
 raise;
end;
end;


evvcom   (2005-05-05 16:21:00) [14]


> >Тогда проверю RequestLive без UpdateObject. Даже интересно
> стало.
>
> Всё зависит от вида самого запроса.


Проверил. Действительно работает для случая в Query SELECT ... FROM ... как на локальных, так и на серверных (проверял на Оракле) БД. Но как только в Query вставлешь вызов хранимой процедуры и RequestLive=True ругается при открытии. И это понятно. Видать с хранимками без UpdateObject точно не получится. Вероятно, если в select напихать join-ов, то тоже ничего или частично не получится.


Виталий Панасенко   (2005-05-05 16:10:00) [15]

Движок хоть какой ? БДЕ/АДО/ODBC ?


Johnmen   (2005-05-05 15:39:00) [16]

>Тогда проверю RequestLive без UpdateObject. Даже интересно стало.

Всё зависит от вида самого запроса.


evvcom   (2005-05-05 15:19:00) [17]

Я почему-то также думал про CachedUpdates. Но в последнее время, используя ODAC, выяснил, что это только оттягиваетмомент записи (обновления). Может это только в ODAC так реализовано, но я сомневаюсь в этом. Скорее всего так реализовано в родителе и в ODAC никак не затронуто. А в исходники лезть сейчас неохото.

> Это не соответствует действительности.

Тогда проверю RequestLive без UpdateObject. Даже интересно стало.


AlexO   (2005-05-05 14:52:00) [18]

Почитай про Cached Updates, это поможет.


Johnmen   (2005-05-05 14:20:00) [19]

>evvcom ©   (05.05.05 14:16) [3]
>Без этого ReadOnly.

Это не соответствует действительности.


evvcom   (2005-05-05 14:16:00) [20]

А select у тебя где сидит? У TQuery есть свойство UpdateObject. И есть компонент TUpdateSQL. Без этого ReadOnly.


Страницы:   1 2

Наверх

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