![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
на форме MDIchild access violetion
macsd © (2004-04-21 11:54:00)при попытке обращения к адо конекшн или адокюери или адо тейбл возникает аксес виолейшн.
все компоненты лежат на той же МДИчаилд форме и из модуля той ж формы идет обращение.
Вчем проблема то?
macsd (2004-04-21 12:16:00) [1]пасибо, все заработало =))
Vlad (2004-04-21 12:14:00) [2]Правда, думаю не в этом дело.
Скорее всего дело в том, что в методах класса TForm2 нужно везде убрать ссылку на переменную Form2, которая:
во-первых не нужна, если уж так хочется, используй Self
во-вторых, судя по твоему коду она вобще nil, отсюда и AV
Vlad (2004-04-21 12:11:00) [3]var:
Form2: TForm2;
....
Form2:=TForm2.Create(Application);
Caption:='New Form';
Reindeer Moss Eater (2004-04-21 12:11:00) [4]Достаточно убрать из procedure TForm2.Button1Click(Sender: TObject); любые упоминания о form2.
Сам-то подумай.
Программа может создать N экземпляров TForm2.
Но метод Button1Click зачем-то всегда по тупому будет ломиться к переменной form2.
macsd (2004-04-21 12:08:00) [5]а как правильно сохранить ссылку?
Reindeer Moss Eater (2004-04-21 12:04:00) [6]procedure TForm2.Button1Click(Sender: TObject);
var
temp_c:longint;
begin
if not(form2.ADOtable1.Locate('GRNAME', form2.Edit3.Text,[])) then
begin
form2.ADOtable1.Insert;
randomize;
repeat
temp_c:=random(1000000);
Зачем вообще в методе класса упоминать имя какой-то левой переменной?
Reindeer Moss Eater (2004-04-21 12:02:00) [7]procedure TForm1.N2Click(Sender: TObject);
begin
with TForm2.Create(Application) do
begin
Caption:='New Form';
Show;
end;
end;
Ну и где сохраняется ссылка но новоиспеченный экземпляр?
if not(form2.ADOtable1.Locate('GRNAME',form2.Edit3.Text,[])) then
Кто проинициализировал переменную form2 ?
Дед мороз?
macsd (2004-04-21 11:56:00) [8]В юнит 1 -
procedure TForm1.N2Click(Sender: TObject);
begin
with TForm2.Create(Application) do
begin
Caption:='New Form';
Show;
end;
end;
В юнит 2 -
procedure TForm2.Button1Click(Sender: TObject);
var
temp_c:longint;
begin
if not(form2.ADOtable1.Locate('GRNAME',form2.Edit3.Text,[])) then
begin
form2.ADOtable1.Insert;
randomize;
repeat
temp_c:=random(1000000);
until not(form2.ADOtable1.Locate('GRCODE',temp_c,[]));
form2.ADOtable1.FieldByName('GRCODE').AsString:=inttostr(temp_c);
form2.ADOtable1.Post;
form2.ADOtable1.UpdateBatch(arAll);
form2.ADOtable2.Insert;
form2.ADOtable2.FieldByName('GOGRCODE').AsString:=inttostr(temp_c);
form2.ADOtable2.FieldByName('GOCODE').AsString:=form2.Edit1.Text;
form2.ADOtable2.FieldByName('GONAME').AsString:=form2.Edit2.Text;
form2.ADOtable2.Post;
form2.ADOtable2.UpdateBatch(arAll);
end
else
begin
form2.ADOtable2.Insert;
form2.ADOtable2.FieldByName('GOGRCODE').AsString:=form2.ADOtable1.FieldByName('GRCODE').AsString;
form2.ADOtable2.FieldByName('GOCODE').AsString:=form2.Edit1.Text;
form2.ADOtable2.FieldByName('GONAME').AsString:=form2.Edit2.Text;
form2.ADOtable2.Post;
form2.ADOtable2.UpdateBatch(arAll);
end;
end;