|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Обновление данных в DBGrid
Использую БД Access, и естественно компонент ADO и DBGrid для отображения данных в моей программе. У меня в программе есть обработчик, который каждую секунду должен обновлять данные - я это делаю с помощью компонента ADODataSet - изменением параметра Active (false/true). Однако при обновлении таким способом заметно мерцание на экране (т.е. обновление данных в DBGrid). Можно ли как-нибудь по другому обновлять данные, чтобы не было заметно это? Заранее спасибо!
|
#2
|
||||
|
||||
Попробуй:
Код:
ADODataSet1.Refresh; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
|||
|
|||
А вот у меня почему-то не по первому, не по второму способу не получается... Работает только так: Если назначить кнопку на обновление инфы, да и то по 7-10 раз тыкать приходится.... Никто, ничего не подскажет?
|
#4
|
|||
|
|||
Аууууу, ХЕЛП-ХЕЛП-ХЕЛП!!!
Помогите с этой бедой. Все форумы облазил, везде пишут, что обновляться может, если сделать клозе; опен;. Но у меня не работает, помогите, чем можете... |
#5
|
||||
|
||||
Код в студию.
|
#6
|
|||
|
|||
Собссно код
Цитата:
Код:
procedure TForm1.DBGrid1DblClick(Sender: TObject); var uid: Integer; modal: TModalResult; begin //Беру uid-пользователя, которого выбрали uid := DBGrid1.DataSource.DataSet.Fields[0].AsInteger; //Беру данные о нем из бд ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('SELECT * FROM tbl_names WHERE uid=:uid'); ADOQuery2.Parameters.ParamByName('uid').Value := uid; ADOQuery2.Open; //Создаю форму, через которую редактирую инфу о пользователе frmAddClient := TfrmAddClient.Create(frmAddClient); //Для теста беру только имя клиента... frmAddClient.edtNameClient.Text := ADOQuery2.FieldByName('name').AsString; modal := frmAddClient.ShowModal; if modal = mrYes then begin //Обновляю данные в бд ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('UPDATE tbl_names SET name=:name WHERE uid=:uid'); ADOQuery2.Parameters.ParamByName('uid').Value := uid; ADOQuery2.Parameters.ParamByName('name').Value := frmAddClient.edtNameClient.Text; try ADOQuery2.ExecSQL except on E:EDatabaseError do //Если исключительная ситуация, то сообщить о ней ShowMessage(E.Message); end; // А вот тут как раз пытаюсь обновить инфу о пользователе в гриде.... :-(((( ADOQuery1.Close; ADOQuery1.Open; ADOQuery1.Refresh; end; end; PS: О положении курсора пока не заморачиваюсь, но если покажете как его "сохранить", буду очень благодарен... Последний раз редактировалось acl, 18.03.2008 в 19:32. |
#7
|
||||
|
||||
Сделал примерно то же самое, но с базой на SQL сервере - все работает нормально. Попробуй обновление (UPDATE) сделать внутри транзакции.
Местоположение курсора можно запомнить посредством закладок. |
#8
|
|||
|
|||
Цитата:
|