一个关于如何更好封装PROC以便实现简单代码的物理分离的小问题(感兴趣的来) ( 积分: 100 )

  • 主题发起人 主题发起人 hotelsoft
  • 开始时间 开始时间
H

hotelsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
提出问题:<br>&nbsp;&nbsp;&nbsp;&nbsp;如何才能使用CLASS很好的封装关于PROC的调用,QUERY的就不用了,关键是PROC(存储过程)<br><br>问题举例:<br>&nbsp;&nbsp;&nbsp;&nbsp;A类是个专门的数据库通讯类,其中里面有个方法C是专门返回对象调用的PROC的记录集(OPEN)<br>var<br>test:a<br>a:=test.create;<br>try<br>&nbsp;&nbsp;s=a.c(xxxxxx)&nbsp;--这里的XXX指传给C方法的参数,S表示返回的记录集<br>finally<br>&nbsp;&nbsp;freeandnil(a)<br>end<br><br>现在有2个问题摆在我面前:<br>1、如何写这个C方法才能做到大小通吃(就是通用)无论传入什么样的PROC只要是OPEN记录集方式的就调用C就可以<br>2、这个S用什么类型比较合适,S我心中有个构思了,也能实现,但我觉得还是不很好,所以看看大家还有什么好方法没。<br>此样封装的好处:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;做为调用者(界面程序编写者)不必要了解该数据连接使用的具体技术(ADO.BDE.DBEXPRESS等)只需要按照约定传入具体的参数即可,将来无论扩展修改甚至数据库链接技术手法的改变,那么我只需要修改A中的C方法即可,无需涉及到调用者<br><br>如何嫌弃分数少,我可以再开分,主要是互相学习下
 
自我修正给的小例子里写错了点点东西:<br>var<br>test:a<br>test:=a.create;<br>try<br>&nbsp;&nbsp;s=test.c(xxxxxx)&nbsp;--这里的XXX指传给C方法的参数,S表示返回的记录集<br>finally<br>&nbsp;&nbsp;freeandnil(test)<br>end<br>怎么没人回答呢?顶的也没有,郁闷
 
沙发![:D]<br>s&nbsp;用数据集吧dataset
 
谢谢楼上,我主要想知道这个方法C的写法
 
[:(!]怎么没人啊
 
PROC的调用和QUERY的有什么不一样吗?<br>A类&nbsp;应该有另外一个方法,比类在create时判断属于什么连接。
 
variant数组不就可以了?<br>参数1:存储过程名<br>参数2:2维variant数组,分别保存参数名/值<br><br>或者参数/值分两个数组,参考dataset.locate方法
 
to&nbsp;ysai:<br>我的所有PROC都是放在DATAMODULE上的,比如现在我要调用DM上的K存储过程<br>那么在方法C里的代码应该如何写?假设已经实现了存储过程名和参数的传递
 
procedure&nbsp;c(const&nbsp;sname&nbsp;:&nbsp;string;&nbsp;const&nbsp;params&nbsp;:&nbsp;Variant;&nbsp;const&nbsp;values&nbsp;Variant);<br>begin<br>&nbsp;&nbsp;if&nbsp;varisarray(params)&nbsp;then<br>&nbsp;&nbsp;begin&nbsp;&nbsp;//多个参数<br>&nbsp;&nbsp;&nbsp;&nbsp;params[0]:=values[0]<br>&nbsp;&nbsp;&nbsp;&nbsp;....<br>&nbsp;&nbsp;end<br>&nbsp;&nbsp;else&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VarIsEmpty(params)<br>&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;//无参数<br>&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;begin&nbsp;&nbsp;//1个参数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params&nbsp;=&nbsp;values;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;...<br>&nbsp;&nbsp;end;<br>end;<br><br>调用<br>c('proc_name',&nbsp;param1,&nbsp;value1);<br>c('proc_name',&nbsp;vararrayof(param1,&nbsp;param2),&nbsp;vararrayof(value1,&nbsp;value2));
 
to&nbsp;ysai:<br>呵呵看来这分,你是跑不掉了,不过不急帖在明天会结束,先悬挂下,也让别人涨涨知识
 
看了下LOCATE方法的源码,真的不错,谢谢ysai的指导
 
后退
顶部