PCDN OracleWG 田中久 TANAKA,Hisashi



Oracle接続にあたっての宣言部分

 Oracle Glueの使用するにあたって欠かせなかったのが宣言部分。  
  Declare Function EXECSQL Lib "GLUESQL.DLL" (ByVal S As String) As Integer
  Declare Sub GLUEINIT Lib "VBGLUE.DLL" ()
  Declare Sub GLUESETNUMBER Lib "VBGLUE.DLL" (ByVal S As String, ByVal i As Integer, ByVal f As Double)
  Declare Sub GLUESETSTRING Lib "VBGLUE.DLL" (ByVal S As String, ByVal i As Integer, ByVal S As String)
  Declare Sub GLUEGETNAMELIST Lib "VBGLUE.DLL" (hCtl As Any)
  Declare Sub GLUEREGISTERCONTROL Lib "VBGLUE.DLL" (Ctl As Control)
  Declare Function GLUEGETNUMBER Lib "VBGLUE.DLL" (ByVal S As String, ByVal i As Integer) As Double
  Declare Function GLUEGETSTRING Lib "VBGLUE.DLL" (ByVal S As String, ByVal i As Integer) As String
  Declare Function GLUEGETSIZE Lib "VBGLUE.DLL" (ByVal S As String) As Double

  Function EXSQL (ByVal SQLTEXT As String, ByVal locpost As String)
   Dim locERR As Integer
   Dim locerr2 As Integer
   Dim locmsg As String
  locERR = EXECSQL(locs)
   Select Case locERR
     Case Is <> 0
    locerr2 = EXECSQL("get message for " + Str$(locERR) + "into :msg:")
    locmsg = GLUEGETSTRING("msg", 0)
    MsgBox "エラーが発生しました。" + Chr(13) + locmsg, 16, locpost
   End Select
   EXSQL = locERR
  End Function

 などといったよく使う部分は、共通モジュールとして定義していたに違いない。

 そして、Oracle Objects for OLE(以降はoo4oと記す)これらの呪文を記述する必要はもうないのだ。
 逆にコードをゴリゴリ書く人たちにとって、Declare してきた時代は既に懐かしい過去のことなのだ。   


Oracleへの接続

 次が、実際にOracleに接続する部分。  
  Declareした Sub GLUEINITのあと、
  DB_STATS = EXSQL("connect " & Trim$(glbORA_USER), "データベース接続")
 などといったコードをForm Loadのところに書いていたことだろう。

 そして、oo4oの場合、下記の呪文を唱えるだけで同様のことが可能となる。
  'OraSession and OraDatabase are global
   Set OraSession = CreateObject("OracleInProcServer.XOraSession")
   Set OraDatabase = OraSession.OpenDatabase(Trim$(lblDBNAME.Caption), Trim$(lblCONNECT.Caption), 0&)


SQL実行部分

 では、実際にOracleに対してSQLを投げる部分。
  1.GlueSetStringやGlueSetNumberで、VB上の値をOracleコンテナに変換。
  2.上記のEXSQLファンクションを実行
  3.GlueGetStringやGlueGetNumberで、OracleコンテナからVB上の値に戻す。
  こういった手続きを踏んでいたか、それともGlueRegisterControlを使って直接VB上のコントロールをOracleコンテナとして使用していたことだろう。

 そして、oo4oの場合だが、
  OraDatabase.Parameters("INP_para").Value
 などと記述するだけで同じことが出来る。
 OraDatabase.Parameters.Addでの使用宣言、OraDatabase.Parameters.Removeでの開放が必要とは言うものの、
 ストアドプロシージャ化されていれば、いかに簡単に移行できるかといったところがご理解いただけるはずだ。  


最後に、16ビットアプリケーションの正しい移行方針とは


 ここまでGlueとoo4oとの違いを説明してきた。といっても、これはどう書きかえれば動くのかといった部分であり、どうやれば移行がうまくいくかといった説明ではない。
 だからと言って決して悲観的に考えてはいけない。
 従来システムとして16ビット環境で開発されたソフトウェア資産の中で、データ構造部分とストアドプロシージャと、そして何よりも動くサンプルとしてのWindowsアプリケーションがあるではないか。
 こういった部品の中で健全な部分だけを正当に継承していけば、ユーザーにとって本当に良いシステムでありつづけることはそんなに難しいことではない訳である。


Oracle WorkGroup
int21 ホームページ | PCDN ホームページ



Copyright (c) 1998 TANAKA,Hisashi & PCDN All Rights Reserved.
For questions or comments, please send mail to: pcdn@int21.co.jp