(1)a.vbというコードを保存します。(内容はコメント欄1を参照)
(2)C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
上に前項のソースを置いて,
vbc /target:library /reference:"System.Data.dll" /reference:"System.dll" a.vb
とコンパイルします。
a.dllが生成されます。
(3)Apacheの公開ディレクトリに,前項のa.dllを配置します。
同じフォルダ上に,boo.htmlを配置します。(内容はコメント欄2を参照)
(4)IEで,
http://localhost/boo.html にアクセスします。
(5)「click」ボタンを押すと,SQLの事項結果が表示されてほしかったのですが,
alertで「要求が失敗しました。」というエラーメッセージが表示されます・・・。
正常にDB接続してレコードを取得するために,どう修正したらよいのでしょうか?
よろしくお願いします。
(コメント欄3に,参考URLを記載いたします。)
PostgreSQL ODBCによる接続
http://allabout.co.jp/gm/gc/47352/
System.Data.OdbcによるDBインタフェースのサンプル(VB.NET)
http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleOdbcDb...
a.vbのソースコードです。
Imports System.Data
Imports System.Data.Odbc
Namespace SampleNameSpace
Public Class SampleControl
Public Function Con(ByVal cs As String, ByVal sql As String)
' 接続
Dim sqlcn As New OdbcConnection
sqlcn.ConnectionString = cs
sqlcn.Open()
' SQL発行
Dim dt As New DataTable
Dim trn As OdbcTransaction
Dim sqlcmd As New OdbcCommand(sql, sqlcn, trn)
Dim adapter As New OdbcDataAdapter(sqlcmd)
adapter.Fill(dt)
adapter.Dispose()
sqlcmd.Dispose()
' 結果読み出し
Dim ret As String = ""
Dim i As Integer
For i = 0 To dt.Rows.Count - 1
ret = ret & dt.Rows(i).Item("id").ToString()
Next
' 終了
sqlcn.Close()
Return ret
End Function
End Class
End Namespace
boo.htmlの内容です。
<html>
<body>
<object id="hoge" classid="a.dll#SampleNameSpace.SampleControl" width="100" height="100"></object>
<!-- 接続文字列を入力 -->
<input size="150" id="cs" value="DSN=my_dsn;Database=my_db;UID=username;PWD=password;">
<!-- 実行したいSQLを入力 -->
<input size="150" id="sql" value="SELECT * FROM fuga;">
<br>
<input type="button" value="click" onclick="exec_sql()">
<script>
function exec_sql()
{
var cs = document.getElementById("cs").value;
var sql = document.getElementById("sql").value;
try
{
var ret = document.getElementById("hoge").Con( cs, sql );
alert( ret );
}
catch( e )
{
alert( e.message );
}
}
</script>
</body>
</html>
わずかばかりの参考資料です。「IE上で.NETのDLLをホストする」というテーマの情報です。
今から3分で,IE 上で .NET のDLLを動かそう (ブラウザ上で C# のコードを動かす方法)
http://d.hatena.ne.jp/language_and_engineering/20100705/p1
ブラウザ上でVB.NETのコードを動かす (IE上で.NETアプリケーションをホストする方法の続き)
http://d.hatena.ne.jp/language_and_engineering/20100711/p1
VB.NETのデータグリッドの利用方法についてお聞かせください。
http://q.hatena.ne.jp/1278844101
ブラウザでなければ動く状態ならこのへんでしょうか
http://maruten.blog37.fc2.com/blog-entry-10.html
今の処理の流れ
【1】ブラウザはapacheにboo.htmlを要求
【2】apacheはboo.htmlを返信
【3】ブラウザはboo.htmlを解析してa.dllが必要な事を知りapacheに要求
【4】apacheはa.dllを返信
【5】ブラウザとapacheとの通信はひとまず完了し、ユーザーのアクション待ち
【6】ユーザーのアクションでブラウザはa.dllを使ってPostgreSQLへの接続を行おうとする
apache経由にもかかわらず、6の段階ではapacheを無視してPostgreSQLに直接接続しようとしているのが最大の問題点
apache経由でなくてもブラウザのフォームやデータグリッドなどを利用してデータベースのインターフェースアプリを作ることはできますが、これまでの質問の流れからだとWEBサーバ経由でデータベース操作が目的なのでしょうね
修正例としては
【1】ブラウザはapacheにboo.htmlを要求
【2】apacheはboo.htmlを返信
【3】ブラウザとapacheとの通信はひとまず完了し、ユーザーのアクション待ち
【4】ユーザーのアクションでブラウザはPostgreSQLからデータを持ってくることをapacheへ要求
【5】サーバーサイドスクリプトでPostgreSQLからデータを取得し、ブラウザに返信
【6】ブラウザは受け取ったデータをデータグリッドに配置して表示
なお、4と5は非同期通信を用いてバックグラウンドで行うほうが見た目スマート
6の段階ではじめてデータグリッドがでてきます
apacheからdllを呼び出すこともできますが、それ以前にWEBアクセス(http通信)の基礎部分をあまりご存じないようなので、PostgreSQLからデータを抜き出す部分だけでもapache+phpのように楽に構築できる環境を用いて学んだほうが理解しやすいと思います。
既存の環境を用いることをまずは学んで基本的なものを理解してから非同期通信について学んで実装したり、データグリッドについて学んだりして利便性を図るという流れにしないと、製作にいつまでかかるか正直わからないです
どうもありがとうございます。
ご提示いただいたURLの手順に従って,セキュリティ設定を変更したところ,ブラウザ上でDBからのレスポンスを表示することができました!
APサーバを経由せずに直接,ブラウザとDBとやり取りができたという事で非常に感動しました。
コメント欄にはポイントが付かないにも関わらず,情報提供してくださり感謝します。
丁寧な解説を執筆してくださりありがとうございます。
極めて初歩的な内容の解説とはいえ,要点をこのように簡潔にまとめて執筆なさるためにはお時間を取らせたのではないでしょうか。
上の方と同じですが,コメント欄にはポイントが付かないにも関わらず,情報提供を試みてくださり感謝します。
>apache経由にもかかわらず、6の段階ではapacheを無視してPostgreSQLに直接接続しようとしているのが最大の問題点
>apache経由でなくてもブラウザのフォームやデータグリッドなどを利用してデータベースのインターフェースアプリを作ることはできます
→これがまさに行ないたいことでした。
説明不足で大変申し訳ないです。
常識外れのことをやろうとしているので,とても誤解を生みやすかったかもしれません。
今後は,回答者の方々に誤解を生まぬように注意して質問文を起票したいと思います。
@degucho様
>メッセージは全部書いた方が良いですよ。
なお,メッセージは本当にこれだけでした・・・。
(「要求が失敗しました。」だけ)
id:degucho様と
id:windofjuly様には,
それぞれ50ポイントずつ送信させていただきました。
どうもありがとうございました。
引き続きよろしくお願いいたします。
興味深い内容でしたので紹介されていた記事を拝見致しました。
残念ながら、ブログのコメント欄が利用できないようでしたので、
こちらに気になった点を書かせて頂きます。
> 今から3分で,IE 上で .NET のDLLを動かそう (ブラウザ上で C# のコードを動かす方法)
> http://d.hatena.ne.jp/language_and_engineering/20100705/p1
上記にて紹介されている記事の内容についてですが、
手順(1)~(6)の他に URL を「信頼済みサイトに追加する」の手順が必要では無いでしょうか?
おそらくは、記事の趣旨としては、
「実験的に .NET で作ったコントロールも ActiveX のように貼り付けて利用できることを体感ししてみましょう」
ということだとは思いますが、
外部サイトを信頼済みサイトに追加したりセキュリティを下げるような設定の変更は、
システムを危険にさらすことになります。
記事の内容を読んで、実際に設定変更を行う人が、どのくらいいるかは不明ですが、
「設定変更は、自己責任で行ってください」の記述は入れておいた方が良いと思われます。
以下は、参考情報です。
<参考情報>
■ やさしいセキュリティ講座(5) - やさしいセキュリティ(ActiveX)
http://eazyfox.homelinux.org/security/beginner/beginner05.html
■ ITmedia記事が危険なHTAで外部サイトの表示を薦めている - スラッシュドット・ジャパン
http://slashdot.jp/security/article.pl?sid=07/03/05/0829201
こんにちは(夜ですが)
文法最速マスター系の記事で大変世話になっております。
コメントして下さりありがとうございます。
>外部サイトを信頼済みサイトに追加したりセキュリティを下げるような設定の変更は、
>システムを危険にさらすことになります。
>「設定変更は、自己責任で行ってください」の記述は入れておいた方が良いと思われます。
これは,非常に重要な点ですね。書き漏れておりました。
さっそく元記事に加筆しておきました。
ご指摘に感謝します。