Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.015 c
3-64933
темп
2002-05-27 11:45
2002.06.20
помогите плз разобраться с syscomments


1-65157
Tutov Roman
2002-06-07 12:02
2002.06.20
Шифрование строки.


1-65052
kioto
2002-06-10 08:44
2002.06.20
Как отловить нажатие кнопок-стрелок ?


7-65262
daos
2002-03-22 10:15
2002.06.20
Идея! К вопросу о крысе (как ее обнаружить).


1-65158
Kr_Alex
2002-06-06 21:53
2002.06.20
Координаты иконок