![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
модификация записей и отражение изменений на экране [D6]
Инна © (2003-03-24 17:11:00)есть пара ADOQuery (с запросами по параметрам). так вот нужно, чтобы: клик по 1 запросу - запоминание данных - клик по второму запросу (ну по дбгриду) и перенос данных (т.е. модификация записи). я так понимаю, что для модификации записей нужен отдельный ADOQuery, и внесение через параметры. Но если так, то придется закрывать и открывать 2 запрос заново, для обновления данных в дбгриде. Но можно ли сделать как-нибудь по-другому, чтобы не мелькал на экране весь дбгрид, а обновлялась только одна строка, которую юзер меняет?
Инна (2003-03-25 16:57:00) [21]пытаюсь на простом. у меня возникла совсем другая проблема - update она делать не хочет ни под каким соусом. может, я апдейт делать не умею...
так
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add("update ras set pr=ppr where id=pid");
ADOQuery2.ExecSQL;
не работает, со знаком : и ? тоже не работает - выдает ошибку синтаксиса. если делать через параметры, т.е. запрос определять заранее, а параметры в программе, т.е.
ADOQUery2.Parameters.ParamByName"PID").Value:=ADOQuery1.FieldByName("ID").Value;
ADOQUery2.Parameters.ParamByName("Ppr").Value:="проба";
тоже не работает!!!!!
ничего не вставляет!!!! вернее вставляет, но потом, когда приложение открываешь снова!
я уже устала и совсем запуталась. я не понимаю, почему один код работает и не работает одновременно.
sniknik (2003-03-25 14:19:00) [22]именно без морганий ти тд. клики и по таблице и по кнопке. без разници.
изменил на апдейт ADOQuery2.SQL.Add("UPDATE Table101 SET ID=ID+1");
то же самое. все путем.
попробуй самое простое, собери програмку с 1и гридом 1м коннектом 2мя запросами, в обшем по минимуму. и попробуй (уверен будет работать, а ошибка изза путаници)
Инна (2003-03-25 13:58:00) [23]у тебя т.е. сразу обновляется, когда по таблице кликнуть попробовал?
может, потому что у меня update а не insert? уж не знаю, на что кивать....
sniknik (2003-03-25 13:36:00) [24]да нет код правильный, даже повторил (думал изза того что на клик по гриду повешен такая хрень, но нет срабатывает и не моргает)
procedure TForm1.Button5Click(Sender: TObject);
var BookPoint: TBookmark;
begin
if ADOQuery1.Active then begin
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add("INSERT INTO Table101(ID,Otdel_ab,Tel) VALUES (1, ""Test"" ,""55555"")");
ADOQuery2.ExecSQL;
BookPoint:= ADOQuery1.GetBookmark;
try
ADOQuery1.DisableControls;
ADOQuery1.Requery;
ADOQuery1.GotoBookmark(BookPoint);
ADOQuery1.EnableControls;
finally
ADOQuery1.FreeBookmark(BookPoint);
end;
end else begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM Table101");
ADOQuery1.Open;
end;
end;
и
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Button5Click(self);
end;
а ошибка наверное в том что не тот грид и набор данный защищаеш, (обыкновенная путаница, у меня таблица выделена одна и таже а у тебя скорей всего разные, нет? и привязанные гриды различаются?).
Инна (2003-03-25 13:00:00) [25]в общем, простой Refresh дает такой же результат - изменения отражаются только при втором клике. а надо, чтобы сразу... и не моргал весь тдбгрид.
Инна (2003-03-25 12:32:00) [26]snikinik, когда делаю без букмарка, то все почти отлично - изменение видно только после второго клика на дбгриде, хотя обработчик - по клику ячейки. не есть хорошо. когда с букмарком, то изменения вообще не видны, только после перезапуска приложения. это вообще не катит, как ты понимаешь. вот сижу, думу думаю, книжку читаю.... код
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
ID:=ADOQuery1.FieldByName("ID").AsInteger;
ADOQuery4.Close;
ADOQuery4.Parameters.ParamByName("PID").Value := ID;
ADOQuery4.Parameters.ParamByName("Ppr").Value := A;
if not ADOQuery4.Prepared then ADOQuery4.Prepared;
ADOQuery4.ExecSQL; (тот самый, который изменения в таблицу вносит)
BookPoint:= ADOQuery1.GetBookmark;
try
ADOQuery1.DisableControls;
ADOQuery1.Requery;
ADOQuery1.GotoBookmark(BookPoint);
ADOQuery1.EnableControls;
finally
ADOQuery1.FreeBookmark(BookPoint);
end;
end;
наверняка ошибка самая-пресамая простая, но я ее не вижу.
Инна (2003-03-24 19:31:00) [27]так, спасибо, сегодня попробую, потом отчитаюсь или еще поспрашиваю.
:))) правда, правда. диплом пишу. а делфи последний раз курсе на 3 видела.
sniknik (2003-03-24 19:04:00) [28]> объясняйте, плз, развернуто, ну как для тупых, я еще не так шарю, чтобы с полуслова...
как ты так и тебе (прочитай свой вопрос много там информации? попытайся это понять считая что о своей программе ничего не знаеш а читаеш только вопрос. Понятно?)
> чтобы не мелькал на экране весь дбгрид
ADOQuery1.DisableControls;
ADOQuery1.Requery;
ADOQuery1.EnableControls;
позицию в которой курсор находится, сделай сначала так, поймеш зачем.
после запоминай позицию
можно использовать
GetBookmark
GotoBookmark
FreeBookmark
или Locate
или Filter и FindFirst
желательно чтобы был ключь (уникальное поле в таблице).
и в итоге делай так
BookPoint:= ADOQuery1.GetBookmark;
try
ADOQuery1.DisableControls;
ADOQuery1.Requery; //возможно придется заменить на close/open
ADOQuery1.GotoBookmark(BookPoint);
ADOQuery1.EnableControls;
finally
ADOQuery1.FreeBookmark(BookPoint);
end;
p.s. скажи ты на самом деле Инна, а не скажем Игорь?
(мучает меня этот вопрос, в жизни ни одной программистки не встречал, а на форуме их просто завались)
Инна (2003-03-24 18:21:00) [29]sniknik, это свойства чего? как сохранять позицию? позицию грида или запроса?
Соловьев, мне тоже :) а как по-другому можно модифицировать записи в запросе?
еще раз объясню предметно: есть бланк расписания группы, есть учебный план (АДОзапрос1 , АДОзапрос2), нужно учебный план раскидать по дням (т.е. составить расписание). я сдалала по кликам - кликаешь по предмету, запоминаем предмет, препода. кликаем по бланку расписания, вносим предмет с преподом на определенную позицию + меняем количество часов в учебном плане.
объясняйте, плз, развернуто, ну как для тупых, я еще не так шарю, чтобы с полуслова...
Соловьев (2003-03-24 17:17:00) [30]Ничего не понятно...
> я так понимаю, что для модификации записей нужен отдельный
> ADOQuery
не обязательно...
> обновлялась только одна строка, которую юзер меняет?
ADODataset...
sniknik (2003-03-24 17:16:00) [31]DisableControls
EnableControls
мелькать не будет. (+ позицию текущую сохранять востанавливать)