Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Сохранение TADOQuery [D7, 2003]


lewka ©   (05.10.18 00:34

Привет! Подскажите , пожалуйста, в такой ситуации:
Есть TdbGridEh c TAdoQuery.
В TAdoQuery выполняю запрос:

select
name_benefit,
(mnn+', '+f_ls+', '+sum+', №'+str(kol_v_upak, len (kol_v_upak))) as ls,
cause from detal_orders
inner join benefit on  benefit.id = detal_orders.benefit
inner join sp_ls on sp_ls.id_ls=detal_orders.ls_id
where detal_orders.Parent_id = 1

В Гриде все хорошо отображается, но как только если изменить значение какого-нибудь поля появляется ошибка not edit or insert mode.

Подскажите, как не сохранять данные через Квери, а просто забрать значения, чтобы после их обработать?


sniknik ©   (05.10.18 10:38[1]

> ошибка not edit or insert mode.
означает буквально то, что написано, датасет не в режиме редактирования/вставки, чтобы переключить в этот режим нужно у него процедуру вызвать - AdoQuery.Edit;/.Insert;
проблема в том, что грид этого сделать не может... причин куча, но вот что конкретно тут вижу
1 отсутствие в запросе ключевого поля, без него неизвестно какую запись редактировать.
2 вычисляемое поле... его вообще нельзя редактировать, выражение "в обратку" не разбираются.
3 составной запрос, неизвестно в какой таблице и по какой связи редактировать... тут нужно указывать "главную" таблицу.

> а просто забрать значения, чтобы после их обработать?
забрать куда?
в файл можно весь результат сохранить - SaveToFile.


lewka ©   (05.10.18 11:51[2]


> означает буквально то, что написано, датасет не в режиме
> редактирования/вставки, чтобы переключить в этот режим нужно
> у него процедуру вызвать - AdoQuery.Edit;/.Insert;
> проблема в том, что грид этого сделать не может... причин
> куча


А как сделать, чтобы TAdoQuery не пытался сохранить данные, а просто держал их в себе?


sniknik ©   (05.10.18 12:26[3]

"оторвать" коннект .Connection:= nil; или открыть в режиме ltBatchOptimistic и не выполнять последнюю операцию "загрузки на сервер". но может не помочь, если рекордсет/типы полей сервер вернул не редактируемого типа (ключи например часто не получается без смены типа редактировать);


lewka ©   (05.10.18 12:34[4]

А если в OnPostError прописать сохранение, как мне нужно?


sniknik ©   (05.10.18 12:46[5]

а сам то определишь однозначно запись которую нужно сохранить? если да то дерзай.
но не в ошибке, а в афтерпост к примеру, оригинальное событие можно "абортнуть" ну и т.д. с разными последствиями разобраться... но имхо проще все таки следовать правилам.


lewka ©   (05.10.18 12:52[6]

Понял. Спасибо


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо