程序做二次查询,需要关闭rs.close,然后再次打开rs进行下一次查询。现在问题出在怎么样关闭这个rs,请大家帮忙。ASP代码:<% 
   Dim rs
   Dim DelphiASPObj
   Set DelphiASPObj = Server.CreateObject("zm.Data_link") 
   Set rs = DelphiASPObj.SelectData("select * From admin")
   Do while not rs.eof
   response.write rs("username")&"<br>"
   rs.movenext
   Loop   Set rs = DelphiASPObj.SelectData("select * From hotelmain")
   Do while not rs.eof
   response.write rs("id")&"<br>"
   rs.movenext
   Loop
%>DELPHI代码:function SelectData(const Get_Sql: WideString): OleVariant; safecall;
function CloseConnect: OleVariant; safecall;
var Link_String : String;
    Conn : OleVariant;
    rs:OleVariant;
procedure TData_Link.OnStartPage(const AScriptingContext: IUnknown);
begin
  inherited OnStartPage(AScriptingContext);
   Conn := CreateOleObject('ADODB.Connection');
   rs := CreateOleObject('ADODB.Recordset');
end;
如下是像以下这样子的代码,程序会告诉“对象关闭时,操作不被允许”,发现是rs.close在程序中已经关闭了,到ASP中的话就出错。function TData_Link.SelectData(const Get_Sql: WideString): OleVariant;
var
   sql:WideString;
begin
   GetString;
   Conn.open(Link_String);
   sql := Get_Sql;
   rs.open (sql,conn,1,1,1);
   result := rs;
   rs.close;
end;
多添加一组函数代码用于关闭rsfunction TData_Link.CloseConnect: OleVariant;
begin
     rs.close;
end;在ASP中使用:
   Dim rs
   Dim DelphiASPObj
   Set DelphiASPObj = Server.CreateObject("zm.Data_link") 
   Set rs = DelphiASPObj.SelectData("select * From admin")
   Do while not rs.eof
   response.write rs("username")&"<br>"
   rs.movenext
   Loop
   DelphiASPObj.CloseConnect'提示没有CloseConnect对象,应该怎么做才能把rs关闭呢?

解决方案 »

  1.   

    因为他们都是com对象不管在delphi或者在asp中一样操作,直接在网页中关闭即可   Do while not rs.eof
       response.write rs("username")&"<br>"
       rs.movenext
       Loop   rs.close   .....另外,可以直接在ASP种创建ADOCONNECTION和ADODATASET和DELPHI种一样使用何必要在你的组件中转一圈呢。
      

  2.   

    to findcsdn(searchcsdn) 兄弟,如果我在asp中写下rs.close的话,没有效果,第二次查询的时候仍然说"对象打开时,操作不被允许。 "应该就是rs没有关闭我这样写的原因是,想把连接和查询在组件中完成,这样虽然和ASP中没有差别。但在效率和安全性上会高一些,最后把结果集返回出来就行了