![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
модификация записей и отражение изменений на экране [D6]
Инна © (2003-03-24 17:11:00)есть пара ADOQuery (с запросами по параметрам). так вот нужно, чтобы: клик по 1 запросу - запоминание данных - клик по второму запросу (ну по дбгриду) и перенос данных (т.е. модификация записи). я так понимаю, что для модификации записей нужен отдельный ADOQuery, и внесение через параметры. Но если так, то придется закрывать и открывать 2 запрос заново, для обновления данных в дбгриде. Но можно ли сделать как-нибудь по-другому, чтобы не мелькал на экране весь дбгрид, а обновлялась только одна строка, которую юзер меняет?
Stas (2003-03-26 15:36:00) [1]Ты попробуй сделать так:
На нажатие Button1
AdoQuery1.Insert;
AdoQuery1.fieldByName ("Id").AsInteger:=5;
Инна (2003-03-26 15:34:00) [2]Ребята!!! кинула на форму ADOConnection- ВСЕ ПОЛУЧИЛОСЬ!!! и так и этак, прям как у Агнии Барто "Я и боком, и на месте, и двумя нгами вместе" - и через Open, Close и как Sniknik говорил, короче по-всякому!!! СПАСИБО ВАМ огромное!!! всех люблю и целую! фуффффф....
Инна (2003-03-26 15:27:00) [3]Проверь CursorLocation на 2 запросах и на ADOConnection должнобыть CLServer.
И делаешь так:
Выполняешь обновление данных (любым оьразом);
Query1.Close;
Query1.Open;
да, на 2 запросах посталвила, ADOConnection у меня на форме нет, так и делаю - не обновляется сразу. со второго раза. может, данные не сразу записываются?
Инна (2003-03-26 15:23:00) [4]народ, наверняка вы как-то делаете пободные действия (это не что-то экстраординарное, а самое обычное коррект записей), не могли бы вы привести коды, пусть через ADOQuery или ADODataSet, и тексты запросов. ну т.е. то, что у вас работает и как можно развернутей... буду очень признательна!!!!!
да, если это имеет какое-то значение, то доступ к базе у меня по udl-файлу.
Stas (2003-03-26 15:23:00) [5]Проверь CursorLocation на 2 запросах и на ADOConnection должнобыть CLServer.
И делаешь так:
Выполняешь обновление данных (любым оьразом);
Query1.Close;
Query1.Open;
Инна (2003-03-26 15:12:00) [6]нет. я сделала по совету Sniknika простейшее приложение - 2 ADOQuery, один select, другой update, 1 датасорс, 1 ДБгрид.
Stas (2003-03-26 15:08:00) [7]Сетка у меня 100 мб.
Но MSSQL значительно быстрее Access"a.
А у тебя случайно LookUp полей нет ?
Инна (2003-03-26 15:04:00) [8]у меня тоже третий - 933, работаю на одном компе (а потом -то по сетке будет), мерцания нет, но сволочь, тоже обновляет не сразу. если по ADOQuery1.Refreshu делать. Может это гадский Access?
у тебя какая сетка?
Инна (2003-03-26 14:58:00) [9]ADOQuery1.Active then begin
ADOQuery2.Close;
ADOQuery2.Parameters.ParamByName("Ppr").Value:="строка";
ADOQuery2.ExecSQL;
есди вот так заменить+ в запросе написать update ras set pr=:Ppr where ID=1; тоже только по второму разу обновляется.
блин, тривиальная задача, и не идет...
Stas (2003-03-26 14:57:00) [10]Да я имею введу компьютер. Я к чему спрашиваю у меня PIII-1200 Работаю под MSSQL по сети, Обнавляю таким образом Close-Open, мерцания не заметно.
Инна (2003-03-26 14:52:00) [11]НАЖМИ РАЗ, И ЖДИ. у тебя просто код неоптимальный.
мне тоже такая мысль в голову приходила - не дожидаюсь. ну больше 30 секунд жду! ужас. вот пока пишу, типа даелается - ноль реакции, пока 2 раз не нажмешь.
а узнаю, потому что если второй раз не кликать, то при перезагрузке приложения, там уже новые данные. какой самый оптимальный? и потом, у меня все на одном компе, я понимаю, если бы по сетке так глючило...
Стас, что значит тачка? у меня ADOQuery - поставила, не работает. только по второму клику обновляет.
Stas (2003-03-26 14:46:00) [12]Инна, а какая у тебя тачка ?
Поставь на DATASET CursorLacation:=ClServer;
Соловьев (2003-03-26 14:46:00) [13]НАЖМИ РАЗ, И ЖДИ. у тебя просто код неоптимальный.
Инна (2003-03-26 14:45:00) [14]да, быстро. ну не сверхбыстро, ну так, как будут нажимать пользователи. когда делала по шагам, то раз на раз не приходится - то сразу(!!!) цепляет (1 раз где-то из 5), то на 2, то на 3 раз. с параметрами я могу попробовать только, если код запроса написан заранее, и только параметры доопределяются. потому что в рантайме определить запрос и параметры у меня не получается.
Соловьев (2003-03-26 14:31:00) [15]
> НЕ работает. обновляет только после 2 или 3 клика по таблице
ты бысто нажимаешь? как вообще узнаешь что оно что-то поменяло, у тебя там довольно таки неоптимальный код(с параметрами быстрее будет на порядок)....
Инна (2003-03-26 14:28:00) [16]решила пока с этими параметрами не связываться - чтобы исключить ощибку при их использовании. привожу код
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var BookPoint: TBookmark;
begin
if ADOQuery1.Active then begin
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add("update ras set pr=""работает"" where id=1");
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 ras");
ADOQuery1.Open;
end;
end;
НЕ работает. обновляет только после 2 или 3 клика по таблице.
может, у меня что с установками где-то не в порядке? за DataSET не бралась. хотя мне нужно, чтобы просто работало, а через query или set - все равно.
Соловьев (2003-03-25 18:05:00) [17]
> ADODATASET нельзя использовать для SQL-операторов, таких
> как DELETE, Insert, Update, потому что они не возвращают
> результатов.
ADODataSet это почти как Таблица, там есть DeleteSQL, UpdateSQL, InsertSQL.
Инна (2003-03-25 18:00:00) [18]Соловьев, сейчас Access, но хотелось бы универсальности интерфейса, т.к. вот-вот буду к нормальной базе на MSSQL цеплять. Access-для того, чтобы хоть что-то в полях светилось. понимаю, что это неверный подход, но вот так просят меня :)
sniknik, щас попробую. только напишу уже к ночи ближе. Спасибо!
как раз самое время давать советы!!! я читала,что ADODATASET нельзя использовать для SQL-операторов, таких как DELETE, Insert, Update, потому что они не возвращают результатов. А Commsnd я еще даже не смотрела. думаешь, лучше через них и сразу? может, зря я здесь голову ломаю или там так же делается?
вообще-то задача максимум - сделать максимально универсальный интерфейс, котоорый после MSSQL может перекинут на Oracle (с минимальными правками). Это вообще возможно или из области фантастики? Еще раз спасибо!
sniknik (2003-03-25 17:37:00) [19]> не работает, со знаком : и ?
параметры со знаком :, генерируются автоматически при занесении запроса в компонент (должно стоять ParamCheck = true)
с ? должон создавать руками ParamCheck = false
раз добавляеш запросы в рантайме то должно
...SQL.Clear;
...SQL.Add("update ras set pr=ppr where id= :Ppr);
...ExecSQL;
когда передаеш через Value то и тип желательно указывать.
..ParamByName("Ppr").DataType:= ftString; //ну для ID надо ftInteger как понимаю
..ParamByName("Ppr").Value:= "проба";
или он у тебя десигне установлен?
(не время давать советы, но в ADO лутше пользоватся не ADOQUery а ADOCommand и ADODataSet)
Соловьев (2003-03-25 17:07:00) [20]СУБД?