| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Обновление данных... Requery |
| Автор: Treefeed 15.4.2005, 15:57 |
| Доброго времени суток. Такая ситуация: Использую ADO, Microsoft.Jet.OLEDB.4.0. В главной форме открыт ADODataSet. Для редактирования данных использую модальную форму, которую динамически загружаю из Dll. В модальной форме открываю другой ADODataSet(соответственно и ADOConnection другой) и беру те же данные, что и в главной форме. После закрытия модальной формы в главной делаю ADODataSet1.Requery. Вопрос: почему обновление в главной форме иногда происходит а иногда нет? Если после изменения данных опять открою модальную форму для изменения, то предыдущие изменения видны, хотя в главной их не видно. Может можно как-то заставить обновить какую-то определенную запись? |
| Автор: offline 15.4.2005, 16:22 |
| >и беру те же данные, что и в главной форме ты радотаешь с одной базой или с несколькими и вообще БД какая? А зачем в другой форме открывать дубликат набора данных. Просто перенеси данные текущей записи (которую хочешь редактировать) в модальную форму, меняй их там как душе угодно, а при закрытии этой формы (или по нажатию кнопочки) делай проверку на данные. Если они тебя удавлетворяют, то просто меняй их в первом наборе данных. Может и Requery не понадобиться. Но второй ADOConnection и второй ADODataSet это иж точно. |
| Автор: Guest 15.4.2005, 17:08 |
| Работаю с одной базой(Access 2003) А данные как переносить? Просто прередавать строковые константы? |
| Автор: Treefeed 15.4.2005, 17:17 |
| kirilllius Или может можно как-то передать курсор? Кстати после того, как повторно(или третий раз.... |
| Автор: offline 15.4.2005, 17:37 |
| Да, просто строковые константы в TEdit или TMemo и т.п. А после внесения изменений, что-то типа Процедура кнопки принять проверка введеных данных на удовлетворение условий и если что-то не нравиться то прекратить выполнение процедуры (Exit) (ну конечно если нужно проверять введенные данныее) набор данных открыть для редактирования или для вставки (Edit или Append) передать данные в базу принять изменения в наборе данных (Post) и затем закрыть наше окошко (Close) |
| Автор: Treefeed 16.4.2005, 11:09 |
| И что, передавать в Dll около 15 строк? Это конечно можно... Я думал что может есть что-то получше, чем передавать строки... |
| Автор: offline 16.4.2005, 18:45 |
| А для каких челей dll нужен? |
| Автор: Treefeed 17.4.2005, 12:50 |
| А для чего вообще Длл-ки нужны? |
| Автор: offline 17.4.2005, 13:19 |
| Если у тебя там только модальное окно храниться то |
| Автор: Treefeed 17.4.2005, 19:18 |
| Это уже А по делу? |
| Автор: offline 17.4.2005, 19:21 |
| Что по делу? Я не понял. Что тебя интересует, опиши задачу и что делает твоя dll. |
| Автор: Treefeed 18.4.2005, 11:08 | ||||
В модальном окне редактирую данные. А при выходе:
В главной форме:
Но изменения видны не сразу, а после того как сделаю ADODataSet1.Requery 2-3, а то и больше раз. |
| Автор: offline 18.4.2005, 15:30 |
| А зачем в модальной форме пользоваться компонентами ADO. Я же говорил, просто переноси в простые компоненты, а затем назад TFORM1. DataSet.Edit; // ADODSFactories: TADODataSet TFORM1. DataSet.FieldByName('A_REGION').AsInteger := StrToInt(Edit1.Text); TFORM1. DataSet.FieldByName('GROUP').AsInteger := StrToInt(Edit2.Text); ... TFORM1. DataSet.Post; TFORM1. DataSet - это DataSet находящийся на главной форме а перед вызовом модального окна ТМодальное окно.Edit1.Text := DataSet.FieldByName('A_REGION').AsString; ТМодальное окно.Edit2.Text := TFORM1. DataSet.FieldByName('GROUP').AsString; и удали из модального окна все компоненты ADO заменив их на простые и DataSet ведь он открыт у тебя в главном окне. Зачем два раза открывать одни и те же данные это ведь память жрет. |
| Автор: Treefeed 18.4.2005, 17:38 |
| В базе добавление планируется производить редко, а редактирование - еще реже. Поэтому я использую динамическую загрузку модальной формы(она используется для редактирования и добавления) из Dll. Так я меньше жру память - форма то динамически загружается. Если же делать модальную форму в Exe-файле так тогда память будет постоянно выделяться под модальную форму. Но я так и не понял, почему обновления видны не сразу... |
| Автор: offline 18.4.2005, 18:17 | ||||
А попробуй Форма.Showmodal - для показа Форма.Free - для удаления ее из памяти после Форма.Close Модальная форма занимает намного меньше памяти чем второй экземпляр набора данных (на мой взгляд).
Попробуй внести изменения не во второй открытый набор данных (вообще его не открывай), а непосредственно в самнабор данных вот и посмотришь результат. Обнавления будут ведны сразу. Поэтому делай, как писал выше |
| Автор: Treefeed 18.4.2005, 21:37 |
| Ок. Проверю. Спасибо за информацию |