Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Работа с TQuery + TDGrid

Автор: T34
Дата сообщения: 25.09.2002 14:03
Вообщем вопрос такой:
Есть приложение, которое отображает данные из запроса. (TQuery, TDataSourse, TDBGrid). Тут по нажатии кнопочки изменить пользователь проваливается в форму где изменяет данные, для текущей строки запроса и жмет кнопку сохранить. Как потом поменять данные в главной форме только для текущей строки???
Автор: Wowik
Дата сообщения: 26.09.2002 01:57
Изменять надо через TQuery кот. отображает данные на главной форме....
Автор: LeXaSS
Дата сообщения: 14.10.2002 17:12
Вообще то не совсем понятно, тут смотря какой у тебя запрос.
Если у тебя простой запрос, то записи можно спокойно менять, если проставить у TQuery RequestLive. Все изменения сохранятся после апдейта.
А вот если запрос сложный, по нескольким таблицам, то тогда такой фокус не пройдет и надо менять собственно таблицу, а потом перезапускать запрос (это, возможно, наиболее правильно при наличии отдельной формы редактирования).
Автор: vserd
Дата сообщения: 15.10.2002 08:40
T34

Цитата:
Как потом поменять данные в главной форме только для текущей строки???

Простым способом никак.

Один из вариантов решения.

Выполняешь вставку/обновление.
Запоминаешь значения ключевых полей.
query.Disablecontrols;
close;
open;
Find;
enablecontrols;

вот и все.
Если подумать, то можно написать универсальную процедуру, которая будет это все делать.
второй вариант прочитать про "живые" запросы.

Автор: apatit
Дата сообщения: 15.10.2002 08:47
T34

1. Можно воспользоваться компонентом TUpdateSQL для сохранения всех изменений, сделанных через TQuery.

2. Можно завести отдельный компонент TQuery, с помощью которого можно реализовывать апдейт, используя параметрический запрос для апдейта.
Автор: T34
Дата сообщения: 16.10.2002 08:34
Всем спасибо за ответы но вопрос. Пробовал много способов но проблему так и не решил. Дело все в том что со сложными запросами нельзя изменить отдельно значение поля для без перезапоса всего запроса. Это пока решается с помощью отдельной кнопочки обновить. Т.е. менять можно хоть пол часа, а когда захотишь глянуть на результатыт надо нажать на обновить. НО ВСЕ ЭТО НЕ ПРАВИЛЬНО.
Автор: Wowik
Дата сообщения: 16.10.2002 08:43
Если ты делаешь изменения отдельным запросом, то все прально....
Твой Датасет (кот. ты рефрешишь) и даже не знает совершенно, что ты меняешь данные.... для этого в поля датасета необходимо вписывать изменяемые значения....
Если же ты делаешь чрез TUpdateSQL то необходимо написать запрос на Refresh для одной записи Датасета к которому относится Апдейт (для сложных запросов это надо делать ручками, потому как автоматом он такую ересь порой выдает)
Автор: T34
Дата сообщения: 16.10.2002 09:34
Ну я пытался изменять значения через TQuery, но он все время ругается что данный запрос не открыт для изменения и ничего с ним сделать нельзя.
Автор: Wowik
Дата сообщения: 16.10.2002 09:37
T34
поставь CasheUpdates в true
Автор: T34
Дата сообщения: 17.10.2002 07:18
Ничего не понимаю. Все вроде делаю правильно. Ну прямое редактирование в яцейках DBGrid разрешено. Т.е. я могу руками там всякую фигню написать. НО пограмно ту же операцию сделать уже не получается Я имею ввиду Query1->FieldByName().... или
DBGrib->Colums->Item[1]->Value....
Ругается что Dataset не режиме добавления или редактирования.
Автор: Wowik
Дата сообщения: 17.10.2002 08:27
ну дык перед помещением значения в поле надо вызвать метод Edit() а после метод Post()
Автор: T34
Дата сообщения: 18.10.2002 12:24
Ура. Но все равно не стал делать через UpdateSQL. Сделал все через отдельный sql. Вроде пока работает. Только одна проблема осталась. Так как база на Access то не имею вожможностей писать хранимых процедур по добалению данных, а ПК в таблицах раставляется базой, при назначении полю типа последовательность. Следовательно при добалении записи я в поле с Primary Key ничего не передаю и оно само там как то генериться. Следовательно я не могу знать какое новое значение для основного ключа там сгенерилось. И следовательно не могу програмно добавить записть в DataSet. Так что на всех операциях добавления приходится перезапрашивать состояние таблицы. Ну я думаю что даннуй проблему малой кровь не решишь ((

Страницы: 1

Предыдущая тема: Как разделить слово на слоги


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.