Главная страница
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.056 c
1-1083654182
real_dimedrol
2004-05-04 11:03
2004.05.16
Перенаправление вывода win16-программ


1-1083420546
Vin_Ghost
2004-05-01 18:09
2004.05.16
Создание окна на весь экран.


11-1069200726
Ciber SLasH
2003-11-19 03:12
2004.05.16
KOLPanel жутко тормозит при перетаскивании


1-1083061737
IceMaster
2004-04-27 14:28
2004.05.16
Memo


1-1083333761
European
2004-04-30 18:02
2004.05.16
Panel не изменяет размеры