|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Использование компонентов ADO в нескольких формах
День добрый! Есть вопрос:
Какие есть способы использования ADOConnection в разных формах? Есть Главная форма и 2 дочерних. В Главной находится компонент ADOConnection. Нужно дать возможность элементам из дочерней формы использовать ADOConnection главной формы. То же самое про ADODataSet (при изменении данных в дочерней форме выполнить перезапуск ADODataSet) |
#2
|
||||
|
||||
используй TDataModule
Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Цитата:
Не стоит путать форумы с богадельнями. © Bargest |
#4
|
|||
|
|||
В implementation дочерних форм написать
Код:
implementation uses UnitMainForm; // или как там у Вас Тогда прямо в дизайнере дочерней формы можно компонентам присваивать ссылки на компоненты главной формы. |
#5
|
||||
|
||||
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
|
||||
|
||||
Цитата:
Ресурсы не должны передаваться через визуальные компоненты. Дочерние формы не должны тянуть за собой всё, что рождает в себе Основная форма. |
#7
|
|||
|
|||
Цитата:
Добавил TDataModule, туда кинул один ADOConnection. В форме после Implementation записал Код:
Uses DM В процедуре пишу: Код:
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; После запуска ошибка (так всегда, если обращаться к любому элементу любого модуля): |
#8
|
||||
|
||||
процедура процедуре рознь. в OnCreate так и должно быть. когда DMAsod создается и когда твой код вызывается?
Пишу программы за еду. __________________ |