![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Использую БД Access, и естественно компонент ADO и DBGrid для отображения данных в моей программе. У меня в программе есть обработчик, который каждую секунду должен обновлять данные - я это делаю с помощью компонента ADODataSet - изменением параметра Active (false/true). Однако при обновлении таким способом заметно мерцание на экране (т.е. обновление данных в DBGrid). Можно ли как-нибудь по другому обновлять данные, чтобы не было заметно это? Заранее спасибо!
|
|
#2
|
||||
|
||||
|
Попробуй:
Код:
ADODataSet1.Refresh; |
|
#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
|
|||
|
|||
|
Цитата:
|