出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

Server.Executeについて   はりさん [2002/01/22 11:08:14] [1475]
  Re:Server.Executeについて   Tomitomiさん [2002/01/22 11:28:17] [1476]
  Re:Server.Executeについて   arikさん [2002/01/22 13:12:22] [1478]
    Re:Server.Executeについて   はりさん [2002/01/22 13:31:42] [1479]
      Re:Server.Executeについて   arikさん [2002/01/22 13:50:57] [1480]
        Re:Server.Executeについて   はりさん [2002/01/22 14:58:11] [1481]
          Re:Server.Executeについて   arikさん [2002/01/22 15:07:35] [1483]
          Re:Server.Executeについて   Tomitomiさん [2002/01/22 15:10:14] [1484]
            ありがとう ございました   はりさん [2002/01/22 18:13:18] [1488]

[1475] Server.Executeについて
投稿者:はりさん 2002/01/22 11:08:14
はじめまして!!
今 実行ページとは別に使用するサブルーチンを格納したASPを用意しています。
親ページ(メイン)から子ページ(サブルーチンが入ってるページ)を
呼び出す際に「Server.Execute」を使用し子ASPファイルが親ASPの中にあるかのしようと思っています。Executeを定義した後でサブルーチンを呼び出すと「型が一致しません」とエラーになってしまいます。
これらのサブルーチンは、親ASPファイルの中に書いた時は、正常に動作しています。どうしてこのようなことが起こるのかわかる方がいましたらアドバイスを下さい。よろしくお願いします。

[1476] Re:Server.Executeについて
投稿者:Tomitomiさん 2002/01/22 11:28:17
こんにちは、Tomitomiです。

> 今 実行ページとは別に使用するサブルーチンを格納したASPを用意しています。
> 親ページ(メイン)から子ページ(サブルーチンが入ってるページ)を
> 呼び出す際に「Server.Execute」を使用し子ASPファイルが親ASPの中にあるかのしようと思っています。Executeを定義した後でサブルーチンを呼び出すと「型が一致しません」とエラーになってしまいます。
> これらのサブルーチンは、親ASPファイルの中に書いた時は、正常に動作しています。どうしてこのようなことが起こるのかわかる方がいましたらアドバイスを下さい。よろしくお願いします。

僕は、「Server.Execute」なるものを使ったことなかったのですが、
調べてみると、SSIの「include file」と似てますね。
「Server.Execute」のお答えは詳しい人にお任せするとして、
僕のいつも使う代用として、include fileを書いときます。

<!--#include file="インクルードファイルまでのパス"-->

インクルードファイルはテキストファイルであればなんでもいいです。
インクルードファイルは宣言した部分にそのファイルを継ぎ足します。
またこれは、ASP領域ではなくHTML領域に書いてください。
例:
インクルードファイルの中身
<%
function b(aa)
b=aa
end function
%>

ASPファイルの中身

<!--#include file="インクルードファイルまでのパス"-->
<%=b("123")%>

のような形で、書く。
実際は、
<%
function b(aa)
b=aa
end function
%>
<%=b("123")%>
このような形で動いている。

[1478] Re:Server.Executeについて
投稿者:arikさん 2002/01/22 13:12:22
Server.Executeは呼び出したページ自体をサブルーチンであるかのように扱います。
呼び出し元の出力に呼び出したページの出力をつなげていくだけです。
ですから、呼び出し元から呼び出したページの中の関数を呼ぶことはできません。

お望みの動作を希望するのならTomitomiさんのincludeを使用してください。

Server.Executeはincludeに似てはいますが、どちらかというとResponse.Redirectにとってかわるものです。

ちなみにServer.Transferは呼び出し元に処理を返しません。

[1479] Re:Server.Executeについて
投稿者:はりさん 2002/01/22 13:31:42
返信ありがとうございます。
私が思っていたのは、

例)
----a.asp------
<%@language="vbscript">
<html>
<head>
<title>----</title>
<body>
<% server.execute("b.asp") %>
</body>
</html>

-----b.asp--------
<%
sub abc
処理内容
end sub
%>

結局 Executeメソッドが呼ばれると呼び出し元のa.aspのファイルの内容が下記のようになると思っていました。

----a.asp と b.asp------
<%@language="vbscript">
<html>
<head>
<title>----</title>
<body>
<%
sub abc
処理内容
end sub
%>
</body>
</html>

本を参照した際、私は、このように認識をしたのですが・・・
実際には、こんな感じにはならないのでしょうか?
arikさんの記述してある内容もこんな感じではないのですか??

たびたびすいませんが、この辺をもう少し詳しく知りたいと思います。
出来ればもう少し知識を分けてもらえませんでしょうか??
お願いします。


[1480] Re:Server.Executeについて
投稿者:arikさん 2002/01/22 13:50:57
処理の流れの順番としてならそのイメージはあっています。

しかし、Server.Executeで呼び出したページはそのページのみで完結して処理をします。(POSTデータは呼び出し元から引き継ぎますが)
呼び出し元からは呼び出したページの中の変数、関数は利用できません。
ただ、そのページの処理の結果は続けて出力されます。

a.aspとb.aspが合わさったイメージではなく、それぞれは個別であってb.aspの処理結果のみがa.aspの中に取り込まれるイメージです。

includeはスクリプトの処理より先に処理されますから、
処理の流れも処理する場所もまさにはりさんのイメージどおりになります。

[1481] Re:Server.Executeについて
投稿者:はりさん 2002/01/22 14:58:11
ありがとうございました。
やっと理解できました。

もう一つ質問をしてもいいですか?
--- con.asp -----
sub conne
dim objcon
set objcon = server.createobject("ADODB.connection")
以下に接続処理
end sub

--- main.asp ----
<!--include file="con.asp"-->
call conne

接続情報が入っているobjconを呼び出した後で
メインのASPファイルに変数情報を引き継ぎたい場合は、どのようにすればいいですか??
こんな質問ですいません・・・ なにぶん初心者もので・・・
よろしければ解答お願いします.


[1483] Re:Server.Executeについて
投稿者:arikさん 2002/01/22 15:07:35
単純に解決するのなら。

con.aspの
を削除。

main.aspの頭に
> dim objcon
を追加。

先ほどのイメージのとおりです。
sub conneはincludeによってmain.aspの中のほかの関数とまったく同等の扱いとなります。
その場合、変数のスコープをよく理解してください。

がんばってください。

[1484] Re:Server.Executeについて
投稿者:Tomitomiさん 2002/01/22 15:10:14
こんにちは、Tomitomiです。

> もう一つ質問をしてもいいですか?
> --- con.asp -----
> sub conne
> dim objcon
> set objcon = server.createobject("ADODB.connection")
> 以下に接続処理
> end sub
>
> --- main.asp ----
> <!--include file="con.asp"-->
> call conne
>
> 接続情報が入っているobjconを呼び出した後で
> メインのASPファイルに変数情報を引き継ぎたい場合は、どのようにすればいいですか??
> こんな質問ですいません・・・ なにぶん初心者もので・・・
> よろしければ解答お願いします.

include fileを使う場合、あまりメインとか親とか子とか考えないほうがいいです。

includeを宣言した場所にそのファイルの内容が挿入されるので、人間の目で見ると2つのファイルですが、
機械的?には1つのファイルになります。
ということは、
変数情報を引き継ぎ。ということもなく、「con.asp」で宣言した変数は、
「main.asp」でも使えます。
わかるかな?説明へたですみません。
そこでソースから判断すると、
「objcon」の宣言が、サブルーチン内で宣言されてますよね?
この場合、サブルーチン内で完了してしまうため、もちろんmain.aspでも使えません。
答えとしては、

'--- con.asp -----
dim objcon
sub conne
set objcon = server.createobject("ADODB.connection")
以下に接続処理
end sub

こうしましょう。

[1488] ありがとう ございました
投稿者:はりさん 2002/01/22 18:13:18
丁寧に説明していただきありがとうございました。
実行した結果 うまくいきました



TreeBBS For ASP V.0.1.3
Program By YasNet