- [VB6.0|Oracle] oo4o 関数: (2005/10/13)
- [VB6.0|Oracle] Excelにグラフを表示: (2005/07/30)
- [VB6.0|Oracle] パラメータを使ったSQL文: (2005/07/30)
- [VB6.0|Oracle] DB接続: (2005/07/30)
- [Oracle] Oracleデータ型: (2005/07/30)
[VB6.0|Oracle] oo4o 関数
Option ExplicitGlobal oraSESSION As Object
Global oraDATABASE As ObjectGlobal 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 Err1FLAG = True
CONNECTID = USERID & "/" & PASSSet oraSESSION = CreateObject("OracleInProcServer.XOraSession")
Set oraDATABASE = oraSESSION.OpenDatabase(TNS, CONNECTID, ORADB_DEFAULT)oraCONNECT = FLAG
Exit FunctionErr1:
FLAG = False
oraCONNECT = FLAGEnd Function
Function oraSELECT(ByVal strSQL As String, ByRef oraDYNASET As Object) As Boolean Dim FLAG As Boolean On Error GoTo Err1FLAG = True
Set oraDYNASET = oraDATABASE.CreateDynaset(strSQL, ORADYN_DEFAULT)
oraSELECT = FLAG
Exit FunctionErr1:
FLAG = False
oraSELECT = FLAG
Debug.Print strSQL
End Function
Function oraEXECUTE(ByVal strSQL As String) As Boolean Dim FLAG As Boolean On Error GoTo Err1FLAG = True
oraDATABASE.ExecuteSQL strSQL
oraEXECUTE = FLAG
Exit FunctionErr1:
FLAG = False
oraEXECUTE = FLAGEnd Function
2005 / 10 / 13
[VB6.0|Oracle] Excelにグラフを表示
'■frmMainOption 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
'■basOraOpenCloseOption Explicit
'===================================================================
'
'■Oracleの接続
' 引数:OraSessionオブジェクト、OraDatabaseオブジェクト
' 戻値:True(正常)、False(エラー)
'
'===================================================================
Public Function OraOpen(ByRef OraSess As Object, ByRef OraDB As Object) As BooleanDim 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 = TrueEnd Function
'■basExcelOpenCloseOption 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 = NothingEnd Function
'■basExcelCtrlOption 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 = 102Public 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.CommitTransEnd 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