3

セクションにサーバー側を含む従来の ASP ページがあります。

<!--#include file="../includes/DataTransferFunctions.asp"-->

この関数内で、ライブラリ ファイルの先頭に次のように記述します。

  Dim wsDataToXferArray()

そして、ライブラリ内の関数の 1 つの中で、

 redim preserve wsDataToXferArray(3,pSub).

redim ステートメントで型の不一致が発生するため、これは機能しません。ただし、インクルード ライブラリの先頭ではなく、メイン ASP の先頭に Dim ステートメントがある場合は機能します。

ライブラリ内の複数の関数で変数を使用できるように、変数をグローバル スコープで宣言できるようにする必要がありますが、自己完結型になるようにライブラリ コード内で定義できるようにする必要があります。明らかな何かが欠けているように感じます。

ありがとう。

問題を示すカットダウン バージョンを次に示します。メイン ASP と、'2 Dim' ステートメントの場所を示す関連ライブラリを含めました。

ありがとう。

<%@ language = vbscript %>
<% Option Explicit %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%

Response.Buffer = true
Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=ISO-8859-1"
Response.CodePage = 1252
Response.CharSet = "ISO-8859-1"

Dim wsResult,wsDatabase
Dim wsSubX
'
'Dim wsDataToXferArray()

subRoutine()
'
'------------------------------------------------------------------------------------------------
sub subRoutine
'------------------------------------------------------------------------------------------------

    wsSubX  = 0
'
    if wsResult = "" then wsResult  = fncEnableSetAndCreateDataTransfer(wsDatabase,"LK-PART","abc","A",wsSubX)              :   wsSubX  = wsSubX + 1

End Sub

%>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />
<title></title>
<%
SubIncludeOtherStyleSheets
SubIncludeJs
%>

<!--Include file containing functions to convert dates and to get sales order status description -->
<!--#include file="../includes/date_convert.asp"-->
<!--#include file="../includes/KHDataTransferFunctions.asp"-->
<!--#include file="../includes/IncludeStyleSheets.asp"-->
<!--#include file="../includes/IncludeJs.asp"-->

</head>

<body>

<form action="KHPartMaintenance.asp" method="post" name="form1" id="form1" >

<table class="tableForm Center Font7pt" width="1000">
    <thead>
    <tr>
        <th colspan="5">Part Maintenance</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td><input type="submit" class="submit1" name="submit1" id="btnList" value="Get Part" onclick="javascript:return fncFormOnSubmit('Get');" /></td>
    </tr>
    </tbody>
</table>

</body>
</html>

これは KHDataTransferFunctions.asp ライブラリです。

<%
Dim wsDataToXferArray()

'------------------------------------------------------------------------------------------------
function fncEnableSetAndCreateDataTransfer(pDatabase,pName,pValue,pDataType,pSub)
'------------------------------------------------------------------------------------------------
'
Dim wsPrefix    :   wsPrefix = left(pName,2)
'
    fncEnableSetAndCreateDataTransfer   = ""

    call subAddFieldToDataTransferArray(wsPrefix,pName,pValue,pDataType,pSub)

end function

'------------------------------------------------------------------------------------------------
sub subAddFieldToDataTransferArray(pPrefix,pName,pValue,pDataType,pSub)
'------------------------------------------------------------------------------------------------
'
' Build the array of the fields for each 'transaction'.
'
    redim preserve wsDataToXferArray(3,pSub)

    wsDataToXferArray(0,pSub)   = pPrefix
    wsDataToXferArray(1,pSub)   = pName
    wsDataToXferArray(2,pSub)   = pValue
    wsDataToXferArray(3,pSub)   = pDataType
'   
End Sub

%>

問題を解決しました。これは、ASP ページ内のインクルード ファイルの位置が原因​​でした。

これが改訂されたコードです (まあ、その一部です ....)。

<%@ language = vbscript %>
<% Option Explicit %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%

Response.Buffer = true
Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=ISO-8859-1"
Response.CodePage = 1252
Response.CharSet = "ISO-8859-1"
%>
<!--Include file containing functions to convert dates and to get sales order status description -->
<!--#include file="../includes/date_convert.asp"-->
<!--#include file="../includes/KHDataTransferFunctions.asp"-->
<!--#include file="../includes/IncludeStyleSheets.asp"-->
<!--#include file="../includes/IncludeJs.asp"-->
    <%
Dim wsResult,wsDatabase
Dim wsSubX
'
'Dim wsDataToXferArray()

subRoutine()
'
'------------------------------------------------------------------------------------------------
sub subRoutine
'------------------------------------------------------------------------------------------------

    wsSubX  = 0
'
    if wsResult = "" then wsResult  = fncEnableSetAndCreateDataTransfer(wsDatabase,"LK-PART","abc","A",wsSubX)              :   wsSubX  = wsSubX + 1

End Sub

%>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1" />
<title></title>
<%
SubIncludeOtherStyleSheets
SubIncludeJs
%>
4

1 に答える 1

1

問題は、サーバー側のインクルード ファイルの場所が原因でした。これらは、メインの ASP コードが実行される前に行う必要があるため、グローバル変数は十分に早く宣言されます。

解決策については、元の投稿の変更されたコードを含むブロックを参照してください。

于 2012-10-22T08:50:18.077 に答える