Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2009, 18:01   #1
DS75
Пользователь
 
Аватар для DS75
 
Регистрация: 20.04.2009
Сообщений: 50
По умолчанию Обновление данных DBGrid

Столкнулся вот с такой проблемой.
Имеется форма1, которая добавляет строку в таблицу. На форме2 через ADOQuery + DataSource построен - DBGrid, который отображает таблицу.
Так вот, когда я добавляю запись в форме1, а потом открываю форму2, то новая строка в DBGrid не отображается. Ее видно только после перезагрузки программы.
Кто знает, как сделать чтобы было видно все записи сразу?
Я проверял в access: форма1 добавляет строку сразу.
Кто нибудь сталкивался с таким ?

P.S. На форме2 сменил связку ADOQuery + DataSource на ADOTable + DataSource. Все работает правильно! Но мне нужен запрос

Последний раз редактировалось DS75; 24.04.2009 в 20:04.
DS75 вне форума Ответить с цитированием
Старый 24.04.2009, 21:06   #2
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

сделай adoquery.open на form2.show
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 24.04.2009, 21:43   #3
DS75
Пользователь
 
Аватар для DS75
 
Регистрация: 20.04.2009
Сообщений: 50
По умолчанию

Цитата:
сделай adoquery.open на form2.show
adoquery.open у меня уже существует. Вот обработчик:

Цитата:
procedure TForm2.FormCreate(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Schet where Statys= True');
ADOQuery1.Open;
DataSource1.DataSet:=ADOQuery1;
end;
Вы так имели ввиду ?

Последний раз редактировалось DS75; 24.04.2009 в 21:46.
DS75 вне форума Ответить с цитированием
Старый 25.04.2009, 00:30   #4
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

эту часть:
Цитата:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Schet where Statys= True');
ADOQuery1.Open;
DataSource1.DataSet:=ADOQuery1
лучше запихнуть в отдельную процедуру и вызывать ее, сначала в FormCreate, затем там где ты хочешь, чтобы таблица обновлялась, а именно, как сказал Dark_Spirit в Form2Show, а просто Open не пойдет, он попросту откроет старый запрос
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный (Мишель Монтень)
koma_grusha вне форума Ответить с цитированием
Старый 25.04.2009, 09:56   #5
DS75
Пользователь
 
Аватар для DS75
 
Регистрация: 20.04.2009
Сообщений: 50
По умолчанию

Спасибо Dark_Spirit и koma_grusha ! Все заработало когда обработчик переместил с события FormCreatе на FormShow.
DS75 вне форума Ответить с цитированием
Старый 08.06.2009, 09:34   #6
DS75
Пользователь
 
Аватар для DS75
 
Регистрация: 20.04.2009
Сообщений: 50
По умолчанию Помогите дописать программу ...

И снова не получается! Аналогичная ситуация. Я решаю ее способом описанным выше и выскакивает ошибка "cannot focus disabled or invisible windows"
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
SLUpdate;
ComboBox3.ItemIndex:=0;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select DISTINCT Category from Bluda');
ADOQuery1.Open;
DataSource1.DataSet:=ADOQuery1;
Nazupdate; // думаю ругается на эту строку т.к. без нее работает
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Nazupdate;
end;

procedure TForm1.Nazupdate;
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from Bluda where Category= "' + DBGrid1.SelectedField.AsString + '"');
ADOQuery2.Open;
DataSource2.DataSet:=ADOQuery2;
end;
Может свойства компонентов какие - то поменять нужно ?
DS75 вне форума Ответить с цитированием
Старый 08.06.2009, 11:33   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

видимо, грид еще не выбран по событию онШоу вот и не получается
по идее нужно процедуру сделать такой

Код:
procedure TForm1.Nazupdate(pCategory: string);
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from Bluda where Category= :p0 ');
ADOQuery2.Parameters.ParamByName('p0').AsString := pCategory;
ADOQuery2.Open;
DataSource2.DataSet:=ADOQuery2;
end;
а далее так - по событию ОнШоу передавать заранее известный параметр
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
Nazupdate('категория_1');
end;
а при перемещении по гриду соответственно выполнять процедуру
Код:
Nazupdate(DBGrid1.SelectedField.AsString);
soleil@mmc вне форума Ответить с цитированием
Старый 08.06.2009, 12:50   #8
DS75
Пользователь
 
Аватар для DS75
 
Регистрация: 20.04.2009
Сообщений: 50
По умолчанию

Заменил как вы написали, код работает, но обновления внесенные второй формой в первой все равно не отображаются
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
SLUpdate;
ComboBox3.ItemIndex:=0;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select DISTINCT Category from Bluda');
ADOQuery1.Open;
DataSource1.DataSet:=ADOQuery1;
end;

procedure TForm1.Nazupdate(pCategory: string);
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from Bluda where Category= :p0 ');
ADOQuery2.Parameters.ParamByName('p0').Value := pCategory;
ADOQuery2.Open;
DataSource2.DataSet:=ADOQuery2;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Nazupdate('Вторые блюда');
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Nazupdate(DBGrid1.SelectedField.AsString);
end;
Изменил только AsInteger на Value и "Категория_1" на "Вторые блюда".

Может будет проще если я объясню немного код.
На первой форме стоят две связки ДБГрид+ДатаСоурс+АДОКвери.
Первая связка показывает имеющиеся в таблице Категории блюда. При нажатии на Категорию Во втором ДБГриде Отображаются блюда из данной категории.

При обновлении таблицы из второй формы, Оба ДБГрида не обновляются...
DS75 вне форума Ответить с цитированием
Старый 08.06.2009, 13:41   #9
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от DS75 Посмотреть сообщение
При обновлении таблицы из второй формы, Оба ДБГрида не обновляются...
вот здесь я не очень понял - ты для данных из 2го грида делаешь какие-то апдейты/инсерты?
если так, то переоткрывай наборы данных

раз уж связка первого и второго грида ясна, то можно второй грид переоткрывать при каждом листании первого, прописав процедуру переоткрытия на собитие OnAterScroll первого датасета
soleil@mmc вне форума Ответить с цитированием
Старый 08.06.2009, 13:53   #10
DS75
Пользователь
 
Аватар для DS75
 
Регистрация: 20.04.2009
Сообщений: 50
По умолчанию

Все с ДБГридами проблему решил.
Установил
Код:
Form1.DataSource1.DataSet.Active := False;
    Form1.DataSource1.DataSet.Active := True;
на второй форме, там где значения изменялись.
Теперь вот как обновить АДОТэйбл ?
DS75 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBGrid и обновление данных в БД a_n_n_a БД в Delphi 1 02.08.2011 18:02
DBGrid запись и обновление a_n_n_a БД в Delphi 0 09.04.2011 06:03
Обновление данных в DBGrid и фокус строки. Serval БД в Delphi 10 05.06.2009 11:50
Обновление списка данных без потери данных в переменных VaBank БД в Delphi 13 03.06.2009 10:47
Обновление DBGrid + ADOQuery Demonk БД в Delphi 11 04.02.2009 13:42