Поиск:

Ответ в темуСоздание новой темы Создание опроса
> при добавлении записи данные не сразу выводятся, в DBGrid. Обновление информации в DBGrid 
:(
    Опции темы
Teleport
Дата 27.10.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 1
Всего: 6



вот так я подключаюсь к бд и добавляю в нее записи
Код

procedure TForm1.FormActivate(Sender: TObject);
begin

pp:= 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=plug_dop/sdreytui.mdb; Jet OLEDB:Engine Type=5;';
ADOTable1.ConnectionString:= pp;
ADOQuery1.ConnectionString:= pp;
ADOTable1.Active:=false;
ADOTable1.TableName:='plootc';
ADOTable1.Active:=true;
DataSource1.DataSet:= ADOTAble1;
ADOQuery1.DataSource:= DataSource1;
DBGrid1.DataSource:= DataSource1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('insert into plootc(plo) values(:Prm1);');
  ADOQuery1.Parameters.ParamByName('Prm1').Value:= Edit1.Text;
  ADOQuery1.ExecSQL;
  FormActivate(Self);
end;

только DBGrid отображает записи при старте программы, а потом я добавляю - а DBGrid не обновляется. Записи добавляются, смотрел в самой бд. 


--------------------
user posted image
user posted image 
PM MAIL   Вверх
belousov
Дата 27.10.2008, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 317
Регистрация: 21.11.2006
Где: Москва

Репутация: нет
Всего: 6



ну так, как я понимаю, после запроса на добавления не было запроса на выборку, поэтому он и данные старые показыавет...  надо после добавления ее обновлять еще раз прирнудительно


--------------------
NIHIL VERUM EST LICET OMNIA 
PM MAIL WWW ICQ Skype   Вверх
Teleport
Дата 27.10.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 1
Всего: 6



Цитата
адо после добавления ее обновлять еще раз прирнудительно


это понятно, но как тут обновить? вот чего и не пойму!

Добавлено через 1 минуту и 16 секунд
вот запрос на выборку
Код

  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select * from plootc');
  ADOQuery1.ExecSQL;


куда его запихнуть?  smile 


--------------------
user posted image
user posted image 
PM MAIL   Вверх
pseud
Дата 27.10.2008, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Teleport @  27.10.2008,  21:24 Найти цитируемый пост)
ADOQuery1.DataSource:= DataSource1;


обалдеть, из какой книги взято - ВЫКИНУТЬ эту строку

попробую подитожить, что ты хочешь
т.е. ты добавляешь данные при помощи Квери?
а отображаешь при помощи Табле?

Добавлено через 11 минут и 55 секунд
делай раз (сам с ADO не работаю, но попытаюсь):
1. новый проект.
2. кидаем на форму ADOConnection1, ADOQuery1, DataSource1 и DBGrid1.
3. все еще в дизайне делаем:
Код

ADOConnection1.ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=plug_dop/sdreytui.mdb; Jet OLEDB:Engine Type=5;';
ADOQuery1.Connection = ADOConnection1;
ADOQuery1.SQL = 'select * from plootc';
DataSource1.DataSet = ADOQuery1;
DBGrid1.DataSource = DataSource1;

3. 
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOConnection1.Connected := True;
  ADOQuery1.Active := True;  
end;

4.
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with ADOQuery1.Create(Self) do
  try
    Connection := ADOConnection1;
    SQL.Add('insert into plootc(plo) values(:Prm1)');
    Parameters.ParamByName('Prm1').Value:= Edit1.Text;
    ExecSQL;
  finally
    Free;
  end;

  ADOQuery1.Active := False;
  ADOQuery1.Active := True;
end;



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Данкинг
Дата 27.10.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Teleport @  27.10.2008,  21:24 Найти цитируемый пост)
Код

ADOQuery1.ConnectionString:= pp;

А это зачем? smile Запрос привязывается к AdoConnection в свойствах, т.е. в дизайнере.

А чтобы обновилось, переоткрыть попробуй:
Код

ADOTable1.Active:=false;
ADOTable1.Active:=true;


Цитата(pseud @  27.10.2008,  22:51 Найти цитируемый пост)
  
Код

ADOQuery1.Active := True;
 

Зачем запрос делать active? smile 




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 28.10.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 1
Всего: 6



2 pseud
Цитата
обалдеть, из какой книги взято - ВЫКИНУТЬ эту строку
 - вообще это я сам придумал )))

остальные пункты сделал - выдает ошибки во время выполнения приложения... 
Access violetion at address...



2 Данкинг, - 
Цитата
А это зачем?  Запрос привязывается к AdoConnection в свойствах, т.е. в дизайнере.


 - а затем, что в 2007 делфи гонят ADO компоненты. Там при разаработке приложения - нельзя поставить относительный путь к базе. Берется только абсолютный. Когда прописываешь в дизайнере относительный - то нельзя сделать, например, AdoTable1.Active:= true - через дизайнер. Да и вообще пишет, чтобы проверил правильность имен - говорит, что неверно подключение. Серьезно - это не мой косяк. Чтобы прога нормально работала- нужно при активации формы прописывать следующие строки:
Код

ADOConnection1.Connected := False;
pp:= 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=plug_dop/sdreytui.mdb; Jet OLEDB:Engine Type=5;';
ADOCOnnection1.ConnectionString:=pp;
ADOConnection1.Connected := True;


а на этапе разработки программы - пусть будет в дизайнере абсолютный путь. 

Цитата

А чтобы обновилось, переоткрыть попробуй:
Код

1:ADOTable1.Active:=false;
2:ADOTable1.Active:=true;


  



а так я пробовал уже - и ничего! smile  


Это сообщение отредактировал(а) Teleport - 28.10.2008, 00:24


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 28.10.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Teleport @  28.10.2008,  00:18 Найти цитируемый пост)
Чтобы прога нормально работала- нужно при активации формы прописывать следующие строки:

Чё-то я не врубаюсь, что ты хочешь сказать. Такие строки я в любой Дельфе прописываю для того, чтобы указать путь к БД относительно моего EXE-файла, или же тот путь, который выберет пользователь. smile 

Цитата(Teleport @  28.10.2008,  00:18 Найти цитируемый пост)
а так я пробовал уже - и ничего!

Тогда глобальней, т.е.

Код

ADOConnection1.Connected := False;
ADOTable1.Active:=false;
ADOTable1.Active:=true;
ADOConnection1.Connected := True;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Teleport
Дата 28.10.2008, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 5.7.2008
Где: Прибалтика

Репутация: 1
Всего: 6



2 Данкинг
 
Цитата

Чё-то я не врубаюсь, что ты хочешь сказать. Такие строки я в любой Дельфе прописываю для того, чтобы указать путь к БД относительно моего EXE-файла, или же тот путь, который выберет пользователь.  

я хочу сказать, что относительный путь к бд через дизайнер никак не задашь в 2007 делфи smile поэтому я и пишу эти строки в самой программе уже - чтобы относительный задавать. smile  smile 

Цитата

Тогда глобальней, т.е.

 - все равно - нет smile не хочет и все, блин!! Или у меня руки не оттуда выросли сегодня  smile ??

вобщем ничего так и не вышло...


--------------------
user posted image
user posted image 
PM MAIL   Вверх
Данкинг
Дата 28.10.2008, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Teleport @  28.10.2008,  01:40 Найти цитируемый пост)
поэтому я и пишу эти строки в самой программе уже - чтобы относительный задавать.

Ну, в общем, я так и делаю всегда. smile 

Цитата(Teleport @  28.10.2008,  01:40 Найти цитируемый пост)
не хочет и все, блин!!

А что не хочет-то - данные не обновляются после добавления запросом, или же "access violation" ?



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Deniz
Дата 28.10.2008, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 8
Всего: 44



Большую часть можно сделать в дизайнере уже говорилось в посте pseud.
Если чуток подправить твой код:
Код

// в дизайнере
ADOQuery1.SQL.Add('insert into plootc(plo) values(:Prm1);');

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.Parameters.ParamByName('Prm1').Value:= Edit1.Text;
  ADOQuery1.ExecSQL;
  ADOTable1.Active:=false;
  ADOTable1.Active:=true;
end;



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
vladimir74
Дата 28.10.2008, 10:21 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: 2
Всего: 3



я конечно извеняюсь, но разве у TADOQuery нету refresh? разве это не проще?
Код

  // тут кое как заносим даные  в наш квери
  ADOQuery1.ExecSQL;
  ADOQuery1.refresh; 

--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
pseud
Дата 28.10.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Teleport @  28.10.2008,  00:18 Найти цитируемый пост)
остальные пункты сделал - выдает ошибки во время выполнения приложения... Access violetion at address...


номер строки?  smile 

Цитата(Данкинг @  27.10.2008,  23:18 Найти цитируемый пост)
Зачем запрос делать active? 

дык DBGrid его вьювит потому что


Цитата(vladimir74 @  28.10.2008,  10:21 Найти цитируемый пост)
я конечно извеняюсь, но разве у TADOQuery нету refresh? разве это не проще?

извиняю  smile 
читай  smile 
Цитата

The Refresh method does not work for all TDataSet descendants. In particular, TQuery components do not support the Refresh method if the query is not “live”. To refresh a static TQuery, close and reopen the dataset.



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
vladimir74
Дата 28.10.2008, 11:08 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: 2
Всего: 3



Цитата(pseud @  28.10.2008,  08:40 Найти цитируемый пост)
Refresh method if the query is not “live”.

ну тогда дочитай сам до конца....
Цитата(pseud @  28.10.2008,  08:40 Найти цитируемый пост)
To refresh a static TQuery, close and reopen the dataset.

если верить  rtfm то active тоже не подойдет, толко close/open !!!!

--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
pseud
Дата 28.10.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(vladimir74 @  28.10.2008,  11:08 Найти цитируемый пост)
если верить  rtfm то active тоже не подойдет, толко close/open !!!!


а теперь смотрим в исходники метода ADOQuery1.Open и ADOQuery1.Close и видим:
Код

procedure TDataSet.Open;
begin
  Active := True;
end;

procedure TDataSet.Close;
begin
  Active := False;
end;



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Данкинг
Дата 28.10.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(pseud @  28.10.2008,  10:40 Найти цитируемый пост)
дык DBGrid его вьювит потому что

Так надо тогда .open , а не .active... smile 



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0600 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.