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

Вниз

Вставка записи после запроса   Найти похожие ветки 

 
Grinders   (2005-05-05 13:21) [0]

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


 
Johnmen ©   (2005-05-05 13:30) [1]

RequestLive = True ?


 
-=XP=- ©   (2005-05-05 13:55) [2]

В SELECT неплохо было бы включить ключевое поле, иначе как найти запись, которую надо модифицировать? Возможно, это DAY?


 
evvcom ©   (2005-05-05 14:16) [3]

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


 
Johnmen ©   (2005-05-05 14:20) [4]

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

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


 
AlexO   (2005-05-05 14:52) [5]

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


 
evvcom ©   (2005-05-05 15:19) [6]

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

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

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


 
Johnmen ©   (2005-05-05 15:39) [7]

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

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


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

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


 
evvcom ©   (2005-05-05 16:21) [9]


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


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


 
AlexO   (2005-05-05 16:33) [10]

Ничего не оттягивает, если сразу после 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:41) [11]


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

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


 
AlexO   (2005-05-05 16:51) [12]

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


 
Johnmen ©   (2005-05-05 16:59) [13]

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

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


 
AlexO ©   (2005-05-05 17:09) [14]

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


 
AlexO ©   (2005-05-05 17:11) [15]

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


 
Johnmen ©   (2005-05-05 17:25) [16]

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

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

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

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


 
AlexO ©   (2005-05-05 19:13) [17]

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

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


 
AlexO ©   (2005-05-05 19:19) [18]

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


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

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


 
evvcom ©   (2005-05-06 08:34) [20]

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


 
AleKo   (2005-05-06 09:06) [21]

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

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

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

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


 
Johnmen ©   (2005-05-06 10:41) [22]

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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.035 c
3-1115549163
_e_u_
2005-05-08 14:46
2005.06.14
Добавление строки в таблицу ;)


4-1113558907
Alfa
2005-04-15 13:55
2005.06.14
HBitmap на форму


14-1117114879
lookin
2005-05-26 17:41
2005.06.14
Оформление сайта


1-1117521519
liver
2005-05-31 10:38
2005.06.14
Alt + F4


3-1115301106
Alexandr
2005-05-05 17:51
2005.06.14
DbgridEh и EditButton





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