我在WIN2000下写的数据库程序,采用的是ADO。一直没到WIN98和WINME下测试过,谁知一试却出错了,有两个提示信息是:链接文件****.EXE到不存在的USER32.DLL: SetLayeredWindowAttributes。另一个是:Unable to create process:与系统链接的设备不能正常运转。其中的‘****.EXE’是我的程序名称。我想WIN98下可能是ADO的原因,但我用的是第二版,这一原因应该是排除了的。而且我和程序是有一个欢迎窗口的,程序出错时连欢迎窗口都未出现。这时主窗口都未建立,别说数据模块了(而且WINME都不行,所以就一定不是ADO的原因了)。不过不管它,装上MDAC2.5再说,还是依旧。于是不得已装上DELPHI调试,发现这个错误我根本无法拦截到,一按F9就出错(我断点在Application.Initialize都拦截不到)。而且我同时有几个ADO的程序(是同一个大系统的子程序)都可运行,唯独主程序不可以运行,又找不到什么原因。各位大虾救我,100分不够再补,意见也有分。

解决方案 »

  1.   

    引用了2000里独用的API吗?
    不会连源码都不能编译的!
      

  2.   

    我的win2000+delphi5.0+sql server2000
    delphi5.0打过包,在win98下装个mdac2.6什么问题也没
      

  3.   

    已经不是的问题了我写的一个系统其中包括主程序和备份恢复数据程序等四五个程序都要用到ADO连接数据库的,并且是分开独立运行的程序。其它的都可运行唯独主程序还未启动就报错。而且我写的其它程序都可在98下运行的,唯独这个我不知道为什么。在工程文件里设断点都无法拦截错误。
      

  4.   

    你有没有声明外部函数 USER32.DLL: SetLayeredWindowAttributes。
    并且user32.dll前面加了绝对路径,如winnt只是个猜测
      

  5.   

    不好意思写错了:已经不是的ADO问题了...
      

  6.   

    没有,而且调用动态链接库是不用加路径的。我使用全程序搜索大法都找不到一点相关类似的声明。其实不搜也是没有的,程序是我一个人写的,有没有是一定会知道的了。而且我都不知道上面的USER32.DLL: SetLayeredWindowAttributes是什么东东。
      

  7.   

    刚才看你的:
    "不好意思写错了:已经不是的ADO问题了..."我还以为你已经找到错误了呢,不好意思
      

  8.   

    害得我发布出去时说WIN98第二版之前打个ADO补丁(我已经提供了)就好了.之后版本的一个EXE自动登陆只需少少的人工参与就可连上数据库用了.现在搞的闹笑话,丢人到底了。
      

  9.   

    把create中的事件一个一个的注释掉(如果是静态创建)
    看看问题在哪个.pas中
      

  10.   

    昨天忘了说编译很正常,因为这程序也用了好几个月了,都是在WIN2000下运行的。还是没有搞定,昨晚试了几个小时,发现问题就该就是出在主窗口的Pas文件中,但是拦截不到错误,只有慢慢的注释主窗体的程序,一边搞一边调试,注释了很久,因为是主窗体,牵牵扯扯的东东太多了。多调试几次,98都罢工了。
      

  11.   

    你查查看WIN2000和WIN98中USER32.DLL的路径时否一致
      

  12.   

    USER32.DLL: SetLayeredWindowAttributes
    98下沒這個函數,2000下才有
    你在98下有問題,在2000下運行正常,
    這是因為你在某個Form中使用了這個屬性:AlphaBlend
    該屬性只支持2000及發上系統,在98上用有問題。
    你試圖取得透明的窗口,快快把這個屬性孌回false吧。與ADO無關。
      

  13.   

    TO PPower():
    是这样子吗?我要回去试试,我真是要命,星期天都得上班,上班不方便试。晚上试出来了,明天结贴。不过我程序里是没有那个意图的,不知道是否在舍地方用了。谢谢你先。
      

  14.   

    已经解决,多谢 PPower() , 不过不是你说的那样.但是你说的问题.结贴.
      

  15.   

    就是 PPower() 说的问题,你用Delphi5编译一次,或者你在Win98下用Delphi6编译一次,因为使用了AlphaBland所以…………
    那个函数就是使窗口透明使用的。在Delphi6里面,这个SetLayeredWindowAttributes函数是动态加载的,应该不会出现问题,可能是你的程序里面静态连接了这个函数要不就是你的DLL或者附加程序静态调用了这个函数,你该成动态的即可。