2011-06-12 7 views
0

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에 새로운 사람이다.

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

몇 가지 다른 :이

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

답변

3

가장 큰 문제는 객체 참조를 반환하는 함수가 반환 값 Set을 사용해야한다는 것입니다 객체 objRS와 기능으로 만들었에서 오류가 힌트 :

기능을 사용하기 전에 선언 할 필요가 없습니다. 모든 함수 선언을 스크립트의 끝에두고 기본 스크립트 본문을 맨 위에 둘 수 있습니다.

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

'설정'을 사용하는 힌트는 생명의 은인 ... +1 – Dabbler