我做的是学籍管理系统,用Access建了一个数据库,要实现添加学生信息的功能,可是出现异常信息,不知道是什么地方错了。  
 
下面是我的代码:  
procedure  TedtStuForm.BtnInsertClick(Sender:  TObject);  
begin  
   if  RBtnMale.checked  then  stusex:='男'  
   else  stusex:='女';  
   if  stusno=''  then  
       MessageBox(self.handle,'学号不能为空!','警告',MB_OK+MB_ICONWARNING)  
   else  if  stusname=''  then  
       MessageBox(self.handle,'姓名不能为空!','警告',MB_OK+MB_ICONWARNING)  
   else  if  sturoom_no=''  then  
       MessageBox(self.handle,'姓名不能为空!','警告',MB_OK+MB_ICONWARNING)  
   else  if  stuEmail=''  then  
       MessageBox(self.handle,'姓名不能为空!','警告',MB_OK+MB_ICONWARNING)  
   else  begin  
                   strsql:='insert  into  Student  values('''+stusno+''','''+  stusname+''','''+  stusex+''','''+  sturoom_no+''','''+stuEmail+''')';  
     with  self.ADOQuery1  do  
         begin  
             if  active  then  Close;  
             SQL.Clear;  
             SQL.Add(strsql)  ;  
             ExecSQL  ;  
             showmessage('添加成功');  
         end;  
     end;  
end;  
 
下面是异常信息:  
Project  PStuManage.exe  raised  exception  class  EAccessViolation  with  message  'Access  violation  at  address  1F487CAB  in  module  'msado15.dll'.  Write  of  address  012B5004'.  Process  stopped.  Use  Step  or  Run  to  continue.

解决方案 »

  1.   

    strsql:='insert  into  Student  values(' +''''+ stusno +''''+','+''''+  stusname+''''+','+''''+  stusex + ''''+','+''''+  sturoom_no+''''+','+''''+stuEmail+''''+')'; 
    试试改成这样
      

  2.   

    1 首先重启电脑
    2 改为:strsql:='insert  into  Student  values('''+stusno+''','''+  stusname+''','''+  stusex+''','''+  sturoom_no+''','''+stuEmail+'''')''
      

  3.   

    建议用参数化
    with qryInsert do
     begin
       close;
       sql.clear;
       sql.add('insert into student values (:stusno,:stusname,:stusex,:sturoom_no,:stuEmail');
       Parameters.ParamByName('stusno').Value :=stusno;
       Parameters.ParamByName('stusname').Value :=stusname;
       Parameters.ParamByName('stusex').Value :=stusex;
       Parameters.ParamByName('sturoom_no').Value :=sturoom_no;
       Parameters.ParamByName('stuEmail').Value :=stuEmail;
       try
         Execsql;
       except
       end;
     end;
      

  4.   


       sql.add('insert into student values (:stusno,:stusname,:stusex,:sturoom_no,:stuEmail');
       Parameters.ParamByName('stusno').Value :=stusno;
       Parameters.ParamByName('stusname').Value :=stusname;
       Parameters.ParamByName('stusex').Value :=stusex;
       Parameters.ParamByName('sturoom_no').Value :=sturoom_no;
       Parameters.ParamByName('stuEmail').Value :=stuEmail;
      

  5.   

    建议看看format函数的用法。
    var
      sqlstr:string
    begin
      sqlstr:='insert into aa(a1,a2) values(''%s'',%s);
      sqlstr:=format(sqlstr,[a1_,a2_);
      with adoqry do 
      begin
         close;
         sql.clear;
         sql.add(sqlstr);
         execsql;
         close;    
      end;
      end;
      

  6.   

    var
      sqlstr:string
    begin
      sqlstr:='insert into aa(a1,a2) values(''%s'',%s);
      sqlstr:=format(sqlstr,[a1_,a2_]);
      with adoqry do 
      begin
         close;
         sql.clear;
         sql.add(sqlstr);
         execsql;
         close;    
      end;
      end;
      

  7.   

    把SQL语句输出出来到查询分析器里试一下不就知道了。
      

  8.   

    var
      sSql : string;
    begin
     sSql := 'insert  into  Student  values('''+stusno+''','''+  stusname+''','''+ stusex+''','''+  sturoom_no+''','''+stuEmail+'''')'';
     with qryInsert do
     begin
       close;
       sql.clear;
       sql.add(sSql);
       try
         Execsql;
       except
         showmessage('SQL错误!');
       end;
     end;
    end;
      

  9.   

    用了qxj(游民)的办法,还是一样的异常错误。我自己写的SQL语句输出来再放到查询分析器里去是正确的。重启电脑、换电脑运行都试过了,还是一样的报错。
      

  10.   

    试试下面的行不行:  
      ADOQuery1  .Close;
      ADOQuery1  .SQL.Clear;
      ADOQuery1  .SQL.Add('select * from Student where 1=2');
      ADOQuery1  .Open;
      ADOQuery1  .append;
      ADOQuery1  .FieldByName('stusno').AsString:=stusno;
      ADOQuery1  .FieldByName('stusname').AsString:=sstusname;
      ……
      ADOQuery1  .UpdateBatch();
      

  11.   

    我原来的那段代码没有错啊。我是在一个窗口里放DBGrid,然后下面是填入各种属性,再做插入,就出现了上面那个错误。现在我在一个新的窗口中完成插入,代码不变,就成功了。可是现在我还要有DBGrid的那个窗口里面做删除和修改,也是一样的报错。谁能告诉我是怎么回事?我的老师曾经怀疑是我的ADO驱动版本问题,现在已经升级到2.7版了,错误还是存在。盼高手指点!
      

  12.   

    把原来的DBGrid删除,再重新加一个试试。经常遇到这种郁闷事,莫名其妙。
      

  13.   

    试过重新开一个工程,在里面放DBGrid,也用同样的代码,还是一样的异常信息。