Главная страница
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.012 c
4-65276
serge1234
2002-04-18 10:55
2002.06.20
Использование FormatMessage


3-64973
Sergant
2002-05-28 07:46
2002.06.20
Как определить каталог установки Firebird (InterBase)?


3-64972
Esipenko
2002-05-28 13:22
2002.06.20
Создание таблиц в Advantage


3-64916
Pavel_S
2002-05-17 15:18
2002.06.20
HELP !!! Проблема со временем


14-65235
Феликс
2002-05-18 15:03
2002.06.20
Возможно ли сделать такое?