Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление данных... Requery, ADO, Microsoft.Jet.OLEDB.4.0. 
:(
    Опции темы
Treefeed
  Дата 15.4.2005, 15:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Доброго времени суток.
Такая ситуация:
Использую ADO, Microsoft.Jet.OLEDB.4.0.
В главной форме открыт ADODataSet. Для редактирования данных использую модальную форму, которую динамически загружаю из Dll.
В модальной форме открываю другой ADODataSet(соответственно и ADOConnection другой) и беру те же данные, что и в главной форме. После закрытия модальной формы в главной делаю ADODataSet1.Requery.
Вопрос: почему обновление в главной форме иногда происходит а иногда нет? Если после изменения данных опять открою модальную форму для изменения, то предыдущие изменения видны, хотя в главной их не видно.
Может можно как-то заставить обновить какую-то определенную запись?
  Вверх
offline
Дата 15.4.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



>и беру те же данные, что и в главной форме
ты радотаешь с одной базой или с несколькими и вообще БД какая?

А зачем в другой форме открывать дубликат набора данных. Просто перенеси данные текущей записи (которую хочешь редактировать) в модальную форму, меняй их там как душе угодно, а при закрытии этой формы (или по нажатию кнопочки) делай проверку на данные. Если они тебя удавлетворяют, то просто меняй их в первом наборе данных. Может и Requery не понадобиться. Но второй ADOConnection и второй ADODataSet это иж точно.

Это сообщение отредактировал(а) kirilllius - 15.4.2005, 16:47
PM MAIL   Вверх
Guest
Дата 15.4.2005, 17:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Работаю с одной базой(Access 2003)
А данные как переносить? Просто прередавать строковые константы?
  Вверх
Treefeed
Дата 15.4.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



kirilllius Или может можно как-то передать курсор?

Кстати после того, как повторно(или третий раз.... smile ) сделать Requery, то изменение все-таки видны. И все дальнейшие изменения работают нормально.

PM MAIL   Вверх
offline
Дата 15.4.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, просто строковые константы в TEdit или TMemo и т.п.
А после внесения изменений, что-то типа

Процедура кнопки принять
проверка введеных данных на удовлетворение условий и если
что-то не нравиться то прекратить выполнение процедуры (Exit)
(ну конечно если нужно проверять введенные данныее)

набор данных открыть для редактирования или для вставки (Edit или Append)
передать данные в базу
принять изменения в наборе данных (Post)

и затем закрыть наше окошко (Close)

PM MAIL   Вверх
Treefeed
Дата 16.4.2005, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И что, передавать в Dll около 15 строк? Это конечно можно... Я думал что может есть что-то получше, чем передавать строки... smile
PM MAIL   Вверх
offline
Дата 16.4.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А для каких челей dll нужен?
PM MAIL   Вверх
Treefeed
Дата 17.4.2005, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А для чего вообще Длл-ки нужны? smile
PM MAIL   Вверх
offline
Дата 17.4.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если у тебя там только модальное окно храниться то smile
PM MAIL   Вверх
Treefeed
Дата 17.4.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это уже smile
А по делу?
PM MAIL   Вверх
offline
Дата 17.4.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что по делу? Я не понял. Что тебя интересует, опиши задачу и что делает твоя dll.

Это сообщение отредактировал(а) kirilllius - 17.4.2005, 19:22
PM MAIL   Вверх
Treefeed
Дата 18.4.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В модальном окне редактирую данные. А при выходе:
Код

 if ModalResult = mrOk then
 Begin
   ADODSFactories.Edit; // ADODSFactories: TADODataSet
   ADODSFactories.FieldByName('A_REGION').AsInteger := ADODSRegions.FieldByName('CODE').AsInteger; // ADODSRegions: TADODataSet
   ADODSFactories.FieldByName('GROUP').AsInteger := ADODSGroups.FieldByName('GROUP_CODE').AsInteger; // ADODSGroups: TADODataSet
   ADODSFactories.Post;
 End;


В главной форме:
Код

  AddDlg(Application, ADODataSet1CODE.AsInteger); // Вызываю модальное окно для изменений
  ADODataSet1.Requery;


Но изменения видны не сразу, а после того как сделаю ADODataSet1.Requery 2-3, а то и больше раз. smile

Это сообщение отредактировал(а) Treefeed - 18.4.2005, 11:09
PM MAIL   Вверх
offline
Дата 18.4.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А зачем в модальной форме пользоваться компонентами 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 ведь он открыт у тебя в главном окне. Зачем два раза открывать одни и те же данные это ведь память жрет.



PM MAIL   Вверх
Treefeed
Дата 18.4.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В базе добавление планируется производить редко, а редактирование - еще реже. Поэтому я использую динамическую загрузку модальной формы(она используется для редактирования и добавления) из Dll. Так я меньше жру память - форма то динамически загружается. Если же делать модальную форму в Exe-файле так тогда память будет постоянно выделяться под модальную форму.

Но я так и не понял, почему обновления видны не сразу... smile

Это сообщение отредактировал(а) Treefeed - 18.4.2005, 17:39
PM MAIL   Вверх
offline
Дата 18.4.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Если же делать модальную форму в Exe-файле так тогда память будет постоянно выделяться под модальную форму.


А попробуй
Форма.Showmodal - для показа
Форма.Free - для удаления ее из памяти после Форма.Close

Модальная форма занимает намного меньше памяти чем второй экземпляр набора данных (на мой взгляд).

Цитата
Но я так и не понял, почему обновления видны не сразу


Попробуй внести изменения не во второй открытый набор данных (вообще его не открывай), а непосредственно в самнабор данных вот и посмотришь результат. Обнавления будут ведны сразу. Поэтому делай, как писал выше smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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