在调试时出现这个
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;
  total1: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'];
          total1:=dbgrid3.DataSource.DataSet.FieldValues['total'];
          luqu[i,0]:=stucode1;
          luqu[i,1]:=total1;
          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 要做一个招生管理系统 这段代码是要实现录取 大家帮忙看看 谢谢了!!!!

解决方案 »

  1.   

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

  2.   

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

  3.   

          close;
          sql.Clear;
          sql.Add('select n=count(*) from LINSHI');///这就是楼主初始化n的语句?
          open;看起来n没有被赋值过。
      

  4.   

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