Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

на форме MDIchild access violetion   Найти похожие ветки 

 
macsd ©   (2004-04-21 11:54) [0]

при попытке обращения к адо конекшн или адокюери или адо тейбл возникает аксес виолейшн.

все компоненты лежат на той же МДИчаилд форме и из модуля той ж формы идет обращение.

Вчем проблема то?


 
macsd ©   (2004-04-21 11:56) [1]

В юнит 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;


 
Reindeer Moss Eater ©   (2004-04-21 12:02) [2]

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 ?
Дед мороз?


 
Reindeer Moss Eater ©   (2004-04-21 12:04) [3]

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);

Зачем вообще в методе класса упоминать имя какой-то левой переменной?


 
macsd ©   (2004-04-21 12:08) [4]

а как правильно сохранить ссылку?


 
Vlad ©   (2004-04-21 12:11) [5]

var:
Form2: TForm2;
....
Form2:=TForm2.Create(Application);
Caption:="New Form";


 
Reindeer Moss Eater ©   (2004-04-21 12:11) [6]

Достаточно убрать из procedure TForm2.Button1Click(Sender: TObject); любые упоминания о form2.

Сам-то подумай.
Программа может создать N экземпляров TForm2.
Но метод Button1Click зачем-то всегда по тупому будет ломиться к переменной form2.


 
Vlad ©   (2004-04-21 12:14) [7]

Правда, думаю не в этом дело.
Скорее всего дело в том, что в методах класса TForm2 нужно везде убрать ссылку на переменную Form2, которая:
во-первых не нужна, если уж так хочется, используй Self
во-вторых, судя по твоему коду она вобще nil, отсюда и AV


 
macsd ©   (2004-04-21 12:16) [8]

пасибо, все заработало =))



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
4-1077013392
KosilkA
2004-02-17 13:23
2004.05.16
иконку из ехе в файл


14-1082773743
Думкин
2004-04-24 06:29
2004.05.16
С днем рождения! 24 апреля.


3-1082369428
Vit
2004-04-19 14:10
2004.05.16
Не могу понять в чем ошибка


1-1083654182
real_dimedrol
2004-05-04 11:03
2004.05.16
Перенаправление вывода win16-программ


14-1082711459
ISP
2004-04-23 13:10
2004.05.16
Дыра в TCP