query.free;//就是这一句存在问题,加上这句就不能用,去掉就可以了。因为你的query是个过程里定义的局部变量,在delphi的内存管理机制中,在一个过程执行完之后,系统会自动对该过程中定义的变量进行释放,当你人工执行query.free;时,已经把query释放了,系统再想释放时就会出错。所以,你那句代码是多余的。

解决方案 »

  1.   

    对于过程中定义的非对象类变量,如integer,string类型的变量,系统可以自动在过程调用结束时释放掉,但对于对象类变量,则需要手工释放,比如在前面这个代码中,我在finally中加入一个p.free,则不会出现任何问题,独独时释放query时会出现问题。
      

  2.   

    query.free;是多余的,本因不明,但这的确是出错原因。
    反正你的query是局部变量,退出该过程时会自动释放。
    有时间也可以好好讨论一下这个问题。
      

  3.   

    用一个QUREY 是没有问题的,另外在加上一个session控间 就行了,session 怎么用,不用我说了吧,我写过ISAPI 就是调试麻烦,什么都好!  ]]
      

  4.   

    请教大家一个问题,请指点一下小弟,谢谢!
    问题1:新建选择WebServices选项卡中的SOAP Server Application:
          新建一个WAD类型的Web Service服务器,编译以后它是一个EXE文件,运行以后再运行DELPHI的Web App Debugger,即可在客户端用
    HTTPRIO来连接刚才的WAD类型的Web服务器,调用Web服务器的方法。      但是现在:      新建一个ISAPI类型的Web Service服务器,编译以后它是一个DLL文件,那么这个类型的Web服务器该怎么用啊,我想在Web服务端与
    客户端有一个登录的交互,所以Web服务端必须有一个运行界面来控制用户是否能获得我的服务等等,而现在它却是一个DLL文件,这叫我
    怎么是好啊?李维先生的那本SOAP书上说调用ISAPI类型Web服务时,HTTPRIO的WSDLLocation特性值设为:
    http://localhost/D6Scripts/PISAPIServer.dll/wsdl/IMTDemo1DBService,那么这个值中的“D6Scripts”代表什么意思啊,调用ISAPI类
    型的Web服务时HTTPRIO的WSDLLocation和URL的格式分别为什么啊?问题2:连接HTTPRIO的连接时有时出现“XML文档必须有一个顶层元素 Line: 0”,这是什么意思呢?