TADOQuery добавление данных
есть компонент adoquery на главной форме.
затем запускаю 2ю форму(на ней тоже компонент adoquery).
добавляю новую запись. затем закрываю эту форму.
и на главной выполняется функция adoquery->refresh().
Почему я не могу получить доступ к добавленным данным?
только если 5 раз вызывать этот refresh, то они появляются.
есть компонент adoquery на главной форме.
затем запускаю 2ю форму(на ней тоже компонент adoquery).
добавляю новую запись. затем закрываю эту форму.
и на главной выполняется функция adoquery->refresh().
Почему я не могу получить доступ к добавленным данным?
только если 5 раз вызывать этот refresh, то они появляются.[/QUOTE]
ступил. извените. refres тут не причем. его вообще не надо использовать.
проблема была в этом:
[Och->Close();]-вот этой записи не было. добавил и все в поряде.
Och->SQL->Clear();
Och->SQL->Add("SELECT * FROM Och WHERE IDPlayers="+IntToStr(Players->Fields->Fields[0]->AsInteger));
Och->ExecSQL();
Och->Open();
если выходишь из программы и снова заходишь то данные появляються. может какой метод есть для обнавления данных.
тоесть я как понял данные измененны в бд а в dataset(или как там короче в операт. пам.)остаються старые. какой метод переносит данные из бд в dataset?
Не используй ExecSQL при запросе на чтение - он используется только для запросов на изменение. Метод Open выполяет запрос на выборку сам.
вот код на главной форме:
Och->Close();
Och->SQL->Clear();
Och->SQL->Add("SELECT * FROM Och WHERE IDPlayers="+IntToStr(Players->Fields->Fields[0]->AsInteger));
Och->Open();
вот код на 2й форме где добавляем данные:
Och->Insert();
Och->FieldByName("IDPlayers")->Value=idplayers;
Och->FieldByName("Data")->Value=data;
Och->FieldByName("Och")->Value=och;
Och->Post();
мне надо чтобы после добавления и выходи из 2й формы автоматом обнавлялась страница на главной форме.
а то мне приходится делать кнопку с обнавление и жать ее несколько раз. что не очень удобно!
помогите пожалуйста.
при добавлении, запись появляется в Access'е а компонент adoquery содержит старые данные. обновляется только после нескольких вызовов close()-open(). что за фигня???
причем вторая форма после выхода не удаляется а просто скрывается.
может стоит передать указатель на adoquery?
или просто 2ю форму каждый раз удалять при выходе и создавать при вызове.
или не понимаете вопрос?
спрашивайте. отвечу.
надо срочно. прогу уже сегодня выкладывать, а обнавление не работает.
скажите хотя бы где есть норм форум по C++ Builder?
Чтобы при изменении набора данных ADOQuery, автоматически менялось содержимое базы данных, объект должен иметь свойство UpdateType (вроде бы так пишется), равное "Optimistic"
Далее.... Задержки записи в БД вызваны кэшированием информации в компонентах программы, точнее - в соединении. Два компонента могут создавать разные подключения к одной БД, и у каждого будет свой кэш :(.
Если имеется несколько объектов интерфейса с БД, нужно использовать компонент ADOConnection, организующий соединение с БД. ConnectionString формируется в нём, а в компонентах доступа к данным используется свойство Connection (указатель на TConnection) - на первой форме связь между компонентами создаётся в дизайнере формы, а во второй форме это нужно делать вручную присваиванием адреса.
После этого, оба компонента будут иметь общий кэш.
Чтобы при изменении набора данных ADOQuery, автоматически менялось содержимое базы данных, объект должен иметь свойство UpdateType (вроде бы так пишется), равное "Optimistic"
Далее.... Задержки записи в БД вызваны кэшированием информации в компонентах программы, точнее - в соединении. Два компонента могут создавать разные подключения к одной БД, и у каждого будет свой кэш :(.
Если имеется несколько объектов интерфейса с БД, нужно использовать компонент ADOConnection, организующий соединение с БД. ConnectionString формируется в нём, а в компонентах доступа к данным используется свойство Connection (указатель на TConnection) - на первой форме связь между компонентами создаётся в дизайнере формы, а во второй форме это нужно делать вручную присваиванием адреса.
После этого, оба компонента будут иметь общий кэш.[/QUOTE]
огромное спасибо тебе. а то замучался искать в чем ошибка.
блин. опять не получается. теперь ошибка.
Надо создать на 2й форме указатель
"Form2" TADOConnection *conn;
и на первой форме сделать так:
"Form1_ButtonClick" Form2->conn=ADOConnection1;
пишет ошибку что не правильно указан Connection или ConnectionString.
я просто забыл во 2ю форму добавить заголовочный файл 1й.
теперь все работает. всем спасибо.