关于asp与数据库的一些问题,困扰了我好久 ( 积分: 100 )

  • 主题发起人 主题发起人 ttxyy
  • 开始时间 开始时间
你的自定义函数怎么写的啊??
 
'自定义函数,返回格式如"2005/10/01"
Function GetCurrDate
dim mY,mM,mD,mYMD
mY=CSTR(year(now()))
mM=CSTR(month(now()))
mD=CSTR(day(now()))
if len(mM)<2 then
mM=&quot;0&quot;+mM
End if
if len(mD)<2 then
mD=&quot;0&quot;+mD
End if
GetCurrDate =mY+&quot;/&quot;+mM+&quot;/&quot;+mD
End Function
 
'这几句哪能写到循环里面啊?应该提到do
While Not rs.EOF 外面:
Set Command1 = Server.CreateObject(&quot;ADODB.Command&quot;)
Set Command1.Activeconnection = conn
Command1.Commandtype = 4
Command1.Commandtext = &quot;Get_CzryInfo&quot;
'Command1 创建一次不就够用了么。
 
你提出这些问题,说明你对创建一个组件对象的概念完全没有,这可是最最基本的概念了
set rs=server.createobject(&quot;adodb.recordset&quot;)
或 set conn=server.createobjce(&quot;adodb.connection&quot;) 是用来创建一个对象
其中conn代表创建数据链接对象,用来指定如何连接登录到数据库
rs代表recordset记录集,用来指定打开哪些数据表的记录集
rs记录集的创建和打开方式有两种:
1、先创建对象,再打开记录,即先set rs=server.createobject(&quot;adodb.recordset&quot;) 再rs.open sql,conn(用于rs已创建了)
2、直接创建并打开记录:set rs=conn.execute(sql)(用于rs还没有创建时)
(sql为sql语句比如select * from 数据表 where 条件)
同一个页面里,rs在第一次执行查询后,如果当前查询不再使用,也可以利用它执行其它查询,这时只需要close后,就可以再用rs.open sql,conn了,即创建后可反复使用,等所有程序都完成不再需要时,便可用set rs=nothing将已创建的对象撤销,当然,如果不撤也不会出错
估计你出错主要是两种情况:
1、复重创建同一个同名对象
2、rs对象上次使用后还没close就又执行新的查询(open)
 
NewLearner,你好!谢谢你的指点。
你说的:
2、直接创建并打开记录:set rs=conn.execute(sql)(用于rs还没有创建时)
为什么会出现一些意外情况,比如说rs中有7个字段,只有两个字段可以被显示出来(并不是说第一个和第三个,而是只有两个(比方说第3和第5可以显示出来)再多就不能显示出来了。这种情况我遇到过,最先我以为是其它方面出了问题,请了一个高手帮我改代码,他没发现什么问题。后来我将set rs=conn.execute(sql)改为rs.open sql,conn,1,1这种方式就可以全部显示出7个字段了。请问这是什么原因引起的呢?
 
'这几句哪能写到循环里面啊?应该提到do
While Not rs.EOF 外面:
Set Command1 = Server.CreateObject(&quot;ADODB.Command&quot;)
Set Command1.Activeconnection = conn
Command1.Commandtype = 4
Command1.Commandtext = &quot;Get_CzryInfo&quot;
'Command1 创建一次不就够用了么。
 
vvyang,我要把自定义函数作为存储过程的参数,要怎么做才行?
 
vvyang,我把command1对象移到循环外了,可是还是不能使用我的那个自定义函数,有什么好的解决办法吗?
 
ttxyy,你在ID:3248867说的问题确实有些奇怪,按道理应该不会这样,这就要把你的完整代码提供出来,具体情况从前到后具体分析了
 
两点意见:
1、关于<!--#include file=&quot;connDatabase.asp&quot;-->:
我的理解是,上面这句话相当于在运行时把connDatabase.asp文件的内容替换到这个
地方,只是简单替换,与Delphi的引用不一样,而类似于Delphi的{$I 'My file'}.因为
不同的asp单元都需要这部分代码,所以才把这部分分离出来,在使用的时候包含就可以了。
我做了测试:我原来每个单元中都用<!--#include file=&quot;connDatabase.asp&quot;-->这种方式
引用了connDatabase.asp,然后新建一个test.asp,内容就一行:
<!--#include file=&quot;connDatabase.asp&quot;-->,
而其他的单元都改成<!--#include file=&quot;test.asp&quot;-->,然后运行,结果是一样的。另外
asp中的系统变量Session、Application等可以看作是全局变量,其他自定义的变量都是只
有在该单元运行时才有效。除非#include(包括嵌套的#include) 另外一个单元,否则不能
使用另外单元的变量。
楼主在3248562中说运行时出现提示“找不到对象”,是提示找不到connDataBase吗?
2、关于存储过程问题:
在ASP中用ADODB.Command对象执行存储过程,我通常都是先创建参数,然后再对参数赋值,
你那个自定义函数的问题可能是没有指定参数的类型导致的,你这样试试:
Command1.Parameters.Append Command1.CreateParameter(&quot;参数名&quot;,参数类型,输入输出类型,参数大小,参数数据)
具体可以参考http://www.bridge-home.com/article/Article_Sh_286.htm
我以前做的时候就是从这里参考的
 
独帅,你好,感谢你的解答!
-------asp中的系统变量Session、Application等可以看作是全局变量,其他自定义的变量都是只
有在该单元运行时才有效。除非#include(包括嵌套的#include) 另外一个单元,否则不能
使用另外单元的变量。
--- 楼主在3248562中说运行时出现提示“找不到对象”,是提示找不到connDataBase吗?
我在aaa.asp中定义一个rs记录集,即:dim rs ,在bbb.asp中并没有<!--#include file=&quot;aaa.asp&quot;-->
你说aaa.asp中的rs只在aaa.asp中有效,可是当我在bbb.asp中定义一个同名的rs记录集时,电脑却出错说是重复定义rs
我也做了测试,如果我在aaa.asp中不先使用dim rs来定义rs,而是直接set rs=....时就不会在bbb.asp中提示说重复定义rs,所以我推测可能在aaa.asp中使用dim 变量名 来定义的变量是全局变量。
在3248562中说找不到对象,是指当时使用了<!--#include file=&quot;connDataBase.asp&quot;-->的方式造成的。后来我直接使用set conn=....的方式就解决了。
关于存储过程中的自定义函数,也解决了,是由于我在给函数赋值后还有两行注释代码,将这两行注释去掉就行了。
 
后退
顶部