Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

на форме 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо