Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

модификация записей и отражение изменений на экране [D6]


Страницы:   1 2

Инна ©   (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]

СУБД?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо