function返回问题

不耐烦 2009-06-04 02:17:41
function OpenData()
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
End function
call OpenData()
set rs=conn.execute("select * from [db]")

这样提示错误:缺少对象conn
function OpenData(conn)
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
End function
call OpenData(conn)
set rs=conn.execute("select * from [db]")
这样是正确的

为什么?谁来帮我仔细的解释下~
...全文
88 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyun410 2009-06-04
  • 打赏
  • 举报
回复
function OpenData(ByRef Conn) 
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
OpenData=conn
End function

改成引用类型的,不过我觉得没有必要这样写吧.
gingerkang 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 g125989100 的回复:]
看来我这么弄真没必要~!
我一直是
function OpenData(conn)
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
End function
call OpenData(conn)
set rs=conn.execute("select * from [db]")
这么用

就是 有点不理解conn对象是重哪里出来的
[/Quote]
如3楼所说
conn是相当与在外部定义的一个全局变量.
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 gingerkang 的回复:]
仅有一次查询OpenData.execute看上去要简洁一些,多次的话,这样的调用未必是好的.至少OpenData这个函数需要被多调用几次的.
[/Quote]
不管怎么说,觉得那样就是自己给自己找麻烦,没事找事做!
不就一个数据库连接吗?
不耐烦 2009-06-04
  • 打赏
  • 举报
回复
OK结贴
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 g125989100 的回复:]
看来我这么弄真没必要~!
我一直是
function OpenData(conn)
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
End function
call OpenData(conn)
set rs=conn.execute("select * from [db]")
这么用

就是 有点不理解conn对象是重哪里出来的
[/Quote]
这个相当于你定义了conn
就是类似与你在前面加一个dim conn这样的
gingerkang 2009-06-04
  • 打赏
  • 举报
回复
仅有一次查询OpenData.execute看上去要简洁一些,多次的话,这样的调用未必是好的.至少OpenData这个函数需要被多调用几次的.
不耐烦 2009-06-04
  • 打赏
  • 举报
回复
看来我这么弄真没必要~!
我一直是
function OpenData(conn)
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
End function
call OpenData(conn)
set rs=conn.execute("select * from [db]")
这么用

就是 有点不理解conn对象是重哪里出来的
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 gingerkang 的回复:]
他需要的是有返回值的过程,嫌多余就是连sub,function都不需要呀
[/Quote]
那也不必那样把
直接
function OpenData()
db = "db1.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
Set OpenData=conn
End function
set rs=OpenData.execute("select * from [A]")

不就可以了?
gingerkang 2009-06-04
  • 打赏
  • 举报
回复
他需要的是有返回值的过程,嫌多余就是连sub,function都不需要呀
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gingerkang 的回复:]
<%
function OpenData()
dim conn,db,connstr
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
Conn.Open ConnStr
Set OpenData=conn
End function
set conn=OpenData()
set rs=conn.execute("select * from [db]")
%>
[/Quote]
有必要这么写吗?
不就变成多余了?
  • 打赏
  • 举报
回复
你看,还是conn吗?
不是了吧
所以你用conn不就出错了吗?
gingerkang 2009-06-04
  • 打赏
  • 举报
回复
<%
function OpenData()
dim conn,db,connstr
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
Conn.Open ConnStr
Set OpenData=conn
End function
set conn=OpenData()
set rs=conn.execute("select * from [db]")
%>
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 g125989100 的回复:]
引用 6 楼 xyxc00 的回复:
你为什么不把他作为SUB而要使用function?

很奇怪,你这样的内容完全是一个过程,却要使用函数,函数不带参数没有试过是否可以成功!

可以的 sub function区别就在于function可以有返回值
[/Quote]
所了,你对返回值的理解有问题
这里并非返回对象
而且你用OpenData=conn后,返回的并不是conn
如果你要用对象,用得应该是OpenData了,但这里还有一个问题,你且来看下面这个输出的值

function OpenData()
db = "db1.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
OpenData=conn
End function
OpenData()
response.Write OpenData
不耐烦 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xyxc00 的回复:]
你为什么不把他作为SUB而要使用function?

很奇怪,你这样的内容完全是一个过程,却要使用函数,函数不带参数没有试过是否可以成功!
[/Quote]
可以的 sub function区别就在于function可以有返回值
xyxc00 2009-06-04
  • 打赏
  • 举报
回复
建议你将内容改为,整个过程中没涉及到参数,就不要用函数

Function,sub,class各有用处,别乱用


Sub OpenData()
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
End Sub
call OpenData
set rs=conn.execute("select * from [db]")
xyxc00 2009-06-04
  • 打赏
  • 举报
回复
你为什么不把他作为SUB而要使用function?

很奇怪,你这样的内容完全是一个过程,却要使用函数,函数不带参数没有试过是否可以成功!
  • 打赏
  • 举报
回复
因为function可以不用call的

所以让你不用call

因为你并非返回的是conn对象
不一样的,你理解有问题
不耐烦 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chinmo 的回复:]
第一个不需要用call
[/Quote]
不用call也缺少对象: 'Conn'

[Quote=引用 2 楼 gingerkang 的回复:]
函数外面加上dim conn
[/Quote]
这样是可以的但是 为什么 不能直接返回conn对象呢
function OpenData()
db = "db.mdb"
Set Conn = Server.CreateObject("Adodb.Connection")
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open ConnStr
OpenData=conn
End function
call OpenData()
set rs=conn.execute("select * from [db]")
lzp4881 2009-06-04
  • 打赏
  • 举报
回复
第一个没有conn参数,所以conn是在OpenData内部定义的,所以后面的set rs=conn.execute("select * from [db]")报错。
第二个有参数,conn在函数外面被定义,所以不报错。
gingerkang 2009-06-04
  • 打赏
  • 举报
回复
函数外面加上dim conn
加载更多回复(1)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧