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