作者yauhh (哟)
看板Visual_Basic
标题[VB6 ] ADO Commnad会有side effect吗?
时间Fri May 25 23:52:47 2012
各位好. 最近遇到一个情况,觉得好像发现到ADO物件会遇到Side Effect.
平台是VB6 + SQL Server 2000, ADO程式库版本大概是2.8吧.
预存程序是希望给一个可省略的参数,所以写成这样:
create proc some_proc( ..., @d datetime = null )
begin
insert into table1 ( ..., d ) values ( ..., @d )
end
VB6程式中,是将Command物件包起来做:
public sub update_some( ..., optional d as string = "" )
...
set global_module.cmd = new Command
...
if d <> "" then global_module.cmd.parameters("@d") = d
global_module.cmd.execute
update_some = global_module.parameters("@RETURN_VALUE")
end sub
内容主要是说, update_some 函数引用了外部Command物件, 并且参数 @d 是
在需要的时候才给值. 我不晓得在这里如果 @d 参数没给值是否如我所想的
是一个预设值.
所发现的问题是,我有个回圈呼叫 update_some 这个函数好多次,而每次给的参数
都是独立的参数:
for i = 1 to N
...
dim d as string
d = lstData.ListItem(i).SubItem(k)
...
update_some( ..., d)
...
next i
一般较多时候 d 是空字串所以没事. 不过,当 d 拿到一个日期文字时,这整个回圈
执行之後,发现资料库中填的 d 栏位值,从放入了 d 日期值之後,接下来放进去的
其他笔记录的 d 日期值全都是同样那个日期值. 看样子像是 side effect.
这是 side effect 吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.112.231.66
1F:推 JacobTai:if d <> "" then ...... <-- 检查一下这一行吧... 05/26 12:20
2F:→ yauhh:没错,因为我有时没有给值; 但我想不出为何没有给值,预存程序 05/26 19:17
3F:→ yauhh:执行的结果就是复制之前执行过的参数.明明Command物件是新的 05/26 19:17
4F:→ yauhh:回圈中提供的d值也都是新的. 05/26 19:18
5F:→ yauhh:後来我的确是修改了if d<> "" then那边的程式,使它若不拿到 05/26 19:19
6F:→ yauhh:日期值就拿到NULL.但主要的问题:它有没有side-effect,仍未解 05/26 19:20