传递函数参数的问题vbscript

问题描述:

我有一个小问题,vbscript 我已经声明了一些函数,从一个sql查询中传递结果集,就像参数一样,问题是函数showData接受的参数不像一个对象结果集传递函数参数的问题vbscript

function get_count(conn) 
    dim query, size 
    Set query = Server.CreateObject("ADODB.Recordset") 
    set query = conn.Execute("select count(*) as size from doctor") 
    size = query.Fields("size") 
    get_count = size 
end function 
function get_rows_from_to(from,size,conn) 
    dim result 
    Set result = Server.CreateObject("ADODB.Recordset") 
    set result = conn.Execute("SELECT name, surname,family,egn,citizenship FROM doctor limit "&from&","&size&"") 
    get_rows_from_to = result 
end function 
Sub showData(objRS) 
    dim isEven 
    isEven = false 
    Response.Write "<table>" 
    Response.Write "<tr>" 
    Response.Write "<th >Име</th><th >Презиме</th><th >Фамилия</th><th >ЕГН</th><th >Гражданство</td>" 
    Response.Write "</tr>" 
    While Not objRS.EOF 
     Response.Write "<tr>" 
     if isEven then 
      Response.Write "<td style = 'background-color :#e9ebf2'>"&objRS.Fields("name")&"</td>"&_ 
       "<td style = 'background-color :#e9ebf2'>"&objRS.Fields("surname")&"</td>"&_ 
       "<td style = 'background-color :#e9ebf2'>"&objRS.Fields("family")&"</td>"&_ 
       "<td style = 'background-color :#e9ebf2'>"&objRS.Fields("egn")&"</td>"&_ 
       "<td style = 'background-color :#e9ebf2'>"&objRS.Fields("citizenship")&"</td>" 
      isEven = false 
     else 
      Response.Write "<td>"&objRS.Fields("name")&"</td><td>"&objRS.Fields("surname")&"</td><td>"&objRS.Fields("family")&"</td><td>"&objRS.Fields("egn")&"</td><td>"&objRS.Fields("citizenship")&"</td>" 
      isEven = true 
     end if 
     Response.Write "</tr>" 
     objRS.MoveNext 
    Wend 
    Response.Write "</table>" 
    objRS.Close 
end sub 
const ROWS_PER_PAGE = 10 
Dim sConnection, conn , result,pages,selPage,from,lenght,pos,size 

from = 0 
lenght = 10 
pos = 1 
size = 0 
sConnection = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=docunion; UID=root;PASSWORD=root; OPTION=3" 

Set conn = Server.CreateObject("ADODB.Connection") 
Set result = Server.CreateObject("ADODB.Recordset") 
conn.Open sConnection 

size = get_count (conn) 
size = CInt(size) 
if size > 0 then 
    pages = size/10 
    lenght = (ROWS_PER_PAGE*pos) 
    set result = get_rows_from_to(from,lenght,conn) 
    from = lenght + 1 
    pos = pos + 1 
    showData(result) 
else 
    Set result = Nothing 
    conn.Close 
    Set conn = Nothing 
end if 

有谁能告诉我这里的问题在哪里。我是vbscript的新手。这是与对象objRS功能showData错误

Microsoft VBScript runtime error '800a01b6' 
Object doesn't support this property or method: 'EOF' 
/index.asp, line 57 

的主要问题是返回一个对象的引用函数必须使用Set他们返回值:

function get_rows_from_to(from,size,conn) 
    ' ... 
    set get_rows_from_to = result 
end function 

其他几个提示:

在使用它们之前,不需要声明函数。您可以将所有函数声明放在脚本的末尾,并将主脚本主体保留在顶部。

这是不必要的冗余:

function get_rows_from_to(from,size,conn) 
    dim result 
    Set result = Server.CreateObject("ADODB.Recordset") 
    set result = conn.Execute("SELECT name, surname,family,egn,citizenship FROM doctor limit "&from&","&size&"") 
    set get_rows_from_to = result 
end function 

和等效于此

function get_rows_from_to(from,size,conn) 
    set get_rows_from_to = conn.Execute("SELECT name, surname,family,egn,citizenship FROM doctor limit " & from & "," & size &"") 
end function 

conn.Execute()已经返回一个ADODB.RecordSet。之前通过Server.CreateObject()创建一个空白的是没有意义的。实际上,全部你的Set xyz = Server.CreateObject("ADODB.Recordset")系都是多余的。

在函数中为返回值创建单独的变量没有意义。该功能返回值:

function getFoo() 
    getFoo = "foo" 
end function 

两个最后提示:

  • 始终使用Option Explicit
  • 总是对输出到页面的任何一段数据都使用Server.HtmlEncode()。这比所有其他提示更重要。
+0

使用'Set'的提示是lifer-saver ... +1 – Dabbler 2012-11-17 21:12:03