[VB6.0|Oracle] oo4o 関数

Option Explicit

Global oraSESSION As Object
Global oraDATABASE As Object

Global Const ORADB_DEFAULT = &H0
Global Const ORADYN_DEFAULT = &H0

Function oraCONNECT(ByVal USERID As String, ByVal PASS As String, ByVal TNS As String) As Boolean
    Dim FLAG As Boolean
    Dim CONNECTID As String
    On Error GoTo Err1

FLAG = True
CONNECTID = USERID & "/" & PASS

Set oraSESSION = CreateObject("OracleInProcServer.XOraSession")
Set oraDATABASE = oraSESSION.OpenDatabase(TNS, CONNECTID, ORADB_DEFAULT)

oraCONNECT = FLAG
Exit Function

Err1:
FLAG = False
oraCONNECT = FLAG

End Function

Function oraSELECT(ByVal strSQL As String, ByRef oraDYNASET As Object) As Boolean
    Dim FLAG As Boolean
    On Error GoTo Err1

FLAG = True

Set oraDYNASET = oraDATABASE.CreateDynaset(strSQL, ORADYN_DEFAULT)

oraSELECT = FLAG
Exit Function

Err1:
FLAG = False
oraSELECT = FLAG
Debug.Print strSQL
End Function

Function oraEXECUTE(ByVal strSQL As String) As Boolean
    Dim FLAG As Boolean
    On Error GoTo Err1

FLAG = True

oraDATABASE.ExecuteSQL strSQL

oraEXECUTE = FLAG
Exit Function

Err1:
FLAG = False
oraEXECUTE = FLAG

End Function

2005 / 10 / 13

[VB6.0|Oracle] Excelにグラフを表示

'■frmMain

Option Explicit

'--- Oracle関連(参照設定=Oracle InProc Server 4.0 Type Library)
Private OraSession As Object
Private OraDatabase As Object
Private OraMaxCols As Integer
Private OraMaxRows As Integer

'--- Excel関連(参照設定=Microsoft Excel 9.0 Object Library)
Private exlApp As Excel.Application
Private exlBook As Excel.Workbook
Private exlSheet As Excel.Worksheet
Private exlChart As Excel.Chart
Private SheetName As String 'データを代入するシート名

Private Sub Form_Load()
  '--- Oracleに接続
  If basOraOpenClose.OraOpen(OraSession, OraDatabase) = False Then
    MsgBox (OraDatabase.LastServerErrText)
  End If
End Sub


Private Sub Form_Unload(Cancel As Integer)
  '--- Oracleの接続解除
  If basOraOpenClose.OraClose(OraSession, OraDatabase) = False Then
    MsgBox "Oracle接続解除エラー"
  End If
End Sub

'===================================================================
'■EXCELでグラフを表示
'===================================================================
Private Sub btn1_Click()

  '--- Excelを開く
  Call basExcelOpenClose.ExcelOpen(exlApp, exlBook, exlSheet, exlChart, SheetName)
  '--- OracleデータをExcelに代入
  Call basExcelCtrl.SetCells( _
    OraDatabase, exlApp, exlBook, exlSheet, exlChart, SheetName, OraMaxRows, OraMaxCols)
  '--- Excelシートからグラフ作成
  Call basExcelCtrl.SetGraph(exlSheet, exlChart, SheetName, OraMaxRows, OraMaxCols)
  '--- Excelを閉じる
  Call basExcelOpenClose.ExcelClose(exlApp, exlBook)

End Sub

'■basOraOpenClose

Option Explicit

'===================================================================
'
'■Oracleの接続
' 引数:OraSessionオブジェクト、OraDatabaseオブジェクト
' 戻値:True(正常)、False(エラー)
'
'===================================================================
Public Function OraOpen(ByRef OraSess As Object, ByRef OraDB As Object) As Boolean

  Dim OraDbName As String
  Dim OraUserPass As String

  '***************************************************************
  'Oracle設定
  OraDbName = "OraDB2" 'サービス名
  OraUserPass = "@@@@/@@@@" 'ユーザー名/パスワード
  '***************************************************************

  '--- アイキャッチの表示
  Load frmLogo
  frmLogo.Show
  DoEvents

  Set OraSess = CreateObject("OracleInProcServer.XOraSession")
  Set OraDB = OraSess.OpenDatabase(OraDbName, OraUserPass, ORADB_DEFAULT)
  OraOpen = True

  '--- /アイキャッチの終了
  Unload frmLogo

End Function

'===================================================================
'
'■Oracleの接続解除
' 引数:OraSessionオブジェクト、OraDatabaseオブジェクト
' 戻値:True(正常)、False(エラー)
'
'===================================================================
Public Function OraClose(ByRef OraSess As Object, ByRef OraDB As Object) As Boolean

  Set OraDB = Nothing
  Set OraSess = Nothing
  OraClose = True

End Function

'■basExcelOpenClose

Option Explicit

'===================================================================
'
'■EXCELアプリケーションを開く
' 引数:Excelアプリケーション、Excelワークブック、
'    Excelワークシート、Excelグラフ、Sheet名
'
'===================================================================
Public Function ExcelOpen( _
ByRef xlApp As Excel.Application, ByRef xlBook As Excel.Workbook, _
ByRef xlSheet As Excel.Worksheet, ByRef xlChart As Excel.Chart, ByRef SheetName As String)

'***************************************************************
'ActiveSheet名
SheetName = "WeightData"
'***************************************************************

'---------------------------------------------------------------
'Excelアプリケーションのセット
'---------------------------------------------------------------

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add 'xlBook.Worksheets(1) = 1番目のシート
Set xlChart = xlApp.Charts.Add

Sheets("Sheet4").Name = SheetName 'Sheets(1).Name = 1番目のシート

xlApp.Visible = True

End Function

'===================================================================
'
'■EXCELアプリケーションを閉じる
' 引数:Excelアプリケーション、Excelワークブック
'
'===================================================================
Public Function ExcelClose( _
ByRef xlApp As Excel.Application, ByRef xlBook As Excel.Workbook)

'---------------------------------------------------------------
'Excelアプリケーションのセット
'---------------------------------------------------------------

xlBook.Close
xlApp.Quit
Set xlApp = Nothing

End Function

'■basExcelCtrl

Option Explicit

'===================================================================
'
'■OracleからEXCELに値を代入
' 引数:OracleDatabaseオブジェクト、
'    Excelアプリケーション、Excelワークブック、
'    Excelワークシート、Excelグラフ、
'    シート名、データレコード数、データフィールド数
'
'===================================================================
Public Function SetCells( _
ByVal OraDB As Object, _
ByRef xlApp As Excel.Application, ByRef xlBook As Excel.Workbook, _
ByRef xlSheet As Excel.Worksheet, ByRef xlChart As Excel.Chart, _
ByRef SheetName As String, ByRef i As Integer, ByRef j As Integer)

Dim strSql As String

'***************************************************************
'Oracleダイナセット、SQL文
strSql = "SELECT * FROM WEIGHT" 'ORDER BY DATE ASC"
'***************************************************************

'---------------------------------------------------------------
'Oracleダイナセットの作成
'---------------------------------------------------------------

Dim OraDynaset As Object
Set OraDynaset = OraDB.DbCreateDynaset(strSql, ORADYN_DEFAULT)


'---------------------------------------------------------------
'Excelにダイナセット代入
'---------------------------------------------------------------

Dim exlRow As Integer 'Excel行番号
Dim exlCol As Integer 'Excel列番号
Dim oraCol As Integer 'Oracle列番号

exlRow = 1
exlCol = 0
oraCol = -1
i = 0
j = 0

'--- Excelにタイトル行を代入
xlSheet.Cells(1, 1) = "日付"
xlSheet.Cells(1, 2) = "MY1"
xlSheet.Cells(1, 3) = "MY2"
xlSheet.Cells(1, 4) = "MY3"


'--- Excelに代入(i =レコード数、j =フィールド数)
'--- レコード単位の処理
Do While Not OraDynaset.EOF 'do until OraDynaset.EOF
exlRow = exlRow + 1
i = i + 1
j = 0
'--- フィールド単位の処理
Do While j < OraDynaset.Fields.Count 'DBのフィールド数
exlCol = exlCol + 1
oraCol = oraCol + 1
j = j + 1
xlSheet.Cells(exlRow, exlCol) = OraDynaset.Fields(oraCol).Value
Loop

exlCol = 0
oraCol = -1
OraDynaset.MoveNext
Loop

Set OraDynaset = Nothing

MsgBox (i & "件のデータを処理しました。")

End Function


'===================================================================
'
'■EXCELシート1のデータからグラフの作成
' 引数:Excelアプリケーション、Excelワークブック、
'    Excelワークシート、Excelグラフ、シート名、
'    Oracleレコード数、Oracleフィールド数
'
'===================================================================
Public Function SetGraph( _
ByRef xlSheet As Excel.Worksheet, ByRef xlChart As Excel.Chart, ByVal SheetName As String, _
ByVal intRow As Integer, ByVal intCol As Integer)

Dim GraphSheetName As String
Dim GraphTitle As String
Dim TitleSize As Integer
Dim xTitle As String
Dim yTitle As String

'***************************************************************
'Excelグラフ設定
GraphSheetName = "WeightGraph" 'グラフシート名
GraphTitle = "Weight" 'グラフタイトル名
TitleSize = 14 'グラフタイトルサイズ
xTitle = "日付" 'X軸タイトル名
yTitle = "Kg" 'Y軸タイトル名
'***************************************************************

Dim GraphRange As Range

'--- グラフのデータソース、データ系列(縦軸・横軸)
xlChart.SetSourceData _
Source:=Sheets(SheetName).Range _
(Sheets(SheetName).Cells(1, 1), Sheets(SheetName).Cells(intRow + 1, intCol)), _
PlotBy:=xlColumns

'--- グラフを作る場所、シート名
xlChart.Location _
Where:=xlLocationAsNewSheet, Name:=GraphSheetName
'--- グラフの種類
xlChart.ChartType = xlLineMarkers

With xlChart
.HasTitle = True 'グラフタイトル有無
.ChartTitle.Text = GraphTitle 'グラフタイトル名
.ChartTitle.Font.Size = TitleSize 'グラフタイトルサイズ
.Axes(xlCategory, xlPrimary).HasTitle = True 'X軸タイトル有無
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = xTitle 'X軸タイトル名
.Axes(xlValue, xlPrimary).HasTitle = True 'Y軸タイトル有無
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = yTitle 'Y軸タイトル名

End With

xlChart.ApplyDataLabels Type:=xlDataLabelsShowNone, LegendKey:=False
xlChart.HasDataTable = False

End Function

2005 / 07 / 30

[VB6.0|Oracle] パラメータを使ったSQL文

Option Explicit

'--- パラメータ入出力
Public Const ORAPARM_INPUT = 1
Public Const ORAPARM_OUTPUT = 2
Public Const ORAPARM_BOTH = 3

'--- パラメータタイプ(NVARCHAR2 は VARCHAR2 でできた。)
Public Const ORATYPE_VARCHAR2 = 1
Public Const ORATYPE_NUMBER = 2
Public Const ORATYPE_SINT = 3
Public Const ORATYPE_FLOAT = 4
Public Const ORATYPE_STRING = 5
Public Const ORATYPE_VARCHAR = 9
Public Const ORATYPE_DATE = 12
Public Const ORATYPE_UINT = 68
Public Const ORATYPE_CHAR = 96
Public Const ORATYPE_CHARZ = 97
Public Const ORATYPE_CURSOR = 102

Public Function Ora_Insert ( _
ByVal colNo As String, _
ByVal colName As String, _
ByVal colBirth As String, _
ByVal colRole As String, _
ByVal colMemo As String, _
ByVal OraSession As Object, _
ByVal OraDatabase As Object)

'--- パラメータ追加
OraDatabase.Parameters.Add "pNo", 0, ORAPARM_INPUT
OraDatabase.Parameters("pNo").serverType = ORATYPE_VARCHAR2
OraDatabase.Parameters.Add "pName", 0, ORAPARM_INPUT
OraDatabase.Parameters("pName").serverType = ORATYPE_VARCHAR2
OraDatabase.Parameters.Add "pBirth", 0, ORAPARM_INPUT
OraDatabase.Parameters("pBirth").serverType = ORATYPE_NUMBER
OraDatabase.Parameters.Add "pRole", 0, ORAPARM_INPUT
OraDatabase.Parameters("pRole").serverType = ORATYPE_VARCHAR2
OraDatabase.Parameters.Add "pMemo", 0, ORAPARM_INPUT
OraDatabase.Parameters("pMemo").serverType = ORATYPE_VARCHAR2

If Err <> 0 Or OraDatabase.LastServerErr <> 0 Then
MsgBox "パラメータ追加に失敗しました。" & Chr(10) & Err & ": " _
& Error & Chr(10) & "oo4o: " & OraDatabase.LastServerErrText
End
End If

OraSession.BeginTrans

'--- パラメータ格納
OraDatabase.Parameters("pNo").Value = colNo
OraDatabase.Parameters("pName").Value = colName
OraDatabase.Parameters("pBirth").Value = colBirth
OraDatabase.Parameters("pRole").Value = colRole
OraDatabase.Parameters("pMemo").Value = colMemo

'--- SQL文にパラメータ
Dim strSql As String
strSql = "INSERT INTO YAMADA.SAMPLETABLE VALUES _
(:pNo, :pName, :pBirth, :pRole, :pMemo)"

OraDatabase.ExecuteSQL (strSql)
OraSession.CommitTrans

End Function

'*** 後処理

Private Sub Form_Unload(Cancel As Integer)

'----- パラメータ解消
OraDatabase.Parameters.Remove "pNo"
OraDatabase.Parameters.Remove "pName"
OraDatabase.Parameters.Remove "pBirth"
OraDatabase.Parameters.Remove "pRole"
OraDatabase.Parameters.Remove "pMemo"

'----- oo4o 接続解除
Set OraDatabase = Nothing
Set OraSession = Nothing

End Sub

注 : OraSession と OraDatabase は、DBを開いたところから引数でもってくること!

2005 / 07 / 30

[VB6.0|Oracle] DB接続

'----- データベース関連 -----
Private OraSession As Object    'Oracle セッションオブジェクト
Private OraDatabase As Object   'Oracle データベースオブジェクト


Private Sub Form_Load()

Dim OraDB As String 'Oracle サービス名(別名)
Dim OraUser As String 'Oracle ユーザー名
Dim OraPass As String 'Oracle パスワード


'==============================================================

'----- エラートラップ開始
On Local Error Resume Next

'----- アイキャッチ表示
'frmLogo に「データベース接続中 …」表示
Load frmLogo
frmLogo.Show
DoEvents

'==============================================================

'-----iniファイル 接続
Call basIniFile.LoadIniFile

'----- サービス、ユーザー設定
OraDB = basIniFile.pOraDB
OraUser = basIniFile.pOraUser
OraPass = basIniFile.pOraPass


'----- oo4o 接続

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
If Err <> 0 Then
MsgBox "データベースに接続出来ません。" & Chr(10) & "CreateObject - Oracle oo4o エラー"
End
End If

Set OraDatabase = _
OraSession.OpenDatabase(OraDB, OraUser & "/" & OraPass, ORADB_DEFAULT)
If Err <> 0 Then
MsgBox "データベースに接続出来ません。" & Chr(10) & Err & ": " & Error
End
End If

'==============================================================

'----- アイキャッチ終了
Unload frmLogo

'----- エラートラップ終了
On Local Error GoTo 0

'==============================================================

End Sub

2005 / 07 / 30

[Oracle] Oracleデータ型

説明
CHAR(length) 固定長(〜2000Byte)の文字列型。未使用部分には空白が埋められる。
VARCHAR2(length) 可変長(〜4000Byte)の文字列型。未使用分の領域は確保されず,データのみが保管される。
LONG 可変長(〜2GByte)の文字列型。lengthの指定はない。1つの表に1つの列しか指定できない。LONG RAWと同時に使用できない。WHERE句,GROUP BY句,整合性制約,索引の対象にできない。
NCHAR(length) 固定長(〜2000Byte)のマルチByte文字列型。未使用部分には空白が埋められる。
NVARCHAR2(length) 可変長(〜4000Byte)のマルチByte文字列型。未使用分の領域は確保されず,データのみ保管される。
NUMBER
NUMBER(precision)
NUMBER(precision, scale)
数値型。precisionは全体の桁数(精度),scaleは小数点以下の桁数。Byte数はOracleが自動的に決める。scaleを省略するとprecision桁数の整数。scale, precisionともに省略すると最大38桁の浮動小数点数。
DATE 固定長(7Byte)の日付型。4桁年,月,日,時,分,秒を格納。
RAW(length) 可変長(〜2000Byte)のバイナリ型。
LONG RAW 可変長(〜2GByte)のバイナリ型。sizeの指定はない。1つの表に1つの列しか指定できない。LONGと同時に使用できない。WHERE句,GROUP BY句,整合性制約,索引の対象にできない。
BLOB 可変長(〜4GByte)のバイナリ型。1つの表に複数の列を定義可能。WHERE句,GROUP BY句,整合性制約,索引の対象にできない。BLOBデータは,表と異なる表領域に格納可能。 [Binary Large OBject]
CLOB 可変長(〜4GByte)のシングルByte文字列型。特徴はBLOBと同様。 [Character Large OBject]
NCLOB 可変長(〜4GByte)のマルチByte文字列型。シングルByte文字列も格納可能。特徴はBLOBと同様。 [National Character Large OBject]
BFILE 可変長(〜4GByte)のバイナリ型(読み取り専用)。OSファイルへのポインタを格納する。

2005 / 07 / 30