Windows10 における IIS と ASP および ODBC の設定メモポイント 1. IS の機能追加 :Windows10 で IIS 1 (Internet Information Service) を利用する場合 IIS の機能を追加する必要があります 2. ODBC の設定 :Windows10 でデータベースプログラムを作成する場合 ODBC(Open Database Connectivity) を設定する必要があります なお ODBC に 64bit バージョンと 32bit バージョンがあり データベース管理システム (Access や SQL Server など ) のバージョンと対応させる必要があります しかし 現在 動作の検証ができているのは 次の1の場合 (64bit) です 1 Office365Pro(64bit) をインストールしているときは ODBC 64bit をインストールします このとき AccessDatabaseEngine_x64.exe というプログラムをコマンドプロンプトから実行する必要があります 詳細は 15 ページ以降に記載しています 設定が間違っていると プロバイダーが見つからない 正しくインストールされていない などのエラーになります 2 Office365Pro(32bit) をインストールしているとき ODBC 32bit をインストールします ただし 包括ライセンス版の Windows10 および Office365Pro をインストールしている場合は ODBC 32bit をインストールすることができませんでした Office365Pro(32bit) をアンインストールして Office365Pro (64bit) をインストールしてください IIS の機能追加と設定手順 I. IIS 機能の追加 II. IIS の設定 ( 主にホームディレクトリの物理パス ) と ASP( プログラム実行環境 ) の有効化 I. IIS 機能の追加 ( 有効化 ) 1. 設定 ( 歯車マーク ) 開始 1 ホームページなどの web サイトを構築する場合に必要となるサーバー管理プログラムの一つ Windows 環境では Microsoft 社の IIS が利用される Linux 環境では Apache が主に利用されている 近年 IIS の利用が増えているというレポートがある https://news.netcraft.com/archives/2017/04/21/april-2017- web-server-survey.html 1
2. 設定画面 アプリを選択 3. アプリと機能画面 右側に表示されている プログラムと機能 をクリック ( 右にウィンドウを拡大する ) 4. プログラムと機能画面 Windows の機能の有効化または無効化 をクリック 2
5. Windows の機能画面 下にスクロールして インターネットインフォメーションサービス を見つける 左側の + をクリックして展開 World Wide Web サービス を見つける 左側の + をクリックして展開 3
アプリケーション開発機能 を見つける 左側の + をクリックして展開 ASP を ISAPI 拡張の を確認 OK をクリックして完了 ( 再起動を要求された場合は再起動する ) 4
II. IIS の設定と ASP( プログラム実行環境 ) の有効化 1. コンピュータの管理を起動する (Windows キー ) + X コンピュータの管理 クリック 2. コンピュータの管理画面 サービスとアプリケーション を見つける 左側の > をクリックして展開 インターネットインフォメーションサービス (IIS) マネージャー をクリック 5
Default Web Site を見つける 詳細設定 をクリック 詳細設定画面でホームディレクトリを設定 物理パス 2 の設定 Web サーバーのホームディレクトリと実際のフォルダを関連付けるまず Database フォルダをデスクトップに作成する デスクトップ画面上で 右クリック 新規作成 フォルダ 名前の変更以後 このフォルダーにプログラムやデータを保存する 物理パス項目の右端... をクリックして Database フォルダを指定 2 IIS が管理するフォルダをホームディレクトリという そのフォルダがどこにあるのかを物理パスで教える 6
ASP(Active Server Page) の設定 をダブルクリックする ASP 管理画面 デバッグプロパティ を見つけて展開する ブラウザーへのエラー送信 を見つけて 右端の にて True に変更する Default Web Site をダブルクリックして前の画面へ戻る 変更内容が失われます 変更内容を保存しますか? はい 7
Web サービスを開始する Web サーバ ( 親 ) と Web サイト ( 子 ) を順に 開始 すること 下図の順にクリックする Web サーバ ( 親 ) のサービスが開始する ( とグレーに変わる ) 下図の順にクリックする Web サイトのサービスが開始する ( とグレーに変わる ) 8
3. IIS(Web サーバ ) と ASP( プログラム ) の動作確認準備 IIS のホームディレクトリ ( デスクトップ上の Database フォルダ ) に 次の2つのプログラムを作成して保存する ファイル名 :input.html プログラムの動作 :X+Y の足し算をしますと表示して X のデータ Y のデータを入力して 計算する <HTML> <HEAD> <TITLE> データ入力画面 </TITLE> </HEAD> <BODY> X+Y の足し算をします. <Form Action="keisan.asp" Method="GET"> X=<Input Type="text" Name="X" Size="5"> Y=<Input Type="text" Name="Y" Size="5"> <HR Align="left" Width="150"> <Input Type="submit" Value=" 計算 "> <Input Type="reset" Value=" 消去 "> </Form> </BODY> </HTML> ファイル名 :keisan.asp プログラムの動作 :X と Y のデータを受け取って計算する その答えを表示する <%@ LANGUAGE="VBScript" %> <HTML> <HEAD> <TITLE> 計算と答えの表示 </TITLE> </HEAD> <BODY> <% ' データを受け取る X=Request("X") Y=Request("Y") 'CInt 関数で文字を数値に変換して計算する Z=Cint(X) + Cint(Y) ' 結果を表示する Response.Write "ASP による X+Y の計算 <BR>" 9
Response.Write "X=" & X & "<BR>" Response.Write "Y=" & Y & "<BR>" Response.Write "X+Y=" & Z & "<BR>" %> </BODY> </HTML> プログラムの実行 Web ブラウザの URL で Input.html をリクエストする http://localhost/input.html あらま!? こんな画面がでちゃった! 404 Not Found エラー表示や keisan.asp のソースコードが表示された人は 14 ページの例を見てください 原因はホームディレクトリ Database へのユーザアクセス権が許可されていないため! Database フォルダのアクセス権の設定をする Database フォルダを右クリック プロパティをクリックプロパティ画面 プロパティ画面のセキュリティをクリック 編集をクリック 10
アクセス許可画面 追加をクリック ユーザまたはグループの選択画面 つづき 詳細設定をクリック 検索をクリック 11
つづき IUSR を見つけてクリック OK つづき 完了 OK 12
IUSR のアクセス許可確認 ( 書き込みにも があるか確認してください ) OK 13
もう一度 プログラムを実行してみよう! 上図のように X+Y の計算結果が出れば OK! HTTP エラー 404- Not Found 理由 :IIS(Web 管理システム ) がホームディレクトリ (Database) を見にいったけれど input.html がなかった 原因 : よくあるケース 物理パスの設定が正しいか? ホームディレクトリに違うフォルダを設定していないか? input.html が Database フォルダに存在するか? スペルは間違っていないか? input.htm にしていないか? 拡張子の表示がオフになっているため 実際は input.html.txt のように保存されていないか? 計算 ボタンをクリックしたら keisan.asp のソースコードが表示された 原因は input.html をダブルクリックしたためです 一般に拡張子が HTML のファイルは Web ブラウザに紐づいているため Web ブラウザが実行 (open) します URL 欄を見てください file:/// で始まっているはず IIS を使わないとプログラムが動作しません 次のように IIS にリクエストします http://localhost/input.html localhost のサイト ( ページ ) が見つからないというエラー IIS の機能を追加した後 default Web Site の設定画面で MIME の種類 3 が表示されない現象を確認しました これがないとファイルにアクセスできません Windows10 OS に異常がある可能性が大です 修復または再インストールを推奨します ただし 自己責任でお願いします 3 7 ページの画面例を参照してください オレンジ色で囲っているものです 14
ODBC(Open Database Connectivity) の設定 手順 I. ODBC の確認 II. ODBC(64bit) のインストール I. ODBC の確認 Windows 管理ツール ODBC データソース (64 ビット ) の確認 15
ODBC データソースアドミニストレータ (64 ビット ) 画面 ユーザ DSN の確認 プラットフォーム (OS) が 64 ビットの MS Access Database がある プラットフォームが N/A と表示される場合もある この場合は ODBC がない ドライバーの確認 Microsoft Access Driver(*.mdb, *.accdb) があれば OK Microsoft Access Driver(*.mdb,) しかない または 何もない場合は 次の作業で ODBC(64bit) をインストールする なお データサイエンス教育研究センターの貸し出し Let s NOTE において 上記のようにドライバーが存在したが動作しなかった記憶がある 要再インストール 16
II. ODBC(64bit) のインストール Office365Pro が 64bit であることを確認してください Word Excel PowerPoint Access のいずれかを起動して ファイルメニューからアカウント画面を開き バージョン情報をクリック Office365Pro が 32bit のとき ( 個人所有の Office の時はリカバリーディスクを作成してから ) Office365(32bit) をアンインストールする 大学の包括ライセンス版 Office365Pro(64bit) をインストールする http://ipc.edu.shiga-u.ac.jp/gakunai/manual/ を参照 32 ビットを 64 ビットに変更すること 64 ビット用 Access データベースエンジン (AccessDatabaseEngine_X64.exe) を 以下のサイトからダウンロードします https://www.microsoft.com/ja-jp/download/details.aspx?id=13255 1 AccessDatabaseEngine_X64.exe をダウンロードフォルダから C: ドライブ直下にコピーする 2 コマンドプロンプトを Windows システムツールから起動する cd コマンドの意味は change directory cd c: の意味はディレクトリをドライブ c 直下に変更すること そこに実行するプログラムがあるので つぎのようにコマンドを実行できる 3 AccessDatabaseEngine_X64.exe を実行する 17
III. テストプログラムの作成と実行 データベース操作言語入力画面 SELECT.HTML <HTML> <HEAD> <TITLE>SQL 入力 </TITLE> </HEAD> <BODY> SQL コマンドを入力して下さい <BR><BR> <FORM ACTION="SELECT.asp" METHOD="GET"> <TABLE CELLSPACING="2"> <TR> <TD>SELECT</TD> <TD><INPUT TYPE="text" NAME="select" SIZE="100"></TD> </TR> <TR> <TD>FROM</TD> <TD><INPUT TYPE="text" NAME="from" SIZE="50" ></TD> </TR> <TR> <TD>WHERE</TD> <TD><INPUT TYPE="text" NAME="where" SIZE="100"></TD> </TR> <TR> <TD>GROUP BY</TD> <TD><INPUT TYPE="text" NAME="group" SIZE="50"></TD> </TR> <TR> <TD>ORDER BY</TD> <TD><INPUT TYPE="text" NAME="order" SIZE="50" ></TD> </TR> </TABLE> <BR> <INPUT TYPE="submit" VALUE=" 検索 "> <INPUT TYPE="reset" VALUE=" 取消 "> </FORM> </BODY> </HTML> 18
データベース操作言語実行プログラム SELECT.ASP <%@ LANGUAGE="VBScript"%> <HTML> <HEAD> <TITLE>SQL 実行 </TITLE> </HEAD> <BODY> SQLの実行とその結果 <BR> <% On Error Resume Next '---------------------------------------------------------------- ' パラメータ受信 '---------------------------------------------------------------- vselect=request("select") vfrom=request("from") vwhere=request("where") vgroup=request("group") vorder=request("order") sp=" " :' 半角空白文字 '---------------------------------------------------------------- 'SQL 文の作成 '---------------------------------------------------------------- SQLs=vSELECT & sp & vfrom & sp & vwhere & sp & vgroup & sp & vorder Response.Write " 実行するSQL 文 <BR>" & SQLs & "<BR><BR>" '---------------------------------------------------------------- 'DBオープン '---------------------------------------------------------------- Set DB=Server.CreateObject("ADODB.Connection") :'Object DB.Provider="Microsoft.ACE.OLEDB.12.0" :'property DB.Open Server.MapPath(" 売上データベース.accdb") :'method '---------------------------------------------------------------- 'SQL 実行 '---------------------------------------------------------------- Set RS=DB.Execute(SQLs) '---------------------------------------------------------------- ' エラーチェック '---------------------------------------------------------------- IF ( DB.Errors.Count=0 ) Then 19
Response.Write "<Table Border=1>" '------------------------------------------------------------- 'SELECT 句で指定された列名の表示 '------------------------------------------------------------- For i=0 to RS.Fields.Count-1 :'RS.Fields.Countの値 = 列数 Response.Write "<TH>" & Rs.Fields( i ).Name & "</TH>" Next '------------------------------------------------------------- ' 検索されたレコードの表示 '------------------------------------------------------------- Do Until ( RS.EOF=True ) :'End Of Fileで終了を判定 Response.Write "<TR>" For i=0 to RS.Fields.Count-1 :' 列数分を表示 Response.Write "<TD Align=center>" & RS.Fields(i) & "</TD>" Next Response.Write"</TR>" RS.MoveNext :' 次のレコード移動 忘れるとエンドレス Loop Response.Write "</Table>" Else Response.Write "SQL 実行エラーが発生しました.<BR>" Response.Write " 原因 =" & DB.Errors(0).Description End If RS.Close DB.Close %> </Body> </HTML> 20
IV. テストプログラムの実行方法 1. ホームディレクトリ (Database) に作成したプログラムとデータベースを保存します SELECT.HTML SELECT.ASP 売上データベース.accdb データベース名を確認してください プログラムに合わせます 2. URLからSQL 入力ファイルを実行します http://localhost/select.html プログラム名は小文字でも大丈夫です 3. SQL 入力画面が表示されます 4. すべてのデータを検索してみましょう SELECT * FROM 売上データ * はすべての列名を指定するときに使う 売上データ というテーブルを使う テーブル名を確認してください 検索結果 21
5. キリマンジャロ に絞り込んで検索してみましょう 6. 商品別に売上合計を調べてみましょう SELECT 商品名,SUM( 売上金額 ) 空白 カンマ ( ) などのコマンド記号は必ず半角で! 2 番目に売れているのは緑茶ですね! 見やすいように合計金額で並べ替えるといいですね 22
7. キリマンジャロの売上を店舗別に調べ 合計金額の昇順 4 に並べてみましょう 都市部なのに横浜や渋谷が売れていませんね 次のようなエラーが出た人はいませんか? 店舗別に売上データを分類 ( グループ ) してから売上金額を合計するので 次を間違えています SELECT 商品名,SUM( 売上金額 ) ではなく SELECT 店舗名,SUM( 売上金額 ) 4 降順にしたいときは order by SUM( 売上金額 ) DESC とします 23
まとめ SELECT ~ FROM ~ WHERE ~ GROUP BY ~ ORDER BY ~ をマスターすることで 様々な検索ができます エラーが出たときは 必ずあなたが間違っています ネットや本で調べて自分で解決するようにしましょう それから 仕組みや原理を理解して 論理的に考えるようにしましょう! http://ocalhost/ IIS ASP ODBC User Web Server DataBase 24