Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.08.2014, 12:56
viplvolkov viplvolkov вне форума
Прохожий
 
Регистрация: 26.08.2014
Сообщения: 2
Версия Delphi: RAD Studio 2010
Репутация: 10
Восклицание Использование компонентов ADO в нескольких формах

День добрый! Есть вопрос:

Какие есть способы использования ADOConnection в разных формах?

Есть Главная форма и 2 дочерних. В Главной находится компонент ADOConnection. Нужно дать возможность элементам из дочерней формы использовать ADOConnection главной формы.

То же самое про ADODataSet (при изменении данных в дочерней форме выполнить перезапуск ADODataSet)
Ответить с цитированием
  #2  
Старый 26.08.2014, 18:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

используй TDataModule
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 27.08.2014, 01:15
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 576
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от viplvolkov
Какие есть способы использования ADOConnection в разных формах?
Ручками присваивать во время выполнения.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
  #4  
Старый 27.08.2014, 10:08
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

В implementation дочерних форм написать
Код:
implementation
uses 
  UnitMainForm; // или как там у Вас

Тогда прямо в дизайнере дочерней формы можно компонентам присваивать ссылки на компоненты главной формы.
Ответить с цитированием
  #5  
Старый 27.08.2014, 10:23
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Freeman меня поддержит
Смотри как это правильно делается:

В дочерних формах пишешь:

Код:
public
    { Public declarations }
    function Execute(myDataSet: TDataSet): Boolean; // (в случае, если тебе надо передать только результат конкретного запроса)

Код:
public
    { Public declarations }
    function Execute(myConnection: TADOConnection): Boolean; // (в случае, если необходимо передать весь Connection)

Далее обработчик этой функции:

Код:
function TFormReceiptAdd.Execute(myDataSet: TDataSet): Boolean;
begin
  dsMyDataSet.DataSet := myDataSet; // ds - DataSource на дочерней форме, в случае если необходимо показывать данные из DataSet
  Result := ShowModal = mrOK; // показываем форму модально
  if Result then // если форма закрылась по нажатию кнопки в которой стоит ModalResult = mrOK
     какие-то действия
  else // если форму закрыли/нажали кнопку где ModalResult <> mrOK
     какие-то действия
end;

Вызов функции (показ формы) из главной:

Код:
procedure TFormMain.dxBarReceiptsAddClick(Sender: TObject);
begin
  with TFormReceiptAdd.Create(Application) do // (создаём динамически форму)
    try
      aReceipts.Append; //открываем таблицу для записи
      Execute(aReceipts); // отправляем её в дочернюю форму
    finally
      Free; // вычищаем память
    end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо Uniq! за это полезное сообщение:
Freeman (28.08.2014)
  #6  
Старый 27.08.2014, 10:26
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от icWasya
В implementation дочерних форм написать
Код:
implementation
uses 
  UnitMainForm; // или как там у Вас

Тогда прямо в дизайнере дочерней формы можно компонентам присваивать ссылки на компоненты главной формы.

Ресурсы не должны передаваться через визуальные компоненты.
Дочерние формы не должны тянуть за собой всё, что рождает в себе Основная форма.
Ответить с цитированием
  #7  
Старый 27.08.2014, 18:38
viplvolkov viplvolkov вне форума
Прохожий
 
Регистрация: 26.08.2014
Сообщения: 2
Версия Delphi: RAD Studio 2010
Репутация: 10
Печаль

Цитата:
Сообщение от NumLock
используй TDataModule

Добавил TDataModule, туда кинул один ADOConnection. В форме после Implementation записал
Код:
Uses DM
; (DM - файл DataModule).

В процедуре пишу:

Код:
DMAsod.ConnectionDB.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0; User ID=Admin; Password="";Data Source='+extractfilepath(application.exename)+DBPath+';Persist Security Info=false;';
          try
            DMAsod.ConnectionDB.Connected:=true;

После запуска ошибка (так всегда, если обращаться к любому элементу любого модуля):
Изображения
Тип файла: jpg Снимок2.JPG (22.2 Кбайт, 6 просмотров)
Ответить с цитированием
  #8  
Старый 27.08.2014, 19:08
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

процедура процедуре рознь. в OnCreate так и должно быть. когда DMAsod создается и когда твой код вызывается?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter