我在学习ISAPI的Web数据库查询,现在遇到的问题是:客户端显示的查询结果分页显示的问题。
服务器端我用的是:TQuery,TDataSetTableProducer,在客户端的网页上面有上一页,下一页,可是我怎么才能让服务器端响应客户端的这个翻页功能呢??我不要ADO的分页方式;万分感谢!!!!分不够可以加分!!!

解决方案 »

  1.   

    帮帮忙吗!!我是ISAPI服务器的初学者!!
      

  2.   

    基本上很难,因为ISAPI没有UserSession管理(不知道你用什么技术做的).
    要想实现可以在客户端Cookie中存分页信息等,但是意义不大,每次都是做重新查询,效率很低.
      

  3.   

    只能是每次都查询了
    Cookie中保存分页信息或使用参数传递list.dll?page=2这样的方法
      

  4.   

    噢!我还想问一下:在处理多客户端用户查询的时候,Delphi开发人员指南上面说,只要将Tsession放到TWebMoudle上,并将AutoSessionName设置成True,Delphi就会自动处理多用户查询。问题是,如果我设定服务器端接收到客户端的请求查询并返回后,释放这个线程的话,是不是刚才查询的TQuery信息不存在了,下次再接收到同一个用户的请求,是不能调用上次的TQuery的信息的,对不对?对的话,每次都得重新查询?
    如果我在TWebMoudle中定义了一个私有变量HitCount:integer;用来测试客户端的点击次数,每接受到一次就+1;打开IE窗口,运行……不停的点击按钮,HitCount会不停的加1;可是我关闭了IE,再次打开,运行……为什么服务器返回的HitCount还是上次的累计值,再次点击是在上次的值上面累加,为什么啊!难道服务器端会为每一个IP地址执行一个线程并保持??那么保持的话,那是不是可以使用上次的数据库查询结果呢??
    我刚接触ISAPI,可能问题很多,希望大家教教我!!谢谢!!
      

  5.   

    回复人: exu(大脸猫)和 ly_liuyang(Liu Yang)
    好像也只有你们说的方法了.先谢谢了.我又编写了一个测试程序,每次接收到客户端的请求就将第1次的TQuery的查询结果后移moveby(5);,然后再返回给客户端,运行良好,我仅仅在第一次连接的时候让TQuery进行查询,以后的响应就在这次的结果上进行处理;好像没有出现问题啊。每次返回给客户端的都是新的数据。那么书上说的服务器端每接受到客户端的请求就创建一个新的线程,查询完毕就释放掉,好像不太对阿。怎么回事??Delphi开发人员指南上说可以设定TWebApplication的CacheConnections属性,可是我怎么没找到这个TWebApplication在哪呢?
      

  6.   

    由于我是单机调试,所以很多问题不能进行网络验证。经过昨天晚上的鏖战,弄明白了一点问题:如果设置Application.CacheConnections:=false;就会在服务器端接收到客户段的请求就创建一个线程,响应完毕就释放这个线程.True的话,就会保留这个线程,上次的数据库查询结果,下次还能使用;但是问题有来了,Application还有一个MaxConnections属性,如果设置它为20,是不是就说明我的这个服务器一次只能处理20个连接。如果我设置Application.CacheConnections:=true;那么就是这20个连接都会存在缓存中,这个没什么;问题是,我的服务器怎么才能知道这20个连接中的某些连接已经无效,这个我就可以接收新的连接;如果不知道的话,那岂不是我的服务器只能处理这旧的20个连接,在有新的连接就会告诉人家服务器忙,这似乎不合理阿!那位仁兄给我讲解一下,谢谢!