VBで接続 - 受託開発はVBが主流。



データベースへ接続するのに色んな接続方法があります。そしてプログラム言語も様々です。ここではVB6をメインにします。
「VB(Visual Basic)を使うのは素人だ!」なんて思われるかも知れませんが、実はVBはよく使われます。
数千万円のシステムや、数億円のシステムの開発にも使われます。そしてお店のPOSレジもVBで作ったシステムが動いていたりします。(大手のお店のPOSレジで動いてますよ)
また、数百万のパッケージソフトでもVBで開発されていたりします。
いつだったか、ソフトウェア会社の60%(80%は間違いでした。) はVBで開発を行っているという調査結果も見たことがあります。

※ もちろんWEB系のシステムの場合は、PerlやPHPを使いデータベースに接続します。間違ってもVBは使わない。
※ 2006年の話です。



「C言語でもいいじゃないですか」と言われます。
いいんじゃないでしょうか、ただ工数の問題があります。
お客さんからすれば、VBで作ろうがCで作ろうが関係ありません。納品されたものが要望とおり動いていれば、「何を使おうが好きにして下さい」なんです。
だからといって、「Cで作れば6人月です。600万円です。」 「VBで作れば3人月です。300万円です。」なんてことを言えば、「じゃあ、VBで」と言われるだけです。または他社の出した見積もりをみて、「こっちの方が安いから」と言う理由で失注するだけです。
そこで、「Cで作ると速度が早いんです」なんて言ってみても無意味です。データベースを使ったシステムでクライアント側の処理が早いことになんの意味もありませんから。(ゲームを作っているんじゃないんです)

「クライアント画面のボタンに高級感があり、表示のUP/DOWNも早い!」
・・・意味ありません。

「Cで作ると、FOR文を使ってくるくる回す処理が早いんですよ!」
・・・意味ありません。VBのFOR文は意外と早いです。

「トリッキーな処理が出来て、プログラムサイズが小さいんですよ!」
・・・意味ありません。趣味の世界じゃないし、近頃のWindowsはVBランタイムが初めから入ってますし、USBの容量も大きいですし、最終的にCDに焼いて納品するのでサイズなんて問題になりません。

「Cで作るとカッコいいじゃないですか。」
・・・そういう問題ではありません。早く作れて、確実に動き、簡単に修正や機能追加できる事が大事です。(機能修正・追加は開発中や納品後に必ず発生します。)

私の知っている、C言語をやってた人達(新人)はVBを使うことに難色を示しますが、「BASIC」と言う言葉に過剰反応しすぎです。
何かを作るという目的を達成するにはVBは最高です。
(やっぱり、動くのを早く見たいですから)

では、なぜクライアント側の処理が早いことに意味がないのかと言うと、「時間のかかる作業はデータベースに任せる」という作り方をするからです。
データが欲しい場合、SQL文に様々な条件を書き、計算もさせ、結果のみを返す。クライアント側は結果を表示させればいいだけです。
一画面に表示する内容なんてたかが知れています。そんなところを早くする為にC言語を使い工数をかけるよりも、VBで短時間で作りテストに力を入れた方がよっぽどマシです。

また、VB用のコンポーネントは色んな会社から出ておりVBで作ったとは思えないような高機能なものが作れます。
そして、DAO、ADO、RDO、oo4oなどのデータベースと接続する為のインターフェースが簡単に使えます。
どれを使った場合でも、似たような使い方をします。
DAO、RDO ・・・ 最近使いませんが、DAOはACCESSとの接続に、RDOはSQLサーバーとの接続に使っていました。
ADO ・・・ よく使います。MySQL、SQLサーバー、MSDEとの接続。
oo4o ・・・ オラクルとの接続。

接続と書くとひどく面倒そうですが、ものすごく簡単です。


 [ ADOとSQLサーバー(MSDEも同じ)の場合 ] Visual Basic 6
    
    Public objConn as Object
    Public strConn as String
    
    Public Function Init()
      strConn="Provider=SQLOLEDB;SERVER=SVR001;Database=test;UID=admin;PWD=adminp"
                                                 '↑SVR001はコンピュータ名です。
       Set objConn = CreateObject("ADODB.Connection")
       objConn.ConnectionString = strConn
       objConn.Open
    
       If objConn.State <> 1 Then
          '接続失敗
       end if
    End Funcion


 ※ DSN(データソース)を設定している場合は、以下の様に変更するだけです。
    strConn="Provider=SQLOLEDB;SERVER=SVR001;Database=test;UID=admin;PWD=adminp"
               ↓
    strConn = "test_dsn" '←データソース名

 ※ SQL文の投げ方は以下です。(他にも色々あります)
    Dim objRs as Object
    Dim strSql as String
   
    strSql = "SELECT * FROM 買い物データ"
    Set objRs = objConn.Execute( strSql )
   
    Debug.Print objRs("商品コード").value       ' 項目名でも列番号でもデータを取得できます。


 [ ADOとMySQLの場合 ] Visual Basic 6
    
    Public objConn as Object
    Public strConn as String
    
    Public Function Init()
      strConn= "driver={MySQL ODBC 3.51 Driver};SERVER=SVR001;DATABASE=test;UID=admin;PWD=adminp"
                                                                '↑SVR001はコンピュータ名です。
       Set objConn = CreateObject("ADODB.Connection")
       objConn.ConnectionString = strConn
       objConn.Open
    
       If objConn.State = 1 Then
          '接続成功
       end if
    End Function


 ※ DSN(データソース)を設定している場合は、以下の様に変更するだけです。
    strConn="driver={MySQLODBC3.51Driver};SERVER=SVR001;DATABASE=test;UID=admin;PWD=adminp"
               ↓
    strConn = "test_dsn" '←データソース名

 ※ SQL文の投げ方は以下です。(他にも色々あります)
    Dim objRs as Object
    Dim strSql as String

    strSql = "SELECT * FROM 買い物データ"
    Set objRs = objConn.Execute( strSql )

    Debug.Print objRs(1).value       ' 項目名でも列番号でもデータを取得できます。


 [ oo4oとオラクルの場合 ] Visual Basic 6
    
    Public objSess as Object
    Public objConn as Object
    
    Public Function Init()
       On Error GoTo Error_Exit

       Set objSess = CreateObject("OracleInProcServer.XOraSession")
       Set objConn = objSess.DbOpenDatabase("SNAME", "admin/adminp", 0&)
                                                             ' ↑SNAME は、Net Easy Config で設定したサービス名です。
       Normal_Exit:
          '接続成功
          Exit Function
       Error_Exit:
          '接続失敗
    End Function


 ※ SQL文の投げ方は以下です。(他にも色々あります)
    Dim objRs as Object
    Dim strSql as String

    strSql = "SELECT * FROM 買い物データ"
    Set objRs = objConn.CreateDynaset( strSql , 0&)

    Debug.Print objRs(1).value       ' 項目名でも列番号でもデータを取得できます。

こんなにも簡単にデータベースと接続できてしまいます。(PerlやPHPからも簡単に接続できます。)
あとは、「こんな命令を実行してくれ」とSQL文を渡してあげれば、目的のデータが取得できます。


TOP

(c)2006 はじめたばかりのデータベース rAreSoft All Rights Reserved.