エンジニアが発信する【VB/VBA】の記事を集めました

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【VB/VBA】

2011年04月01日

VBAでのデータベースアクセス問題 セキュリティ面

VBAからのデータベースアクセスを止め、データベースアクセスはサーバー側の処理に任せた方がいいのではないかと考えている件の、セキュリティ面の観点について。


【意図しないSQLの問題】
まず、意図しないSQL文が要求されることが挙げられる、

VBAのプログラムからSQL文を直接発行するケースは多いだろう。アプリケーションからDBMSに対して直接SQL文でリクエストできるのは通常であるが、少しの技術と悪意があれば、クライアントアプリケーションから
・データ破壊
・データベースへの高負荷な要求
を行うことが可能である。

例えばWebのシステム。リクエストはサーバーのアプリケーション(CGI含む)が受け取っているが、要求は特定の命令とパラメータとして受け取り、内部で処理をするようになっている。それにより、想定しないSQL文を排除できている、ということだ。

クライアントアプリケーションから直接SQL文を実行させる、ということはセキュリティ面で考えるとリスクを包含している、ということは認知して頂きたい。

なお、過去に「データベースへの高負荷な要求」によりサーバーを停止させかけた経験がある。過去記事にあるので興味があればどうぞ。
 カテゴリ: VBA構築事例
 記事  : 汎用機DBのテーブル定義書作成ツール (1~5)
             
同じテーマの最新記事
  • なうで紹介
  • mixiチェック
  • ツイートする

2011年03月28日

VBAでのデータベースアクセス問題 運用面

VBAからのデータベースを止め、データベースアクセスはサーバー側の処理に任せた方がいいのではないかと考えている件の、運用面の観点について。


【処理負荷の問題】
まず、処理負荷の問題が挙げられる、

下手なプログラムだと、論理的には2名の利用でシステムが真っ当に動かなくなる(1名の使用でも問題が発生するケースもあるだろう。しかし、スタンドアロンやシングルユーザーで動かないようなものはプログラムと認めませんので除外しています。)ことがある。しかし、いくらなんでもそれはExcel側の制御で何とでもなるレベルだろう。

私が過去に扱った基幹システムでも、開発から運用を担当していた期間では70名くらいの使用には処理が回っていた。しかしこれは運用面で「だれがどういう種類のデータを更新する」と決まっていたこと、データベースへのアクセスは少なかったこと、が理由で問題が出なかっただけである。

規模の大きくなるほど、使用頻度が高くなるほど、データベースへの処理負荷が高くなる。VBAはクライアントアプリケーションなので、該当クライアントから直接データベースにアクセスすることになるが、その負荷はすべてデータベース任せ、つまりデータベースマネジメントシステムの性能や機能だけに依存せざるを得ない、ということになる。

データベースの処理負荷が高まると当然遅くなる。しかし、優先すべき処理の制御や、負荷が掛かりすぎないようにコントロールすることができるデータベースは私の知る限り無いようだ。あったとしても少数だろう。
こうなってくるとチューニングは大変である。

データベースへの負荷が過大にならないようにするために、間で処理を取り次ぐものを置いた方がよいと考える理由である。サーバー側にコントロール用のプログラムを置く、というのが具体例になる。



  • なうで紹介
  • mixiチェック
  • ツイートする

2011年03月24日

VBAでのデータベースアクセス問題 概要

VBAでデータベースアクセスをするケースはかなり多いだろう。しかし、最近、規模や使い方によってはこの使い方は止め、データベースアクセスはサーバー側の処理に任せた方がいいのではないかと考えている。

もちろん、そうするためにはクライアント側の処理とサーバー側の処理を分離し、それぞれの通信を考慮する必要があるので、片手間でできるものではなく、ITベンダー、それもせいぜい中規模くらいまでで、かつきちんとした専門業者(なかなかないのが実情)を探さなくてはなるまいが、場合によってはそうする方が結果的によい、ということもある。

理由は以下の通りである。
 ・運用面(記事準備中)
 ・セキュリティ面(記事準備中)



  • なうで紹介
  • mixiチェック
  • ツイートする

2011年02月06日

ライブラリ関数が失敗するんじゃ、私にはどうしようもありません

今回作っていたのは会社で使用しているCAD用のコマンド。 ライブラリが用意されていて、Helpファイルもあるので VBでプログラミングできる環境さえあれば誰でも コマンドを作ることが出来るのです。 久々のプログラミングと言うこともあり、 いろいろ忘れていたりもしましたが 一応、コーディングは終わったんです。 が、動作テストにて問題発生。 ユーザー操作によって選択された図形の座標や形状といった 情報を取得する関数が失敗するんです。 その部分のコードはシステムから渡された選択図形の番号を そのまま関数に渡すだけ、...

2011年01月22日

ひとつひらめいたVBAでの処理

先日、千葉の客先でふと目にとまったもの。それを見て
「あ、それってVBA使うと面白いかも」というものがあった。

ホント、システム開発としては実に「どうでもいい」と思われそうなもの。一般の人でも「こんなもんなんだ」と思われがちなもの。実際、作っても反応や反響は限定的だろう。しかし、VBAってかゆいところに手が届く的なものを作るのに適している。

ちょっと作ってみる。

同じテーマの最新記事
  • なうで紹介
  • mixiチェック
  • ツイートする

2011年01月17日

意義を理解できれば興味も湧くし上達も早い

高校生の頃、数学が苦手であった。しかし、ある日を境に「急に」数学ができるようになった。忘れもしない、高校三年生の夏休みに入る直前の模擬試験を受けた日からだ。
そのときの問題がよかったのだろう。印象深いのは2問。1問はグラフの問題で「あれ、これは教科書の例題そのまんまじゃ?」というもの。この問題で、「こんな基本的な問題が本番試験なら教科書を復習すればなんとかなるんじゃないか?」と、数学の苦手意識を払拭してくれた。もう1問は崖の高さを測る問題で、崖の下からの距離と仰角とで高さを求めるというもの。この問題を見たときに「ああ、三角関数ってこういう使い方できるんだ」と気が付き、ただの数字遊びで学ぶ意味を見いだせなかったのが払拭され、数学がぐんと身近なものに近づいた。

私の例ではあるが、何割かの人は、レベルと意味づけを理解することで数学嫌いは解消されるかも知れないのではないか、と思っている。



Newton 2011年2月号 は「微分と積分 これならよくわかる」という特集だった。

Newton (ニュートン) 2011年 02月号 [雑誌]/著者不明

¥1,000
Amazon.co.jp


これを読んで、微分と積分の理解は以前より深まった。というより、微分に関して「導関数を求める意味」は今回初めて理解できたように(いや、実際に微分を使って仕事をしている人に比べれば足下にも及ぶまいが)思う。微分積分を学ぶ人には、是非とも一読することをおすすめしたい。


数学がどういうことに使えるのか、もっともっと理解が深まれば、ソフトウェアの企画にも生きてくるのではないかと思う。

Excelには山ほど関数が搭載されているが、ほとんど使っていないというのが現状ではないだろうか?VBAで「調和平均を求める」という関数は用意されてはいるが、その調和平均がどういう時に有用なのか、そういう事を知らないと調和平均の関数を使う機会もあるまい。

今までもそうしてきたつもりだが、数学に関してこのブログでは、単に関数の説明ではなく、その関数を使うとどういう事柄や問題に有用に働くのかも含めて解説をしていくよう心掛けたい。





同じテーマの最新記事
  • なうで紹介
  • mixiチェック
  • ツイートする

2010年11月27日

信頼できる場所

Excelのマクロ(VBA)は、セキュリティレベルが高いと動かない。セキュリティレベルを設定するところに「信頼できる場所にインストールされたマクロだけを実行できます」(Excel 2003 の場合)などと表記があったりするが、「信頼できる場所」とはどこだろうか。

Excel2007からは、確か追加できたと思う。しかし、Excel2003以前は「XLStart」フォルダの配下になる。この「XLStart」フォルダは、通常は
•C:¥Documents and Settings¥<ユーザー名>¥Application Data¥Microsoft¥Excel
•C:¥Program Files¥Microsoft Office¥Office11
のどちらかにあるそうだ。

ただし、条件がある。[ファイル] メニューの [開く] をクリックしてブックを開いた場合には実行できない。あくまでもExcel起動時にExcel側で開いた場合に実行できる状態になる。

これは、Excelのヘルプ(VBEからのヘルプではみつかりにくいみたい)で「信頼できる場所」で検索するとトップに出てきた。しかし、このブログへのアクセスを見ると、このキーワードでの来訪も多いので書いておくことにした。



同じテーマの最新記事

2010年10月22日

交流会 開催します

講習会はやったことがあるものの、このブログ始まって以来、初の試みをしてみようと思う。

先日の裏方ドタキャンのお詫びが主旨であるが、「交流会 します」

日程:11/19(金)
時間:19:00開始 予定(2~3時間程度)
場所:新宿近郊 (渋谷~池袋の間の予定で、新宿が濃厚)
話題:裏方ドタキャンの詳細楽しく飲みましょう♪
締め切り:11/5(金)
最少催行人員:3名(既に集まっていますので、決行!)

連絡先:20101119@vba-manners.info までメールで。
その際、
・氏名(仮名/偽名/ハンドルネームなども可)
・お仕事(職種とか、会社とかの名 でもいいです。)
・お持ちのブログやHPなどあれば(参加者に公開できるものだけでいいです)
・緊急連絡先 (携帯電話番号)
・その他 当日してみたい話題など適当に。あればでいいです。
・備考 「楽しく飲む」の趣旨ですので、趣旨とは異なる行為、例えば幸せになる壷の販売/宗教の勧誘/金額的にお高いお店への勧誘などは堪忍して下さい。


今のことろお店にアタリはつけています(ちなみに、電波の届きにくいところです)が、おすすめの飲み屋など、ご紹介頂けると嬉しいです。お店からの営業も受け付けます(利益が確保できる範囲内で、割り引きがあると、なお嬉しいですが)。

当日について
・簡単に自己紹介をお願いします。持ち時間は15秒以上90秒以内程度。氏名(またはハンドル名)、どんな仕事しているか、今日の参加したいと思ったきっかけは、くらい+αでいいかと。
・私、ホスト役なので聞き役、突っ込み役の予定で、場が賑やかなら静かにしてます。場が静かなら適当にしゃべります。

2010年10月19日

グルーポンというサービス 一休というサービス

クーポンの共同購入を斡旋する会社であるが、このサービス、果たして3年後には存在するだろうか?

例えば、ある高級レストランの50%オフのクーポンを入手し、その恩恵を受けたとする。そういう人が、次回正規料金で行ってみよう、と思うだろうか?ほとんどの場合、別の店のクーポンを探すのではないか?なぜなら、その人たちのニーズは「いいものをお得に」であるから、リピーターになることは考えにくい。

RFM分析、という分析手法がある。
・R(Recency):最終の購買日(飲食店なら来店日)
・F(Frequency):購買(飲食店なら来店)の頻度
・M(Monetary):購買金額の合計
これでランクを分けても、グルーポンで来るお客さんはFとMが極めて低くなると予想されるので、客としては「ありがたくない客」に分類されるだろう。

安売り店なら「価格戦略」であるため、とことん安値を追求する。これは戦略として正しい。
グルーポンを採用するところは、ある程度高級店である。そこが中途半端な価格戦略をしても、結局は一見さんがやってくるだけで、リピータはつかめないだろう。

グルーポンは、そういう中途半端な戦略を助長するだけのものであるように思える。しばらくははやりものであるかもしれないが、スーパーの特売よりも効果は期待できないだろう。それが認知されていくのに1年半かかり、それ以降は下降線をたどるのではないかと思う。

それと反対なのが、一休のようなサービスだ。これは十分に生き残ろるだろう。航空会社の格安チケットと同じで、「キャパ」が決まっており、そのキャパを埋めれば埋めるほど良いわけだ。よって、「空気を泊めるくらいなら格安ででも人を泊めた方がまだマシ」なのである。
そのニーズをきっちり抑え、Win-Winの関係に持っていっている好例だろう。

サービスを提供するなら、本当に役立つもの、長く求められるものを考えたいものである。
同じテーマの最新記事

2010年10月18日

クラスモジュールのメリット

クラスモジュールの利用の普及を促進すべく、VBAの若干クラスモジュールについて書いてみる。

ここで、クラスモジュールとは、とかオブジェクト指向とは、という話を始めると「?」となるだろう。よって、ちょっと観点を変えて、クラスモジュールのメリットから入ることにする。


このブログのタイトルに「メタボなコードにサヨナラ」と記しているが、「メタボリックなコード」とは、同じようなコードが何度も登場するようなムダの多いコードのことだ。これを解決できる、というのがメリットである。
例1)値が数字だけで構成されているかをチェックする処理で、チェックのロ処理が何度も出てくるケース。

例2)データベースと接続しSQL文を発行する処理で、ADOやDAOなどの接続処理が何度も記述されているケース。

また、メタボとは少し違うが、
例3)共通化はしてあるが、関数名やプロシージャ名が長く、利用しづらいケース。


上記、3例挙げたが、クラスモジュールを用いれば解決できる。
工夫すれば標準モジュールでもできなくはないが、クラスモジュールを用いた方が簡単に実現可能だ。


上記の例を考えながら、メタボリックなコードにサヨナラするとどうなるのか。それ自体がおそらくクラスモジュールを使うメリットといえるだろう。それを一般的な言葉で表現し、列挙してみよう。

・複数登場する再利用しやすい形で切り出しやすくなる。
 ⇒冗長部分を減らせる。 
  ⇒メインロジックの可読性が高まる。
   ⇒現在の処理の理解が理解しやすくなる。
   ⇒変更時の影響を特定しやすくなる。
   ⇒バグの混入を減らせる。
   ⇒変更時の修正箇所を減らせる。

・再利用性が高まる。
 ⇒開発工数を減らせる。
 ⇒テスト工数を減らせる。


まだありそうだが、とりあえずこんなところか。

エンジニアが作る最新ITブログ トップ>エンジニアの発信する【VB/VBA】

メンバー紹介

タグパネル

ランキング

エンジニアが作る最新ITブログ DODA