Главная страница
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.016 c
8-65176
Pete
2002-02-04 09:46
2002.06.20
Как более корректно удалять поверхности и интерфес DirectDraw


3-64988
Леша
2002-05-22 22:22
2002.06.20
Изменения в базе данных


14-65224
Демон
2002-05-17 18:55
2002.06.20
Про модем, но не по делфям


14-65246
petr_v_a
2002-05-18 15:48
2002.06.20
Динамика цен на железо


1-65155
ANDREY196
2002-06-07 19:09
2002.06.20
Как в RiсhEdit открыть doc и rft файлы??