- PR -

サーバーで実行するアプリケーションの開発方法について

投稿者投稿内容
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-12-17 10:00
現在、VB6.0からSQLサーバー2000上のストアドプロシージャをコールしデータを抽出する
レポートプログラムを開発しています。
みなさんのアドバイスを元にストアドプロシージャを開発・使用する技術を身に付けたので
当初よりも随分プログラムの処理速度向上が図れました。

しかしVBのプログラム自体はユーザーのパソコン上で起動している為、せっかくストアドプロシージャで
データを短時間に取得できても、その後の処理作業(変数等を使用した小計やデータ変換等)は
ユーザーのパソコンスペックに依存する部分があり、処理速度に若干の不満があります。

ユーザーからの入力は必要最低限のパラメータだけにし、データの抽出、その他の処理といった
部分はすべてサーバー上に作成したアプリケーションで行い、最終的な出力結果のみをまた
ユーザーへ返すようなアプリケーションを開発したいと考えています。
どのように開発したら良いのでしょうか?

少し漠然とした質問ですが、アドバイスをお願い致します。
開発用の参考資料等も教えていただけますと助かります。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-12-17 10:12
まさしくその為にストアドプロシージャと言う仕組みがあると思うのですけど・・・。TransactSQLで処理速度に問題があるなら、外部ストアドプロシージャにするとか、.NETで記述するとかしたらよいのでは?

#結果的にサーバーに負荷が集中して、かえってパフォーマンス落ちたりして。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-12-17 10:23
要はストアード内で全ての処理を行った後に、処理結果(正常・異常)のみを返す形
となるかと思われます。

1.VBの起動
2.ストアードのコール
--------------------------------------------------------------
3.ストアードの開始
4.処理結果テーブルA・B・C・・・・・・・(必要な数だけ前もって作成)に
 処理結果を格納する。(計算やデータ変換も行う)
5.ストアードの終了
--------------------------------------------------------------
6.終了コードを判定し、正常終了であれば処理結果テーブルを呼び出し、
 アウトプットを作成する。
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-12-17 10:32
甕星さん、ご返答ありがとうございます。
知識不足ですみません、
「外部ストアドプロシージャ」とは具体的にどういったものになるのでしょうか?
また、
「.NETで記述する」というのはWebアプリケーションで開発するといった事になるのでしょうか?
どちらもまだ良く分からないので、それらを使用する事での仕組み的な効果が分かりません。自分で調べるのが筋ではあるのですが、簡単に説明していただけないでしょうか?よろしくお願いします。
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2007-12-17 11:40
「.NETで記述する」はVB.NET+SQL2005環境でのSQL CLRの事かな?
ストアドをVB.NETで記述できるわけですがVB6+SQL2000との事なので使用できないですね

上総さんが書かれているように集計も変換もすべてストアド内で行ってやればいいのでは?1つ(1回)のストアドコールで複数の結果セットを返す事も可能です。
レポートヘッダ部分、明細行部分、集計部分などに分ければ後が楽かと思います。

ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-12-17 13:05
上総さん、めだかさん、お返事ありがとうございます。

ストアド内に多分岐を用いて複数の処理を行なったり一時テーブルを使用したりといった事は少しずつ出来るようになってきました。やはりこのように処理した内容をテーブル等にセットし、最終的にそのテーブルから値を出力するという形が理想みたいですね。ヘッダ部、明細部と分けて考えると言うのも今後の開発の参考にさせて頂きます。

もう1つ質問させて頂いて宜しいでしょうか?

 0.サーバー側のVBは常時起動
-ユーザー側-----------------------------------------------------------------
 1.VBの起動
 2.プログラムのコールとパラメータの送信
-サーバー側(VB)-------------------------------------------------------------
 3.ユーザーからのパラメータを取得
 4.プログラムからストアードのコール
-サーバー側(SQLServer)------------------------------------------------------
 5.ストアドの開始(処理結果テーブルA・B・Cに処理結果を格納する)
 6.ストアドの終了
-サーバー側(VB)-------------------------------------------------------------
 7.抽出データから処理作業を行ない出力結果を表示する
 8.出力画面をユーザー側へ渡す
-ユーザー側-----------------------------------------------------------------
 9.サーバー側VBで表示(作成)された画面を表示する

といった事は可能でしょうか?8と9に関しては曖昧な表現になってしまいますが、
単純にユーザー側には画面イメージのようなものしかなく、「入力→結果画面の表示」
のみを行なうというか...
分かりにくくてすみません、このような感じの場合はどうするのが良いか教えていただけないでしょうか?
上総
大ベテラン
会議室デビュー日: 2006/06/22
投稿数: 107
投稿日時: 2007-12-17 23:03
引用:

ともこさんの書き込み(投稿日時: 2007-12-17 13:05)より
 0.サーバー側のVBは常時起動
-ユーザー側-----------------------------------------------------------------
 1.VBの起動
 2.プログラムのコールとパラメータの送信
-サーバー側(VB)-------------------------------------------------------------
 3.ユーザーからのパラメータを取得
 4.プログラムからストアードのコール
-サーバー側(SQLServer)------------------------------------------------------
 5.ストアドの開始(処理結果テーブルA・B・Cに処理結果を格納する)
 6.ストアドの終了
-サーバー側(VB)-------------------------------------------------------------
 7.抽出データから処理作業を行ない出力結果を表示する
 8.出力画面をユーザー側へ渡す
-ユーザー側-----------------------------------------------------------------
 9.サーバー側VBで表示(作成)された画面を表示する

といった事は可能でしょうか?


出来るかどうかで言えば可能です。
只、どういったアプローチで処理を行うかによります。

サーバー・クライアント間でリアルタイムに処理を行うのであれば、ソケットを使用
する必要がありそうな気もしますし。
サーバー上にクライアント端末名と同名のディレクトリを作成し、そこにSQLのファイル
が置かれた時に処理を行うとした場合でも、ディレクトリの監視を定期的に行い且つ
出力ファイルも作成しなければなりません。

どちらにしろ開発・管理が面倒な気もしますので、クライアント画面への表示等は
クライアント側で処理を行う方が宜しいかと思います。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-12-18 12:32
引用:

分かりにくくてすみません、このような感じの場合はどうするのが良いか教えていただけないでしょうか?


「3階層システム」とか「分散アプリケーション」と呼ばれるシステムに該当すると思います。
サーバ側のアプリを「アプリケーションサーバ」という。

技術的には、

VB6なら「DCOM」とか。
.NETなら「SOAP/XML Webサービス」とか「.Net Remoting」とか。

[ メッセージ編集済み 編集者: todo 編集日時 2007-12-18 12:34 ]

スキルアップ/キャリアアップ(JOB@IT)