程序概况:
主窗体,有数据显示控件
数据模块(DataModule)维护数据库连接(ADO)。
数据库文件(Access.MDB)为了程序可以支持拷贝后即可运行,因此ADO的连接字符串是根据当前路径生成的。
同时,要求主窗体在创建后即可以使用数据库连接。但是:取得当前路径一般使用Application.ExtractFilePath(),
且:Application对象似乎只有在窗体对象中才有效。无窗体的模块和DataModule中都不能使用。
即:当前路径必须要从DataModule外部传入才行。问题是:
为了让主窗体在显示时就可以使用数据,因此DataModule必须先创建
为了让DataModule可以取得当前路径,因此必须在DataModule前创建其他窗体,以访问Application对象
似乎是个先有鸡还是先有蛋的问题。请问有没有方法不需要创建额外的隐藏窗体取得当前路径?

解决方案 »

  1.   

    ExtractFilePath应该是取的该可执行文件的路径
      

  2.   

    Application对象是在Forms单元中定义,并在单元的initialization部分初始化的
    工程文件中就引用了Forms单元,所以它肯定会在你的DataModule初始化之前创建
    在DataModule中要引用Application对象,只要引用Forms单元就可以了
      

  3.   

    漏了
    Application对象是在Forms单元中定义,并在单元的initialization部分初始化的
    >>
    Application对象是在Forms单元中定义,并在Controls单元的initialization部分初始化的
      

  4.   

    getcurrentdir 也可取当前路径, use SysUtils
      

  5.   

    re brightyang 我的提法不正确,将当前路径与可执行文件路径混为一谈。
    re ysai 谢谢!感谢您的回答,我就是要这个答案。
    re getcurrentdir 获取当前路径,这个当前路径会根据系统当时的状况变化,我曾经这样做,但是因为不保险,所以没有采用。
    没有说清楚问题,让大侠们费解了。
    见谅!!
      

  6.   

    白痴问题
    用GETGURRENTDIR这个SYSTEM单元的函数不就行了.一样可以取得当前路径
      

  7.   

    本人严重无语。
    难道不会能过MainForm的onCreate/onClose事件写代码来打开关闭数据库链接吗?
      

  8.   

    GETGURRENTDIR这个是当前路径,这个是不安全的,因为当前路径不一定是程序的所在路径,
    如:创建了 执行文件的快捷方式 的情况
      (必须要设置快捷方式的起始路径,而Windows右键菜单创建的快捷方式,在缺省状态是空值)MainForm的onCreate/onClose会影响整个程序的封装性。感谢关注!