在向表中添加新记录时出错,系统提示“project yj.exe raised exception class EAccess Violation at address 1F487CAB in module 'msado15.dll'.Write of address 0139A01C'.执行添加的语句如下,逐步调试发现是在adoquery1.ExecSQL这句之后出错,请哪位指点一下问题出在哪儿?谢谢!
procedure Tf_addjg.BtmaddClick(Sender: TObject);
begin
  mainform.adoconnection1.begintrans;
     try
     adoquery1.sql.clear;
     adoquery1.SQL.Add('insert into baseinfo (id,mc,fr,dz,fzr,cyrs,phone,km,djhm,xkqx,cs,bnsh,mj,yf,zds,czs) values ');
     adoquery1.SQL.Add(' ('+edid.text+','''+edmc.text+''','''+edfr.text+''','''+eddz.text+''','''+edfzr.text+''','+edcyrs.text+','''+edphone.text+''','''+cmkm.text+''',');
     adoquery1.SQL.Add(' '''+eddjhm.text+''','''+edxkqx.text+''','+edcs.text+','''+cmbnsh.text+''','''+edmj.text+''','+edyf.text+','+edzds.text+','+edczs.Text+')');
     adoquery1.ExecSQL ;
     mainform.adoconnection1.committrans;
     ccleardata(f_addjg);
     if messagedlg('继续添加记录!',mtconfirmation,[mbyes,mbno],0)=mryes
       then
         edmc.SetFocus
       else
         close;
     except
     mainform.adoconnection1.rollbacktrans;
     end;
end;

解决方案 »

  1.   

    是你的SQL 语句有问题吧,不如你把SQL语句显示出来仔细检查一下!
      

  2.   

    SQL语句如下,在查询分析器中分析可通过
    insert into baseinfo (id,mc,fr,dz,fzr,cyrs,phone,km,djhm,xkqx,cs,bnsh,mj,yf,zds,czs) values ('+edid.text+','''+edmc.text+''','''+edfr.text+''','''+eddz.text+''','''+edfzr.text+''','+edcyrs.text+','''+edphone.text+''','''+cmkm.text+''','''+eddjhm.text+''','''+edxkqx.text+''','+edcs.text+','''+cmbnsh.text+''','''+edmj.text+''','+edyf.text+','+edzds.text+','+edczs.Text+')
      

  3.   

    只是想做个添加记录的单元,不是那么难吧,我把本单元的代码全贴出来,哪位老大帮我看看吧.
    unit addjg;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, DB, ADODB;type
      Tf_addjg = class(TForm)
        Edid: TEdit;
        GroupBox1: TGroupBox;
        Label1: TLabel;
        Label2: TLabel;
        Edmc: TEdit;
        Label3: TLabel;
        Edfr: TEdit;
        Label4: TLabel;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Eddz: TEdit;
        Edfzr: TEdit;
        Edcyrs: TEdit;
        Edphone: TEdit;
        Label8: TLabel;
        Label9: TLabel;
        Cmkm: TComboBox;
        Eddjhm: TEdit;
        Label10: TLabel;
        Label11: TLabel;
        Label12: TLabel;
        Edxkqx: TEdit;
        Edcs: TEdit;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
        Label16: TLabel;
        Label17: TLabel;
        Label18: TLabel;
        Cmbnsh: TComboBox;
        Edmj: TEdit;
        Label19: TLabel;
        Label20: TLabel;
        Label21: TLabel;
        Edyf: TEdit;
        Edzds: TEdit;
        Edczs: TEdit;
        Btmadd: TButton;
        Btncancel: TButton;
        ADOQuery1: TADOQuery;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure BtncancelClick(Sender: TObject);
        procedure BtmaddClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        function GetId:String;
      end;var
      f_addjg: Tf_addjg;implementationuses main,shareu;{$R *.dfm}procedure Tf_addjg.FormCreate(Sender: TObject);
    begin
        edid.Text:=GetId;
    end;
    procedure Tf_addjg.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        f_addjg:=nil;
        Action:=cafree;
    end;procedure Tf_addjg.BtncancelClick(Sender: TObject);
    begin
      close;
    end;function Tf_addjg.GetId:string;
    begin
        adoQuery1.SQL.Text:='select max(id) as ID  from  baseInfo';
        adoquery1.Open;
        if adoquery1.FieldByName('iD').AsString ='' then   //
        begin
            result:='1';
        end
        else
        begin
            result:=inttostr(adoquery1.FieldByName('ID').Asinteger+1);
        end;
        adoquery1.Close;
        end;procedure Tf_addjg.BtmaddClick(Sender: TObject);
    begin
      mainform.adoconnection1.begintrans;
         try
         adoquery1.sql.clear;
         adoquery1.SQL.Add('insert into baseinfo (id,mc,fr,dz,fzr,cyrs,phone,km,djhm,xkqx,cs,bnsh,mj,yf,zds,czs) values ');
         adoquery1.SQL.Add(' ('+edid.text+','''+edmc.text+''','''+edfr.text+''','''+eddz.text+''','''+edfzr.text+''','+edcyrs.text+','''+edphone.text+''','''+cmkm.text+''',');
         adoquery1.SQL.Add(' '''+eddjhm.text+''','''+edxkqx.text+''','+edcs.text+','''+cmbnsh.text+''','''+edmj.text+''','+edyf.text+','+edzds.text+','+edczs.Text+')');
         adoquery1.ExecSQL ;
         mainform.adoconnection1.committrans;
         ccleardata(f_addjg);
         if messagedlg('继续添加记录!',mtconfirmation,[mbyes,mbno],0)=mryes
           then
             edmc.SetFocus
           else
             close;
         except
         mainform.adoconnection1.rollbacktrans;
         end;
    end;end.
      

  4.   

    先给你的ADO升级
    去微软下MDAC2.8装了在试
      

  5.   

    如果你的SQL没错的话,建议升级ADO,一般可以解决问题
      

  6.   

    http://www.microsoft.com/downloads/details.aspx?FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=zh-cn
    打开这个地址
    下载安装
    够详细吗
      

  7.   

    try
         adoquery1.sql.clear;
         adoquery1.SQL.Add('insert into baseinfo (id,mc,fr,dz,fzr,cyrs,phone,km,djhm,xkqx,cs,bnsh,mj,yf,zds,czs) values(:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o,:p) ');
          adoquery1.Parameters.ParamByName('a').Value:=edid.text;
           adoquery1.Parameters.ParamByName('b').Value:=edmc.text;
           ……
           ……
           adoquery1.ExecSQL ;
    试试这个吧 
      

  8.   

    我现在这台机用到ADOquery中的insert into也是这个问题,正在升级MDAC中
      

  9.   

    大半SQL语句有问题 仔细看看
      

  10.   

    升级ADO后果然没出那个提示了,谢谢各位!不过又出现个新问题,点击add后,提示"第二行:','附近有语法错误".希望各位老大帮忙帮到底,再帮看看吧.
      

  11.   

    你這個代碼看得太累,你自已用SQL跟蹤一下。看看你的SQL語句有什麼問題,自已改改就好了。
      

  12.   

    肯定是这句有问题:
    adoquery1.SQL.Add('insert into baseinfo (id,mc,fr,dz,fzr,cyrs,phone,km,djhm,xkqx,cs,bnsh,mj,yf,zds,czs) values ');
         adoquery1.SQL.Add(' ('+edid.text+','''+edmc.text+''','''+edfr.text+''','''+eddz.text+''','''+edfzr.text+''','+edcyrs.text+','''+edphone.text+''','''+cmkm.text+''',');
         adoquery1.SQL.Add(' '''+eddjhm.text+''','''+edxkqx.text+''','+edcs.text+','''+cmbnsh.text+''','''+edmj.text+''','+edyf.text+','+edzds.text+','+edczs.Text+')');不要这样写代码呀,用参数写看的清楚一点,也容易除错
      

  13.   

    谢谢,我再问一下,adoquery1.Parameters.ParamByName('a').Value:=edid.text这样子的语句,如果id字段是int类型的,那么应该怎么改呢?
      

  14.   

    value可以兼容的,不用改,adoquery1.Parameters.ParamByName('a').asinteger也行