做一个从ini中读数据连接数据库的程序:
1.我把Adoconnection1放到DataModule中,Adoquery1放到Form1中,
2.procedure TForm1.FormCreate(Sender: TObject);
var
   Myinifile:TInifile;
   Filename:string;
begin
   Filename:=ExtractFilePath(Paramstr(0))+'connstr.ini';
   Myinifile:=Tinifile.Create(Filename);
  try
    try
      DataModule2.ADOConnection1.ConnectionString:=Myinifile.ReadString('conn','conn','');
      Adoquery1.Active:=true;
    except
      on e:exception do
        showmessage(e.Message);
    end;
  finally
     Myinifile.Free;
end;
end;如果Adoconnection不放到Datamodule中,放到Form1中,就可以连接,但放到DM中就提示出错原因为:
Project Project1.ext raised exception class EAccessViolation with message'Access violation at
address 004AB011 in module 'Project2.exe', Read of address 0000000058',Process stopped ,use step
or Run to continue我把代码放到formshow 或者 formactive中也出现相同的错误!而且连接不上,请问如何解决?!?...感谢!本人必揭帖!

解决方案 »

  1.   

    你是不是这个form的创建在DM之前那样在formcreate事件的时候DM还不存在,当然不行了
      

  2.   

    楼上说得对!
    你在Form的onCreate中,先DataModule := TDataModule.Create(nil);
      

  3.   

    那放到formshow 和formactive中也是同样的原因没?!...这三个有地方有什么区别啊?!
      

  4.   

    //先声明
    var DataModule2:TdataModule;
    //再
    DataModule2 := TDataModule.Create(nil);提示DataModule2.ADOConnection1.ConnectionString:=Myinifile.ReadString('conn','conn','');这行出错啊!
      

  5.   

    DataModule2.ADOConnection1.ConnectionString:=Myinifile.ReadString('conn','conn','');
    这行出错!绝对是这里出错!
    你只是读出了CONN的东西!别的呢?除非你的INI中是写成CONN=-----------------------。
    数据库连接的那一大串东西!。
    如果是这样的话,那你写INI文件又没有意思了!都不可以动态修改了!
      

  6.   

    你要是在INI文件里写数据库的连接配置信息的话,一般都是写上数据库的名称和路径一些变量,然后由这些可变的参数组成你的数据库连接字符串
      

  7.   

    呵呵
    解决你问题的法:让 DataModule2 自动创建!!!方法:     菜单->Project->Options...  选中  Froms 页!
      你的 DataModule2 应该是在右边 Available forms 里的,你将其移到 左边 Auto-create forms 里面!OK!再运行就不会出错了,测试过的!
    呵呵,当然,你不用在代码里面再创建了!
      

  8.   

    你在Form的onCreate中,先DataModule := TDataModule.Create(nil);