有两问1.delphi7中出现提示框 access violation at address 06351c10.read of address 06351c10.并且该提示框不掉!!我打叉又会弹出一个。是怎么回事??
2.下面程序单击插入按钮时不能保存内容到数据库中,如果我加上adodataset1.post.就会死机
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids, ExtCtrls;type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Panel2: TPanel;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    DataSource1: TDataSource;
    ADODataSet1: TADODataSet;
    DataSource2: TDataSource;
    ADODataSet2: TADODataSet;
    Label5: TLabel;
    Edit5: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin    ADODataSet1.insert;
    edit5.SetFocus;
    ADODataSet1.FieldByName('学生学号').AsString:=edit5.Text;
    ADODataSet1.FieldByName('课程编号').AsString:=edit1.Text;
    ADODataSet1.FieldByName('课程名称').AsString:=edit2.Text;
    ADODataSet1.FieldByName('考试日期').AsString:=edit3.Text;
    ADODataSet1.FieldByName('考试成绩').AsString:=edit4.Text;    ADODataSet1.Open;
    edit1.Text:='';
    edit2.Text:='';  //如果我加上Adodaset1.post;这一句就会出现死机情况,
                         要是不加这个保存修改的记录到数据库中,就不能保存该记录    edit3.Text:='';
    edit4.Text:='';
    edit5.text:='';
    edit5.SetFocus;
    Adodaset1.post;
   
end;procedure TForm1.Button2Click(Sender: TObject);
begin
    ADODataSet1.Edit;
    edit5.setfocus;
    ADODataSet1.FieldByName('学生学号').AsString:=edit5.Text;
    ADODataSet1.FieldByName('课程编号').AsString:=edit1.Text;
    ADODataSet1.FieldByName('课程名称').AsString:=edit2.Text;
    ADODataSet1.FieldByName('考试日期').AsString:=edit3.Text;
    ADODataSet1.FieldByName('考试成绩').AsString:=edit4.Text;
        ADODataSet1.Open;
    edit1.Text:='';
    edit2.Text:='';
    edit3.Text:='';
    edit4.Text:='';
    edit5.text:='';
    edit5.SetFocus;
    ADODataSet1.Post;end;procedure TForm1.Button4Click(Sender: TObject);
begin
   ADODataSet1.Delete;
   ADODataSet1.Post;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
    with ADODataSet1 do begin
     close;
    if edit1.text<>'' then
     begin
      ADODataSet1.CommandText:='SELECT  tbStudentInfo.sStudentNo 学生学号, sStudentName  学生姓名, sScourseNo  课程编号, sScourseName 课程名称, dTestData  考试日期, fScore  考试成绩'
                                +' FROM tbStudentInfo, tbScoreInfo'
                                +' WHERE tbStudentInfo.sStudentNo=tbScoreInfo.sStudentNo and  sScourseNo like ''%'+edit1.Text+'%'' ';
       open;
       edit1.Clear;
       edit1.SetFocus;
     end
    else if edit2.text<>'' then
    begin
      ADODataSet1.CommandText:=' SELECT  tbStudentInfo.sStudentNo 学生学号, sStudentName  学生姓名, sScourseNo  课程编号, sScourseName 课程名称, dTestData  考试日期, fScore  考试成绩'
                               +' FROM tbStudentInfo, tbScoreInfo'
                                +' WHERE tbStudentInfo.sStudentNo=tbScoreInfo.sStudentNo and sScourseName like ''%'+edit2.Text+'%'' ';
       open;
       edit2.Clear;
       edit2.SetFocus;
    end
    else if edit5.text<>''  then
    begin
      ADODataSet1.CommandText:= ' SELECT  tbStudentInfo.sStudentNo 学生学号, sStudentName  学生姓名, sScourseNo  课程编号, sScourseName 课程名称, dTestData  考试日期, fScore  考试成绩'
                               +' FROM tbStudentInfo, tbScoreInfo'
                                +' WHERE tbStudentInfo.sStudentNo=tbScoreInfo.sStudentNo and tbStudentInfo.sStudentNo like ''%'+edit5.Text+'%'' ';
       open;
       edit5.Clear;
       edit5.SetFocus;
      end
    else if (edit2.text<>'') and (edit5.text<>'') then
    begin
      ADODataSet1.CommandText:='SELECT  tbStudentInfo.sStudentNo 学生学号, sStudentName  学生姓名, sScourseNo  课程编号, sScourseName 课程名称, dTestData  考试日期, fScore  考试成绩'
                                +' FROM tbStudentInfo, tbScoreInfo'
                                +' WHERE tbStudentInfo.sStudentNo=tbScoreInfo.sStudentNo and tbStudentInfo.sStudentNo like ''%'+edit5.Text+'%'' and sScourseName like ''%'+edit2.Text+'%''';
      open;
      edit1.Clear;
      edit2.Clear;
      edit5.Clear;
      edit5.SetFocus;
    end
      else
      ADODataSet1.CommandText:='SELECT  tbStudentInfo.sStudentNo 学生学号, sStudentName  学生姓名, sScourseNo  课程编号, sScourseName 课程名称, dTestData  考试日期, fScore  考试成绩'
                                +' FROM tbStudentInfo, tbScoreInfo'
                                +' WHERE tbStudentInfo.sStudentNo=tbScoreInfo.sStudentNo ';
       open;
       edit5.SetFocus;
   end;
end;procedure TForm1.Button6Click(Sender: TObject);
begin
   close;
end;procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
   if key=#13 then
    selectNext(activecontrol,true,true);
end;end.

解决方案 »

  1.   

     ADODataSet1.excel;
    open用于返回结果集。如select
    excel用于执行无需返回结果集,如insert,update,delete
      

  2.   

    一、ADODataSet1.insert;之后,验证一下ADODataSet1.start的值是否为insert或edit状态,如果不是,再执行一下
    二、不解,你为什么要在这之后Open一下,如果仅仅是为了刷新数据,你本身其实就已经给它赋值了,没必要,如果一定需要,使用refresh可能更好些
      

  3.   

    adodataset 组件是无法执行没有返回结果集的语句,还有adodataset.start没有这种语句,帮帮忙
      

  4.   


    delphi的那个错误提示框,可以在任务管理器中结束掉进程  if  ADODataSet1.State in [dsedit,dsinsert] then
        ADODataSet1.Post;
      

  5.   


      if  ADODataSet1.State in [dsedit,dsinsert] then
        ADODataSet1.Post;
      

  6.   

    程序运行时加载了多余的代码或者执行SQL语句时
    没有返回相关的值信息再或者返回时出错》》》》》》