delphi调试时出现这个Project Project1.exe raised exception class EAccessViolation

时间:2022-05-12 18:37:11
在调试时出现这个
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 004C75D5 in module 'Project1.exe'.Read of address 00000000'
返回程序时 光标是指向这行代码:
luqu[i,0]:=stucode1;

这段程序完整如下:
procedure TForm8.Button8Click(Sender: TObject);
var
  stucode1:integer;
  totalmark1:integer;
  i:integer;
  j:integer;

begin
  with adoquery6 do
     begin
      close;
      sql.Clear;
      sql.Add('select n=count(*) from LINSHI');
      open;

      close;
      sql.Clear;
      sql.Add('select number=COLLEGE.plannumber from COLLEGE,ENROLL where COLLEGE.collcode=ENROLL.onedream and ENROLL.onedream=:a');
      parameters.ParamByName('a').Value:=trim(edit1.Text);
      open;

      SetLength(luqu,n,2);
      SetLength(B,n);

      dbgrid3.DataSource.DataSet.First;
      for i:=0 to  DBGrid3.DataSource.DataSet.RecordCount-1 do
        begin
          stucode1:=dbgrid3.DataSource.DataSet.FieldValues['stucode'];
          totalmark1:=dbgrid3.DataSource.DataSet.FieldValues['totalmark'];
          luqu[i,0]:=stucode1;
          luqu[i,1]:=totalmark1;
          dbgrid3.DataSource.DataSet.Next;
        end;

      i:=0;
       while i <= n-1 do
        begin
          B[i]:=luqu[i,1]*100+luqu[i,0];
          inc(i);
        end;

      QuickSort(B[n],0,n-1);

    end;
    if n>number then
        begin
          i:=n-1;
          while i>n-number-1 do
            begin
              j:=0;
              while j<n do
                begin
                  luqu[j,0]:=B[j] mod 100;
                  luqu[j,1]:=B[j] div 100;
                  inc(j);
                end;
              id:=inttostr(luqu[i,0]);
            with adoquery6 do
              begin
                close;
                sql.Clear;
                sql.Add('update STUDENT set admitstate=shi where stucode=:a');
                parameters.ParamByName('a').Value:=trim(id);
                ExecSQL;
                close;
                sql.Clear;
                sql.Add('update STUDENT set admitcoll=:b where stucode=:a');
                parameters.ParamByName('a').Value:=trim(id);
                parameters.ParamByName('b').Value:=trim(edit1.Text);
                ExecSQL;
              end;
              dec(i);
            end;
          with adoquery6 do
          begin
          close;
          sql.clear;
          sql.add('select * from STUDENT where admitcoll=:a');
          parameters.ParamByName('a').Value:=trim(edit1.Text);
          open;
          end;
        end

      else
      begin
       with adoquery6 do
        begin
        close;
        sql.Clear;
        sql.Add('update STUDENT set admitstate=shi where STUDENT.stucode=ENROLL.stucode and ENROLL.onedream=:a');
        parameters.ParamByName('a').Value:=trim(edit1.Text);
        ExecSQL;

        close;
        sql.Clear;
        sql.Add('update STUDENT set admitcoll=:b where STUDENT.stucode=ENROLL.stucode and ENROLL.onedream=:a');
        parameters.ParamByName('a').Value:=trim(edit1.Text);
        ExecSQL;

        close;
        sql.clear;
        sql.add('select * from STUDENT where admitcoll=:a');
        parameters.ParamByName('a').Value:=trim(edit1.Text);
        open;
      end;
    end;

end;

我是初学delphi 要做一个招生管理系统 这段代码是要实现录取 

大家帮忙看看 谢谢了!!!!

9 个解决方案

#1


该回复于2009-06-07 00:35:52被版主删除

#2


加上断点来执行一下看看

#3


n初始化了吗。

#4


看起来没有。

#5


n初始化了
引用 3 楼 taxi 的回复:
n初始化了吗。

#6


没有设为正确的值吧,至少应该等于DBGrid3.DataSource.DataSet.RecordCount,否则在for循环中会出现访问错误。

#7


n没有被赋值,是0,导致luqu没有被分配空间,访问时出错

#8


      close;
      sql.Clear;
      sql.Add('select n=count(*) from LINSHI');///这就是楼主初始化n的语句?
      open;

看起来n没有被赋值过。

#9


我也出现了这个问题,是子窗体引用登陆窗体时,按钮点击那段代码
写了form1.free
没写的时候就无法使用登陆窗体,写了之后就出现了与楼主几乎一样的问题

#1


该回复于2009-06-07 00:35:52被版主删除

#2


加上断点来执行一下看看

#3


n初始化了吗。

#4


看起来没有。

#5


n初始化了
引用 3 楼 taxi 的回复:
n初始化了吗。

#6


没有设为正确的值吧,至少应该等于DBGrid3.DataSource.DataSet.RecordCount,否则在for循环中会出现访问错误。

#7


n没有被赋值,是0,导致luqu没有被分配空间,访问时出错

#8


      close;
      sql.Clear;
      sql.Add('select n=count(*) from LINSHI');///这就是楼主初始化n的语句?
      open;

看起来n没有被赋值过。

#9


我也出现了这个问题,是子窗体引用登陆窗体时,按钮点击那段代码
写了form1.free
没写的时候就无法使用登陆窗体,写了之后就出现了与楼主几乎一样的问题