try
  pwd:=myinifile.ReadString('setup','password','');
 for I:=0 to length(pwd)-1 do
  begin
  pwd[i]:=chr(ord(pwd[i])xor 12);
  end;
  Data_source:=myinifile.ReadString('setup','Data_Source','127.0.0.1');
  Initial_Catalog:= myinifile.ReadString('setup','Initial_Catalog','DataBase');
  User_Id:=myinifile.ReadString('setup','User_Id','user');
  ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='+
  pwd+';Persist Security Info=True;User ID='+
  User_Id+';Initial Catalog='+Initial_Catalog
  +';Data Source='+Data_Source;
  Adoconnection1.Connected := true;
  Adoquery1.SQL.Add('insert into leechdom_Note (buy_date,Drug_Name,Spec,Dose,Units,'
                 +'Amount,Buy_price,Buy_Inc,Produce_cor,Batch_Num,Period_of_val'
                 +'License_Num,Quality_Sta,Conclusion,Inspector,Sign_Date,Memo)'
                 +'Values(left(getdate(),10),'+EdtName.text+','+EdtSpec.text+','
                 +EdtDose.text+','+EdtUnit.text+','+EdtNum.text+','+EdtBuy.text+','
                 +EdtInc.text+','+EdtCor.text+','+EdtBat.text+','+EdtPer.text+','
                 +EdtLic.text+','+EdtQua.text+','+EdtCon.text+','+EdtMem.text
                 +')');
   Adoquery1.Open;
   adoquery1.Destroy;
   except
     adoquery1.Destroy;报非法访问内存!

解决方案 »

  1.   

    有一个需要注意的地方,Delphi的AnsiString的索引下标,从1开始:try
      pwd:=myinifile.ReadString('setup','password','');
     for I:=1 to length(pwd) do //不是从0开始
      begin
      pwd[i]:=chr(ord(pwd[i])xor 12);
      end;
    ...
      

  2.   

    第二需要注意的地方,在delphi中不要直接调用析构函数Destroy,用Free来代替...   
       Adoquery1.Open;
       Adoquery1.Close;
       Adoquery1.Free;
       except
         Adoquery1.free;
       end;
      

  3.   

    提示的是类型不一致!:'tstring','string'?会有什么问题吗?
      

  4.   

    >>提示的是类型不一致!:'tstring','string'?哪一行提示?说清楚
      

  5.   

    try
      pwd:=myinifile.ReadString('setup','password','');
     for I:=0 to length(pwd)-1 do
      begin
      pwd[i]:=chr(ord(pwd[i])xor 12);
      end;
      Data_source:=myinifile.ReadString('setup','Data_Source','127.0.0.1');
      Initial_Catalog:= myinifile.ReadString('setup','Initial_Catalog','DataBase');
      User_Id:=myinifile.ReadString('setup','User_Id','user');
      ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='+
      pwd+';Persist Security Info=True;User ID='+
      User_Id+';Initial Catalog='+Initial_Catalog
      +';Data Source='+Data_Source;
      Adoconnection1.Connected := true;
     //----------------------------------------------------------------------------- 
      adoquery1.connection:=adoconnection1;//----查询组件要指定下它的连接组件;
      adoquery1.close;
      adoquery1.sql.clear;//指定SQL指令时,最好要先清除它原有的SQL指令;
    //---------------------------------------------------------------------------
      Adoquery1.SQL.Add('insert into leechdom_Note (buy_date,Drug_Name,Spec,Dose,Units,'
                     +'Amount,Buy_price,Buy_Inc,Produce_cor,Batch_Num,Period_of_val'
                     +'License_Num,Quality_Sta,Conclusion,Inspector,Sign_Date,Memo)'
                     +'Values(left(getdate(),10),'+EdtName.text+','+EdtSpec.text+','
                     +EdtDose.text+','+EdtUnit.text+','+EdtNum.text+','+EdtBuy.text+','
                     +EdtInc.text+','+EdtCor.text+','+EdtBat.text+','+EdtPer.text+','
                     +EdtLic.text+','+EdtQua.text+','+EdtCon.text+','+EdtMem.text
                     +')');
       Adoquery1.Open;
       adoquery1.Destroy;//adoquery1是动态创建的吗?如果不是,
                         //就不要个操作了.再说你释放adoquery1不要直接调用Destroy,
                         //而应当调用它的FREE方法才安全.
       except
         adoquery1.Destroy;//---这里原因同上.
       end;
    其他的地方你要注意数据库连接串是否正确等等......
      

  6.   

    有没有单步执行看看是哪一句出错的?
    另外,ADOQuery1.ExecSQL
      

  7.   

    Adoquery1.Open;
       adoquery1.Destroy;
    原因在这,一个是不用open要用excsql
    再一个是不能一open就destroy,这样你adoquery一旦与数据源建立连接,不出错才怪.
      

  8.   

    我已经改了一部分了(好像值和字段都没对好),还是报出错。
    现在的代码如下:
      Adoconnection1.Connected := true;
      Adoquery1.Close;
      Adoquery1.SQL.Clear;
      Adoquery1.SQL.Add('insert into leechdom_Note (buy_date,Drug_Name,Spec,Dose,'
          +'Units,Amount,Buy_price,Buy_Inc,Produce_cor,Batch_Num,Period_of_val,'
          +'License_Num,Quality_Sta,Conclusion,Inspector,Sign_Date,Memo) Values('''+ datetostr(DateTimePicker.Date)+''','''+Trim(EdtName.text)+''','''+Trim(EdtSpec.text)+''','''
                     +Trim(EdtDose.text)+''','''+Trim(EdtUnit.text)+''','''+Trim(EdtNum.text)+''','''+Trim(EdtBuy.text)+''','''
                     +Trim(EdtInc.text)+''','''+Trim(EdtCor.text)+''','''+Trim(EdtBat.text)+''','''+Trim(EdtPer.text)+''','''
                     +Trim(EdtLic.text)+''','''+Trim(EdtQua.text)+''','''+Trim(EdtCon.text)+''','''+'''56'''+'''23'''
                     +''','''+Trim(EdtMem.text)+''')');
       Adoquery1.ExecSQL;
       except
         Adoconnection1.Free;
         Adoquery1.Free;运行后提示非法访问内存,这里又不能帖图,错误的应该是在SQL语句上吧!还有,为什么要用'''而不是用',我查了书上,好像都是用'''的。
      

  9.   

    56,23是我测试用的,56应该是插入当前的日期值,可是也不行,我用的是datetostr(getdate()).
      

  10.   

    Adoquery1.Open;
    ---------->>>>>adoquery1.execsql;
      

  11.   

    问题终于知道了:
    ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='+
      pwd+';Persist Security Info=True;User ID='+
      User_Id+';Initial Catalog='+Initial_Catalog
      +';Data Source='+Data_Source;这段代码不对,我换成不用变量的,就能行的!