2010-11-22 14 views
0

私は古典的なASP質問があります。Response.Writeの従来のASPサブプロシージャコール

これを試行します。レコードセットは1995〜2020年の単純なリストです。私はドロップダウンのデフォルト選択を2010年(今年)にしようとしています。

問題:私は「Response.Writeを」におけるサブPROCを呼び出すしようとしているが、それは私にこのエラーを与え続け:以下

"Error '800a000d' Type mismatch: 'selectyear' "

試みうちで1つの作品を何の問題も、コードです。しかし、 "if"ロジックをサブプロシージャに移動してRequest.Writeで呼び出すと、エラーが発生します。

Attempt1が動作し、Attempt2が動作しない理由を説明できますか。

' Attempt 1: 

    rsYEAR.Open qYEAR, objconn, 0, 1 
    response.Write "<tr><td>Year:</td> <td> <select name='theyear' style=""WIDTH: 67px"">" 
    dim selyr 
    while not rsYEAR.EOF 
     if CINT(rsYEAR.fields("year")) = year(now) then 
      selyr = "selected" 
     else selyr = "" 
     end if 

     Response.Write"<option value='" & rsYEAR.fields("year") & "' "& selyr &" >" & cstr(rsYEAR.Fields("year")) 
     rsYEAR.MoveNext 
    wend 
    response.Write "</select></td></tr>" 
    rsYEAR.Close 


' Attempt 2: 

    rsYEAR.Open qYEAR, objconn, 0, 1 
    response.Write "<tr><td>Year:</td> <td> <select name='theyear' style=""WIDTH: 67px"">" 
    dim selyr2 
    while not rsYEAR.EOF 

     Response.Write "<option value='" & rsYEAR.fields("year") & "' " & cstr(selectyear(cint(rsYEAR.fields("year")))) &" >" & cstr(rsYEAR.Fields("year")) 
     rsYEAR.MoveNext 
    wend 
    response.Write "</select></td></tr>" 

    'close and clean up 
    rsYEAR.Close 
    set rsYEAR = nothing 

ご回答いただきありがとうございます。 は シヴァ

答えて

0

私はintに変換できないデータがあるのでcint(rsYEAR.fields("year"))がエラーを投げていることを推測しています、ありがとうございました。私はそれが両方の場合に起こることを期待するでしょう。

selectyearがすでに文字列を返すと仮定して、cstrを2回目の試行でcstr(selectyear(cint(rsYEAR.fields("year"))))に入力する必要はありません。 selectyearのコードを表示できますか?

+0

おかげになる年のリストだけです。私はSUBコールの前に "cstr"を使って変換しようとしましたが、それでも同じエラーが出ました。 – Shiva

+0

相続人Selectyearのためのコード:サブselectyear(年) \t場合 \tエンド – Shiva

+0

エンドサブ あれば "ああ" 他\t Response.Writeを "選択" その後、(今)年=年 \t \tのResponse.Write - あなたは'selectyear'内の値を' Response.Write'してはいけません。あなたは 'cstr 'に値を渡しているので、' selectyear'関数から値を返す必要があります。その文字列を別の文字列に連結します。 – RedFilter

0

(どのようにこれが正しい答えずに長い間座っている?)

サブは値を持っていないので、あなたはそれをResponse.Writeをすることはできません。関数を使うか、Sub呼び出しをそれ自身の行に置く必要があります。代わりに、機能のサブを使用して

rsYEAR.Open qYEAR, objconn, 0, 1 
response.Write "<tr><td>Year:</td><td><select name='theyear' style=""width: 67px"">" 
dim y 
while not rsYEAR.EOF 
    y = rsYEAR.fields("year") 
    Response.Write "<option value='" & y & "'" & IsCurr(y) & ">" & y & "</option>" 
    rsYEAR.MoveNext 
wend 
response.Write "</select></td></tr>" 
rsYEAR.Close 

Function IsCurr(yr) 
    if Cstr(yr) = Cstr(year(now)) then 
     IsCurr = " selected" 
    else 
     IsCurr = "" 
    end if 
End Function 

、これはresponse.theのSQL出力の​​

rsYEAR.Open qYEAR, objconn, 0, 1 
response.Write "<tr><td>Year:</td><td><select name='theyear' style=""width: 67px"">" 
dim y 
while not rsYEAR.EOF 
    y = rsYEAR.fields("year") 
    Response.Write "<option value='" & y & "'" 
    IsCurr y 
    Response.Write ">" & y & "</option>" 
    rsYEAR.MoveNext 
wend 
response.Write "</select></td></tr>" 
rsYEAR.Close 

Sub IsCurr(yr) 
    if Cstr(yr) = Cstr(year(now)) then 
     Response.Write " selected" 
    end if 
End Sub 
関連する問題