Текущий архив: 2002.06.20;
Скачать: CL | DM;
Вниз
Создание MDI-child ов Найти похожие ветки
← →
Verq (2002-06-08 20:23) [0]Мужики, почему вылетает AV? Никак не разберусь...
DataSource лежит на форме которую мы создаём, а qryAvtori на DataModul"е <- ну это так, на всякий случай.
function TfrmMain.FormTableEditOpen(f_Name: string):Integer;
begin
Result:=0;
TfrmTableEdit.Create(Self).Name:="frm"+f_Name+"Edit";
with TfrmTableEdit(FindComponent("frm"+f_Name+"Edit")) do
begin
dsTableEdit.DataSet:=TADOQuery(FindComponent("DM.qry"+f_Name)); //указываем путь к ADOQuery DM.qryAvtori
dsTableEdit.DataSet.Open; // <- EAccessViolation
Parent:=Self;
frameTableEditMaster.lblChtoDelaem.Caption:="Редактирование карточек авторов";
end;
Result:=1;
end;
procedure TfrmMain.mnuTableEditClick(Sender: TObject);
begin
FormTableEditOpen("Avtori");
end;
← →
kaif (2002-06-08 21:08) [1]with TfrmTableEdit(FindComponent("frm"+f_Name+"Edit")) do
FindComponent("DM.qry"+f_Name)
в переводе на русский язык означает:
Найди мне компонент с именем "DM.qry"+f_Name в списке компонентов, владельцем (Owner) которых является компонент с именем
"frm"+f_Name+"Edit" и в данном случае возвращает nil, так как дочерняя форма не является владельцем запроса с именем "DM.qry"+f_Name
FindComponent это не функция по поиску компонентов в приложении, а метод компонента для поиска других компонентов, которыми он владеет. И только Application.FindComponent ищет компонент формы, да и то, если его владелец - Application.
А вообще весь вышеприведенный Вами код есть чистой воды извращение. И MDI тут непричем.
Показываю правильный код:
function TfrmMain.FormTableEditOpen(f_Name: string):Integer;
var
frm: TfrmTableEdit;
begin
frm := TfrmTableEdit.Create(Self);
with frm do
begin
Name := "frm"+f_Name+"Edit";
dsTableEdit.DataSet:=DM.qryAutori; //указываем путь к
//DM.qryAvtori
dsTableEdit.DataSet.Open; // без EAccessViolation
frameTableEditMaster.lblChtoDelaem.Caption :=
"Редактирование карточек авторов";
end;
Result := 1;
end;
Или же если уж совсем приспичило искать компоненты, а не просто использовать указатели на них, то правильно искать запрос так:
dsTableEdit.DataSet := DM.FindComponent("DM.qry"+f_Name);
А вообще после любого FIndComponent советую проверять результат поиска на неравенство nil.
var
C: TComponent;
C := НекийКомпонент.FindComponent(имя)
if C <> nil then
....
← →
Verq (2002-06-08 22:02) [2]спасибо тебе большое,
да пребудет с тобой сила Кайф...
попробую чуть позже
← →
Verq (2002-06-08 23:26) [3]Всё получилось, спасибо огромное, спасли Вы мою южную опору ~)
Страницы: 1 вся ветка
Текущий архив: 2002.06.20;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.005 c