ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2018年10月22日(月) 23:28

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月27日(水) 10:29 
オフライン

登録日時: 2005年7月27日(水) 10:12
記事: 12
データベースアクセスのクラスのサンプルを作成して見ました。
Windows2000+Access2000Mdbでは正常に接続できること確認済みです。

エラー処理が殆どありませんので、不安な方は追加してください。
テストが不十分ですので、重要なデータはバックアップしてから試して下さい。
コード:
'=====================================================================
' 名  称:データベースアクセスクラス
' 概  要:ODBC接続にてデータベースにアクセスする
'=====================================================================

'== 定数 =============================================================
Const DBCLASS_OK = 0					'クラス正常終了
Const DBCLASS_NG = -1					'クラス異常終了

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

'== API用定数 ========================================================
'データソース用定数
Const ODBC_ADD_DSN = 1					'ユーザーデータソースの追加
Const ODBC_CONFIG_DSN = 2				'ユーザーデータソースの編集
Const ODBC_REMOVE_DSN = 3 				'ユーザーデータソースの削除
Const ODBC_ADD_SYS_DSN = 4				'システム データ ソースを追加
Const ODBC_CONFIG_SYS_DSN = 5			'システム データ ソースを設定 (編集)
Const ODBC_REMOVE_SYS_DSN = 6			'システム データ ソースを削除

'トランザクション用定数
Const SQL_COMMIT = 0					'トランザクション-コミット
Const SQL_ROLLBACK = 1					'トランザクション-ロールバック

'返却値用定数
Const SQL_NTS = -3
Const SQL_SUCCESS = 0					'SQL結果-正常終了
Const SQL_SUCCESS_WITH_INFO = 1			'SQL結果-正常終了(警告あり)
Const SQL_ERROR = -1					'SQL結果-異常終了
Const SQL_INVALID_HANDLE = -2			'SQL結果-不正ハンドル返却
Const SQL_NO_DATA_FOUND = 100			'SQL結果-データなし

'SQLAllocHandle、SQLFreeHandle用定数
Const SQL_NULL_HANDLE = 0				'SQL_HANDLE_ENV時パラメータ
Const SQL_HANDLE_ENV = 1				'環境ハンドル
Const SQL_HANDLE_DBC = 2				'接続ハンドル
Const SQL_HANDLE_STMT = 3				'ステートメントハンドル
Const SQL_HANDLE_DESC = 4

'SQLSetConnectOption用定数
Const SQL_AUTOCOMMIT = 102				'AutoCommitオプション
Const SQL_AUTOCOMMIT_OFF = 0			'AutoCommitOff
Const SQL_AUTOCOMMIT_ON = 1				'AutoCommitOn

'Fetch用定数
Const SQL_FETCH_NEXT = 1
Const SQL_FETCH_FIRST = 2
Const SQL_FETCH_LAST = 3
Const SQL_FETCH_PRIOR = 4
Const SQL_FETCH_ABSOLUTE = 5
Const SQL_FETCH_RELATIVE = 6

'環境定数
Const SQL_ATTR_CURSOR_TYPE = 6
Const SQL_ATTR_ROW_NUMBER = 14
Const SQL_ATTR_ODBC_VERSION = 200
Const SQL_OV_ODBC3 = 3

'行操作・結果定数
Const SQL_ROW_SUCCESS = 0
Const SQL_ROW_DELETED = 1
Const SQL_ROW_UPDATED = 2
Const SQL_ROW_NOROW = 3
Const SQL_ROW_ADDED = 4
Const SQL_ROW_ERROR = 5
Const SQL_ROW_SUCCESS_WITH_INFO = 6
Const SQL_ROW_PROCEED = 0
Const SQL_ROW_IGNORE = 1
Const SQL_NO_DATA = 100

'サイズ用定数
Const BRWS_LEN = 1000
Const SQL_LEN = 1000

'接続用定数
Const SQL_DRIVER_COMPLETE_REQUIRED = 3

'型宣言用定数
Const SQL_UNKNOWN_TYPE = 0
Const SQL_CHAR = 1
Const SQL_NUMERIC = 2
Const SQL_DECIMAL = 3
Const SQL_INTEGER = 4
Const SQL_SMALLINT = 5
Const SQL_FLOAT = 6
Const SQL_REAL = 7
Const SQL_DOUBLE = 8
Const SQL_DATETIME = 9
Const SQL_VARCHAR = 12
Const SQL_TYPE_DATE = 91
Const SQL_TYPE_TIMESTAMP = 93
Const SQL_INTERVAL = 10
Const SQL_TIME = 10
Const SQL_TIMESTAMP = 11
Const SQL_LONGVARCHAR = -1
Const SQL_BINARY = -2
Const SQL_VARBINARY = -3
Const SQL_LONGVARBINARY = -4
Const SQL_BIGINT = -5
Const SQL_TINYINT = -6
Const SQL_BIT = -7
Const SQL_GUID = -11

Const SQL_C_BINARY = SQL_BINARY
Const SQL_C_BIT = SQL_BIT
Const SQL_C_CHAR = SQL_CHAR
Const SQL_C_DOUBLE = SQL_DOUBLE
Const SQL_C_FLOAT = SQL_REAL
Const SQL_C_LONG = SQL_INTEGER
Const SQL_C_SHORT = SQL_SMALLINT
Const SQL_C_TYPE_DATE = SQL_TYPE_DATE
Const SQL_C_TYPE_TIME = SQL_TYPE_DATE
Const SQL_C_TYPE_TIMESTAMP = SQL_TYPE_TIMESTAMP
Const SQL_C_TINYINT = SQL_TINYINT
'=====================================================================

'SQLAllocHandle - ハンドルの割り当て
Declare Function SQLAllocHandle _
	Lib "odbc32.dll" ( _
	ByVal handletype As Integer, _
	ByVal inputhandle As HANDLE, _
	ByRef outputhandle As HANDLE _
	) As Integer
'SQLFreeHandle - ハンドル・リソースの解放
Declare Function SQLFreeHandle _
	Lib "odbc32.dll" ( _
	ByVal handletype As Integer, _
	ByVal handle As HANDLE _
	) As Integer

'SQLDisconnect - データ・ソースからの切断
Declare Function SQLDisconnect _
	Lib "odbc32.dll" ( _
	ByVal hdbc As Long _
	) As Integer

'SQLPrepare - ステートメントの準備
Declare Function SQLPrepare _
	Lib "odbc32.dll" ( _
	ByVal hstmt As HANDLE, _
	ByVal stmt As String, _
	ByVal stmtlen As Long _
	) As Integer

'SQLExecute - ステートメントの実行
Declare Function SQLExecute _
	Lib "odbc32.dll" ( _
	ByVal hstmt As Long _
	) As Integer

'SQLNumResultCols - 結果の列数の入手
Declare Function SQLNumResultCols _
	Lib "odbc32.dll" ( _
	ByVal hstmt As Long, _
	ByRef nCou As Integer _
	) As Integer

'SQLDescribeCol - 列の属性セットの戻し
Declare Function SQLDescribeCol _
	Lib "odbc32.dll" ( _
	ByVal hstmt As Long, _
	ByVal colno As Integer, _
	ByVal colname As String, _
	ByVal namelen As Integer, _
	ByRef pnamelen As Integer, _
	ByRef datatype As Integer, _
	ByRef colsize As Long, _
	ByRef pdecimal As Integer, _
	ByRef pnull As Integer _
	) As Integer

'SQLFetch - 次の行の取り出し
Declare Function SQLFetch _
	Lib "odbc32.dll" ( _
	ByVal hstmt As Long _
	) As Integer

'SQLFetchScroll - 行セットの取り出しと、バインドされたすべての列のデータの戻し
Declare Function SQLFetchScroll _
	Lib "odbc32" ( _
	hstmt As HANDLE, _
	FetchOrientation As Integer, _
	FetchOffset As Long _
	) As Integer

'SQLGetData - 列からのデータの入手
Declare Function SQLGetData _
	Lib "odbc32.dll" ( _
	ByVal hstmt As Long, _
	ByVal colno As Integer, _
	ByVal targettype As Integer, _
	ByVal pVal As Any, _
	ByVal buflen As Long, _
	ByRef ind As Long _
	) As Integer

'SQLDriverConnect - データ・ソースへの接続
Declare Function SQLDriverConnect _
	Lib "odbc32.dll" ( _
	hdbc As HANDLE, _
	hwnd As Word, _
	szCSIn As BytePtr, _
	cbCSIn As Integer, _
	szCSOut As BytePtr, _
	cbCSMax As Integer, _
	cbCSOut As WordPtr, _
	fDrvrComp As Integer _
	) As Integer

'SQLSetConnectOption - 接続オプションの設定
Declare Function SQLSetConnectOption _
	Lib "odbc32.dll" ( _
	ByVal hDBc As HANDLE, _
	ByVal fOption As Integer, _
	ByVal vParam As Long
	) As Integer

'SQLSetEnvAttr - 環境属性を設定
Declare Function SQLSetEnvAttr _
	Lib "odbc32.dll" ( _
	henv As HANDLE, _
	Attribute As Long, _
	ValuePtr As VoidPtr, _
	StringLength As Long _
	) As Integer

'SQLTransact - トランザクション管理
Declare Function SQLTransact _
	Lib "odbc32.dll" ( _
	ByVal hEnv As HANDLE, _
	ByVal hDBc As HANDLE, _
	ByVal fnType As Integer _
	) As Integer

'SQLConfigDataSource - ODBC への登録・編集・削除
Declare Function SQLConfigDataSource _
	Lib "odbccp32.dll" ( _
	ByVal hwndParent As Long, _
	ByVal fRequest As Long, _
	ByVal lpszDriver As String, _
	ByVal lpszAttributes As String _
	) As Long


Class CDBClass
	henv					As HANDLE		'環境ハンドル
	hdbc					As HANDLE		'接続ハンドル
	hstmt					As HANDLE		'ステートメントハンドル
	iConStrOut				As Long
	sTableName				As String
	iEof					As Integer
Public

	'==========================================================================
	' 関数名:コンストラクタ関数
	' 説  明:コンストラクタ
	' 呼  出:なし
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Sub CDBClass()

		'変数初期化
		hdbc = 0
		henv = 0
		hstmt = 0
		iEof = 0

		'SQL接続用の環境ハンドルを取得する
		SQLAllocHandle(SQL_HANDLE_ENV, 0, henv)

		'環境属性をODBC3.0に設定する
		SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0)

		'接続ハンドルを取得する
		SQLAllocHandle(SQL_HANDLE_DBC, henv, hdbc)

	End Sub

	'==========================================================================
	' 関数名:デストラクタ関数
	' 説  明:デストラクタ
	' 呼  出:なし
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Sub ~CDBClass()

		'ステートメントハンドルが設定されているか判定する
		If hstmt Then

			'ステートメントハンドルを解放する
			SQLFreeHandle(
				SQL_HANDLE_STMT, _
				hstmt _
				)

			'接続を切断する
			SQLDisconnect(hdbc)
		End If

		'接続ハンドルを解放する
		SQLFreeHandle( _
			SQL_HANDLE_DBC, _
			hdbc _
			)

		'環境ハンドルを解放する
		SQLFreeHandle( _
			SQL_HANDLE_ENV, _
			henv _
			)

	End Sub

	'==========================================================================
	' 関数名:ConnectOpen関数
	' 説  明:データベースへ接続を行う
	' 呼  出:ConnectOpen(psDataSource As String)
	' 引き数:psDataSource		As String		(I/ ) ODBCデータソース
	' 戻り値:なし
	'==========================================================================
	Function ConnectOpen(psDataSource As String) As Integer

		Dim sConStrOut[BRWS_LEN-1]		As Byte
		Dim ret							As Integer

		'返却値初期化
		ConnectOpen = DBCLASS_OK

		'データベースへ接続する
		ret = SQLDriverConnect( _
			hdbc, _
			0, _
			psDataSource, _
			-3, _
			sConStrOut, _
			BRWS_LEN, _
			VarPtr(iConStrOut), _
			SQL_DRIVER_COMPLETE_REQUIRED _
			)
		If (ret = SQL_NO_DATA_FOUND) THen

			'返却値を設定する
			ConnectOpen = DBCLASS_NG

		End If

	End Function

	'==========================================================================
	' 関数名:ConnectClose関数
	' 説  明:データベースを切断する
	' 呼  出:Close()
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Function ConnectClose() As Integer

		'ステートメントハンドルが設定されているか確認する
		If hstmt Then

			'ステートメントハンドルを解放する
			SQLFreeHandle( _
				SQL_HANDLE_STMT, _
				hstmt _
				)

			'ステートメントハンドルを初期化する
			hstmt = 0

		End If


		'データベースを切断する
		SQLDisconnect(hdbc)

	End Function

	'==========================================================================
	' 関数名:Execute関数
	' 説  明:SQL文を実行する
	' 呼  出:Execute(psSqlStr As String)
	' 引き数:psSqlStr			As String		(I/ ) SQL文格納用
	' 戻り値:なし
	'==========================================================================
	Function Execute(psSqlStr As String) As Integer

		'ステートメントハンドルが取得されているか確認する
		If hstmt Then

			'ステートメントハンドルを解放する
			SQLFreeHandle( _
				SQL_HANDLE_STMT, _
				hstmt _
				)

			'ステートメントハンドルを初期化する
			hstmt = 0

		End If

		'ステートメントハンドルを取得する
		SQLAllocHandle( _
			SQL_HANDLE_STMT, _
			hdbc, _
			hstmt _
			)

		'SQL文を設定する
		SQLPrepare( _
			hstmt, _
			psSqlStr, _
			Len(psSqlStr) _
			)

		'SQL文を実行する
		SQLExecute(hstmt)

		iEof = 0
	End Function

	'==========================================================================
	' 関数名:Open関数
	' 説  明:SQLをオープンする
	' 呼  出:Open(psSqlStr As String)
	' 引き数:psSqlStr			As String		(I/ ) SQL文格納用
	' 戻り値:なし
	'==========================================================================
	Function Open(psSqlStr As String) As Integer
		'
		Execute(psSqlStr)

		MoveFirst()

	End Function

	'==========================================================================
	' 関数名:Close関数
	' 説  明:SQLをクローズする
	' 呼  出:Close()
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Function Close() As Integer
		'
		'SQLが実行されている場合に処理を行う
		IF hstmt Then
			'ステートメントハンドル解放
			SQLFreeHandle( _
				SQL_HANDLE_STMT, _
				hstmt _
				)

			hstmt = 0
		End If

	End Function

	'==========================================================================
	' 関数名:BeginTransact関数
	' 説  明:AutoCommitを解除し、明示的にトランザクションを行う
	' 呼  出:BeginTransact()
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Function BeginTransact() As Integer

		'AutoCommitをOFFにする
		SQLSetConnectOption( _
			hdbc, _
			SQL_AUTOCOMMIT, _
			SQL_AUTOCOMMIT_OFF _
			)

	End Function

	'==========================================================================
	' 関数名:Commit関数
	' 説  明:Commitを行い、AutoCommitをONにする
	' 呼  出:Commit()
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Function Commit() As Integer

		'トランザクションをCommitする
		SQLTransact( _
			henv, _
			hdbc, _
			SQL_COMMIT _
			)

		'AutoCommitをONにする
		SQLSetConnectOption( _
			hdbc, _
			SQL_AUTOCOMMIT, _
			SQL_AUTOCOMMIT_ON _
			)

	End Function

	'==========================================================================
	' 関数名:RollBack関数
	' 説  明:RollBackを行い、AutoCommitをONにする
	' 呼  出:RollBack()
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Function RollBack() As Integer

		'トランザクションをCommitする
		SQLTransact( _
			henv, _
			hdbc, _
			SQL_ROLLBACK _
			)

		'AutoCommitをONにする
		SQLSetConnectOption( _
			hdbc, _
			SQL_AUTOCOMMIT, _
			SQL_AUTOCOMMIT_ON _
			)

	End Function

	'==========================================================================
	' 関数名:Compact関数
	' 説  明:AccessMDBファイルの最適化を行う
	' 呼  出:Compact(psFilePath As String)
	' 引き数:psFilePath		As String		(I/ ) MDBファイルパス
	' 戻り値:なし
	'==========================================================================
	Function Compact(psFilePath As String) As Integer

		'AccessMDBの最適化を行う
		SQLConfigDataSource( _
			0, _
			ODBC_CONFIG_DSN, _
			"Microsoft Access Driver (*.MDB)", _
			"DSN=MS Access Database;COMPACT_DB=" & psFilePath & " " & psFilePath _
			)

	End Function

	'==========================================================================
	' 関数名:GetValueString関数
	' 説  明:指定されたフィールドの値を取得する
	' 呼  出:GetValueString(psFiledName As String)
	' 引き数:psFiledName		As String		(I/ ) フィールド名
	' 戻り値:なし
	'==========================================================================
	Function GetValueString(psFiledName As String) As String
		Dim lColCnt							As Integer
		Dim i								As Integer
		Dim sFiledName						As String
		Dim Ret								As Long
		Dim pNameLen						As Integer
		Dim iDataType						As Integer
		Dim iColSize						As Long
		Dim iDecimal						As Integer
		Dim ipNull							As Integer
		Dim lngRetByteSize					As Long

		'SQLが実行されている場合に処理を行う
		IF hstmt Then

			'カラム数を取得する
			SQLNumResultCols( _
				hstmt, _
				lColCnt _
				)

			'String領域確保
			sFiledName = ZeroString(SQL_LEN)

			For i = 1 To lColCnt
				'フィールド名を取得する
				SQLDescribeCol( _
					hstmt, _
					i, _
					StrPtr(sFiledName), _
					SQL_LEN, _
					pNameLen, _
					iDataType, _
					iColSize, _
					iDecimal, _
					ipNull _
					)

				'対象のフィールドか判定する
				If (psFiledName = sFiledName) Then

					'対象のフィールドの場合、値を取得する
					Select Case iDataType
						Case SQL_VARCHAR

							GetValueString = ZeroString(iColSize)

							'SQLの値を取得する
							SQLGetData( _
								hstmt, _
								i, _
								SQL_CHAR, _
								StrPtr(GetValueString),
								iColSize, _
								lngRetByteSize _
								)

						Case Else
					End Select
				End If
			Next i
		End If

	End Function

	'==========================================================================
	' 関数名:GetValueDouble関数
	' 説  明:指定されたフィールドの値を取得する
	' 呼  出:GetValueDouble(psFiledName As String)
	' 引き数:psFiledName		As String		(I/ ) フィールド名
	' 戻り値:なし
	'==========================================================================
	Function GetValueDouble(psFiledName As String) As Double
		Dim lColCnt							As Integer
		Dim i								As Integer
		Dim sFiledName						As String
		Dim Ret								As Long
		Dim pNameLen						As Integer
		Dim iDataType						As Integer
		Dim iColSize						As Long
		Dim iDecimal						As Integer
		Dim ipNull							As Integer
		Dim lngRetByteSize					As Long


		'SQLが実行されている場合に処理を行う
		IF hstmt Then

			'カラム数を取得する
			SQLNumResultCols( _
				hstmt, _
				lColCnt _
				)

			'String領域確保
			sFiledName = ZeroString(SQL_LEN)

			For i = 1 To lColCnt
				'フィールド名を取得する
				SQLDescribeCol( _
					hstmt, _
					i, _
					StrPtr(sFiledName), _
					SQL_LEN, _
					pNameLen, _
					iDataType, _
					iColSize, _
					iDecimal, _
					ipNull _
					)

				'対象のフィールドか判定する
				If (psFiledName = sFiledName) Then

					'対象のフィールドの場合、値を取得する
					Select Case iDataType
						Case SQL_INTEGER, SQL_SMALLINT, SQL_FLOAT, SQL_REAL, SQL_DOUBLE

							SQLGetData( _
								hstmt, _
								i, _
								SQL_DOUBLE, _
								VarPtr(GetValueDouble), _
								0, _
								lngRetByteSize _
								)

						Case Else
					End Select
				End If
			Next i
		End If

	End Function

	'==========================================================================
	' 関数名:MoveFirst関数
	' 説  明:先頭行へカーソルを移動する
	' 呼  出:MoveFirst()
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Function MoveFirst() As Integer

		'先頭行へ移動する
		SQLFetchScroll( _
			hstmt, _
			SQL_FETCH_FIRST, _
			0 _
			)

		SQLFetch(hstmt)

	End Function

	'==========================================================================
	' 関数名:MoveNext関数
	' 説  明:次行へカーソルを移動する
	' 呼  出:MoveNext()
	' 引き数:なし
	' 戻り値:なし
	'==========================================================================
	Function MoveNext() As Integer
		Dim ret					As Integer

		'次行へ移動する
		ret = SQLFetchScroll( _
			hstmt, _
			SQL_FETCH_NEXT, _
			0 _
			)
		If (ret = SQL_NO_DATA) Then
			iEof = 1
		Else
			iEof = 0
		End If

	End Function

	'==========================================================================
	' 関数名:Eof関数
	' 説  明:EOFの状態を返却する
	' 呼  出:Eof()
	' 引き数:なし
	' 戻り値: 0:正常
	'		: 1:EOF
	'==========================================================================
	Function Eof() As Integer

		Eof = iEof

	End Function

End Class

呼び出しのサンプルです。
mdb名:test.mdb
テーブル名:tbl_test
フィールド1:filed01 int
フィールド2:filed02 char(10)
コード:
Dim a As *CDBClass

a = New CDBClass

a->ConnectOpen("DRIVER=Microsoft Access Driver(*.mdb);UID=;PWD=;DBQ=D:\test.mdb")

a->Execute("DELETE FROM tbl_test")

a->Execute("INSERT INTO tbl_test VALUES(1,'あ')")

a->Execute("INSERT INTO tbl_test VALUES(1,'い')")

a->Open("SELECT * FROM tbl_test")

While (a->Eof() = 0)
 ret = a->GetValueDouble("filed01")
 Buff = a->GetValueString("filed02")
debug
 a->MoveNext()
Wend

a->Close()
a->ConnectClose()

Delete a



最後に編集したユーザー hanchan on 2005年8月22日(月) 16:46 [ 編集 1 回目 ]

通報する
ページトップ
投稿記事Posted: 2005年8月22日(月) 12:40 
オフライン

登録日時: 2005年7月27日(水) 10:12
記事: 12
ループ中にテーブルを2つオープンする場合などに使いづらかったのでDB接続とテーブルオープンのクラスを分けました。

相変わらずテストは不十分です。
コード:
'=====================================================================
' 名  称:データベースアクセスクラス
' 概  要:ODBC接続にてデータベースにアクセスする
'=====================================================================

'== 定数 =============================================================
Const DBCLASS_OK = 0                    'クラス正常終了
Const DBCLASS_NG = -1                   'クラス異常終了

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

'== API用定数 ========================================================
'データソース用定数
Const ODBC_ADD_DSN = 1                  'ユーザーデータソースの追加
Const ODBC_CONFIG_DSN = 2               'ユーザーデータソースの編集
Const ODBC_REMOVE_DSN = 3               'ユーザーデータソースの削除
Const ODBC_ADD_SYS_DSN = 4              'システム データ ソースを追加
Const ODBC_CONFIG_SYS_DSN = 5           'システム データ ソースを設定 (編集)
Const ODBC_REMOVE_SYS_DSN = 6           'システム データ ソースを削除

'トランザクション用定数
Const SQL_COMMIT = 0                    'トランザクション-コミット
Const SQL_ROLLBACK = 1                  'トランザクション-ロールバック

'返却値用定数
Const SQL_NTS = -3
Const SQL_SUCCESS = 0                   'SQL結果-正常終了
Const SQL_SUCCESS_WITH_INFO = 1         'SQL結果-正常終了(警告あり)
Const SQL_ERROR = -1                    'SQL結果-異常終了
Const SQL_INVALID_HANDLE = -2           'SQL結果-不正ハンドル返却
Const SQL_NO_DATA_FOUND = 100           'SQL結果-データなし

'SQLAllocHandle、SQLFreeHandle用定数
Const SQL_NULL_HANDLE = 0               'SQL_HANDLE_ENV時パラメータ
Const SQL_HANDLE_ENV = 1                '環境ハンドル
Const SQL_HANDLE_DBC = 2                '接続ハンドル
Const SQL_HANDLE_STMT = 3               'ステートメントハンドル
Const SQL_HANDLE_DESC = 4

'SQLSetConnectOption用定数
Const SQL_AUTOCOMMIT = 102              'AutoCommitオプション
Const SQL_AUTOCOMMIT_OFF = 0            'AutoCommitOff
Const SQL_AUTOCOMMIT_ON = 1             'AutoCommitOn

'Fetch用定数
Const SQL_FETCH_NEXT = 1
Const SQL_FETCH_FIRST = 2
Const SQL_FETCH_LAST = 3
Const SQL_FETCH_PRIOR = 4
Const SQL_FETCH_ABSOLUTE = 5
Const SQL_FETCH_RELATIVE = 6

'環境定数
Const SQL_ATTR_CURSOR_TYPE = 6
Const SQL_ATTR_ROW_NUMBER = 14
Const SQL_ATTR_ODBC_VERSION = 200
Const SQL_OV_ODBC3 = 3

'行操作・結果定数
Const SQL_ROW_SUCCESS = 0
Const SQL_ROW_DELETED = 1
Const SQL_ROW_UPDATED = 2
Const SQL_ROW_NOROW = 3
Const SQL_ROW_ADDED = 4
Const SQL_ROW_ERROR = 5
Const SQL_ROW_SUCCESS_WITH_INFO = 6
Const SQL_ROW_PROCEED = 0
Const SQL_ROW_IGNORE = 1
Const SQL_NO_DATA = 100

'サイズ用定数
Const BRWS_LEN = 1000
Const SQL_LEN = 1000

'接続用定数
Const SQL_DRIVER_COMPLETE_REQUIRED = 3

'型宣言用定数
Const SQL_UNKNOWN_TYPE = 0
Const SQL_CHAR = 1
Const SQL_NUMERIC = 2
Const SQL_DECIMAL = 3
Const SQL_INTEGER = 4
Const SQL_SMALLINT = 5
Const SQL_FLOAT = 6
Const SQL_REAL = 7
Const SQL_DOUBLE = 8
Const SQL_DATETIME = 9
Const SQL_VARCHAR = 12
Const SQL_TYPE_DATE = 91
Const SQL_TYPE_TIMESTAMP = 93
Const SQL_INTERVAL = 10
Const SQL_TIME = 10
Const SQL_TIMESTAMP = 11
Const SQL_LONGVARCHAR = -1
Const SQL_BINARY = -2
Const SQL_VARBINARY = -3
Const SQL_LONGVARBINARY = -4
Const SQL_BIGINT = -5
Const SQL_TINYINT = -6
Const SQL_BIT = -7
Const SQL_GUID = -11

Const SQL_C_BINARY = SQL_BINARY
Const SQL_C_BIT = SQL_BIT
Const SQL_C_CHAR = SQL_CHAR
Const SQL_C_DOUBLE = SQL_DOUBLE
Const SQL_C_FLOAT = SQL_REAL
Const SQL_C_LONG = SQL_INTEGER
Const SQL_C_SHORT = SQL_SMALLINT
Const SQL_C_TYPE_DATE = SQL_TYPE_DATE
Const SQL_C_TYPE_TIME = SQL_TYPE_DATE
Const SQL_C_TYPE_TIMESTAMP = SQL_TYPE_TIMESTAMP
Const SQL_C_TINYINT = SQL_TINYINT
'=====================================================================

'SQLAllocHandle - ハンドルの割り当て
Declare Function SQLAllocHandle _
    Lib "odbc32.dll" ( _
    ByVal handletype As Integer, _
    ByVal inputhandle As HANDLE, _
    ByRef outputhandle As HANDLE _
    ) As Integer
'SQLFreeHandle - ハンドル・リソースの解放
Declare Function SQLFreeHandle _
    Lib "odbc32.dll" ( _
    ByVal handletype As Integer, _
    ByVal handle As HANDLE _
    ) As Integer

'SQLDisconnect - データ・ソースからの切断
Declare Function SQLDisconnect _
    Lib "odbc32.dll" ( _
    ByVal hdbc As Long _
    ) As Integer

'SQLPrepare - ステートメントの準備
Declare Function SQLPrepare _
    Lib "odbc32.dll" ( _
    ByVal hstmt As HANDLE, _
    ByVal stmt As String, _
    ByVal stmtlen As Long _
    ) As Integer

'SQLExecute - ステートメントの実行
Declare Function SQLExecute _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long _
    ) As Integer

'SQLNumResultCols - 結果の列数の入手
Declare Function SQLNumResultCols _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long, _
    ByRef nCou As Integer _
    ) As Integer

'SQLDescribeCol - 列の属性セットの戻し
Declare Function SQLDescribeCol _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long, _
    ByVal colno As Integer, _
    ByVal colname As String, _
    ByVal namelen As Integer, _
    ByRef pnamelen As Integer, _
    ByRef datatype As Integer, _
    ByRef colsize As Long, _
    ByRef pdecimal As Integer, _
    ByRef pnull As Integer _
    ) As Integer

'SQLFetch - 次の行の取り出し
Declare Function SQLFetch _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long _
    ) As Integer

'SQLFetchScroll - 行セットの取り出しと、バインドされたすべての列のデータの戻し
Declare Function SQLFetchScroll _
    Lib "odbc32" ( _
    hstmt As HANDLE, _
    FetchOrientation As Integer, _
    FetchOffset As Long _
    ) As Integer

'SQLGetData - 列からのデータの入手
Declare Function SQLGetData _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long, _
    ByVal colno As Integer, _
    ByVal targettype As Integer, _
    ByVal pVal As Any, _
    ByVal buflen As Long, _
    ByRef ind As Long _
    ) As Integer

'SQLDriverConnect - データ・ソースへの接続
Declare Function SQLDriverConnect _
    Lib "odbc32.dll" ( _
    hdbc As HANDLE, _
    hwnd As Word, _
    szCSIn As BytePtr, _
    cbCSIn As Integer, _
    szCSOut As BytePtr, _
    cbCSMax As Integer, _
    cbCSOut As WordPtr, _
    fDrvrComp As Integer _
    ) As Integer

'SQLSetConnectOption - 接続オプションの設定
Declare Function SQLSetConnectOption _
    Lib "odbc32.dll" ( _
    ByVal hDBc As HANDLE, _
    ByVal fOption As Integer, _
    ByVal vParam As Long
    ) As Integer

'SQLSetEnvAttr - 環境属性を設定
Declare Function SQLSetEnvAttr _
    Lib "odbc32.dll" ( _
    henv As HANDLE, _
    Attribute As Long, _
    ValuePtr As VoidPtr, _
    StringLength As Long _
    ) As Integer

'SQLTransact - トランザクション管理
Declare Function SQLTransact _
    Lib "odbc32.dll" ( _
    ByVal hEnv As HANDLE, _
    ByVal hDBc As HANDLE, _
    ByVal fnType As Integer _
    ) As Integer

'SQLConfigDataSource - ODBC への登録・編集・削除
Declare Function SQLConfigDataSource _
    Lib "odbccp32.dll" ( _
    ByVal hwndParent As Long, _
    ByVal fRequest As Long, _
    ByVal lpszDriver As String, _
    ByVal lpszAttributes As String _
    ) As Long


'=====================================================================
' 名  称:コネクション接続クラス
' 概  要:ODBC接続にてデータベースに接続を行う
'=====================================================================
Class DBConnection
    henv                    As HANDLE       '環境ハンドル
    hdbc                    As HANDLE       '接続ハンドル
    hstmt                   As HANDLE       'ステートメントハンドル
    iConStrOut              As Long
    sTableName              As String
Public

    '==========================================================================
    ' 関数名:コンストラクタ関数
    ' 説  明:コンストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub DBConnection()

        '変数初期化
        hdbc = 0
        henv = 0
        hstmt = 0

        'SQL接続用の環境ハンドルを取得する
        SQLAllocHandle(SQL_HANDLE_ENV, 0, henv)

        '環境属性をODBC3.0に設定する
        SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0)

        '接続ハンドルを取得する
        SQLAllocHandle(SQL_HANDLE_DBC, henv, hdbc)

    End Sub

    '==========================================================================
    ' 関数名:デストラクタ関数
    ' 説  明:デストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub ~DBConnection()

        'ステートメントハンドルが設定されているか判定する
        If hstmt Then

            'ステートメントハンドルを解放する
            SQLFreeHandle(
                SQL_HANDLE_STMT, _
                hstmt _
                )

            '接続を切断する
            SQLDisconnect(hdbc)
        End If

        '接続ハンドルを解放する
        SQLFreeHandle( _
            SQL_HANDLE_DBC, _
            hdbc _
            )

        '環境ハンドルを解放する
        SQLFreeHandle( _
            SQL_HANDLE_ENV, _
            henv _
            )

    End Sub

    '==========================================================================
    ' 関数名:ConOpen関数
    ' 説  明:データベースへ接続を行う
    ' 呼  出:ConOpen(psDataSource As String)
    ' 引き数:psDataSource      As String       (I/ ) ODBCデータソース
    ' 戻り値:なし
    '==========================================================================
    Function ConOpen(psDataSource As String) As Integer

        Dim sConStrOut[BRWS_LEN-1]      As Byte
        Dim ret                         As Integer

        '返却値初期化
        ConOpen = DBCLASS_OK

        'データベースへ接続する
        ret = SQLDriverConnect( _
            hdbc, _
            0, _
            psDataSource, _
            -3, _
            sConStrOut, _
            BRWS_LEN, _
            VarPtr(iConStrOut), _
            SQL_DRIVER_COMPLETE_REQUIRED _
            )
        If (ret = SQL_NO_DATA_FOUND) THen

            '返却値を設定する
            ConOpen = DBCLASS_NG

        End If

    End Function

    '==========================================================================
    ' 関数名:ConClose関数
    ' 説  明:データベースを切断する
    ' 呼  出:ConClose()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Function ConClose() As Integer

        'ステートメントハンドルが設定されているか確認する
        If hstmt Then

            'ステートメントハンドルを解放する
            SQLFreeHandle( _
                SQL_HANDLE_STMT, _
                hstmt _
                )

            'ステートメントハンドルを初期化する
            hstmt = 0

        End If


        'データベースを切断する
        SQLDisconnect(hdbc)

    End Function

    '==========================================================================
    ' 関数名:Execute関数
    ' 説  明:SQL文を実行する
    ' 呼  出:Execute(psSqlStr As String)
    ' 引き数:psSqlStr          As String       (I/ ) SQL文格納用
    ' 戻り値:なし
    '==========================================================================
    Function Execute(psSqlStr As String) As Integer

        'ステートメントハンドルが取得されているか確認する
        If hstmt Then

            'ステートメントハンドルを解放する
            SQLFreeHandle( _
                SQL_HANDLE_STMT, _
                hstmt _
                )

            'ステートメントハンドルを初期化する
            hstmt = 0

        End If

        'ステートメントハンドルを取得する
        SQLAllocHandle( _
            SQL_HANDLE_STMT, _
            hdbc, _
            hstmt _
            )

        'SQL文を設定する
        SQLPrepare( _
            hstmt, _
            psSqlStr, _
            Len(psSqlStr) _
            )

        'SQL文を実行する
        SQLExecute(hstmt)

    End Function

    '==========================================================================
    ' 関数名:BeginTransact関数
    ' 説  明:AutoCommitを解除し、明示的にトランザクションを行う
    ' 呼  出:BeginTransact()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Function BeginTransact() As Integer

        'AutoCommitをOFFにする
        SQLSetConnectOption( _
            hdbc, _
            SQL_AUTOCOMMIT, _
            SQL_AUTOCOMMIT_OFF _
            )

    End Function

    '==========================================================================
    ' 関数名:Commit関数
    ' 説  明:Commitを行い、AutoCommitをONにする
    ' 呼  出:Commit()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Function Commit() As Integer

        'トランザクションをCommitする
        SQLTransact( _
            henv, _
            hdbc, _
            SQL_COMMIT _
            )

        'AutoCommitをONにする
        SQLSetConnectOption( _
            hdbc, _
            SQL_AUTOCOMMIT, _
            SQL_AUTOCOMMIT_ON _
            )

    End Function

    '==========================================================================
    ' 関数名:RollBack関数
    ' 説  明:RollBackを行い、AutoCommitをONにする
    ' 呼  出:RollBack()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Function RollBack() As Integer

        'トランザクションをCommitする
        SQLTransact( _
            henv, _
            hdbc, _
            SQL_ROLLBACK _
            )

        'AutoCommitをONにする
        SQLSetConnectOption( _
            hdbc, _
            SQL_AUTOCOMMIT, _
            SQL_AUTOCOMMIT_ON _
            )

    End Function

    '==========================================================================
    ' 関数名:GetEnvHandle関数
    ' 説  明:接続されたコネクションの環境ハンドルを返却する
    ' 呼  出:GetEnvHandle()
    ' 引き数:なし
    ' 戻り値:環境ハンドル
    '==========================================================================
    Function GetEnvHandle() As HANDLE
        GetEnvHandle = henv
    End Function

    '==========================================================================
    ' 関数名:GetDbcHandle関数
    ' 説  明:接続されたコネクションの接続ハンドルを返却する
    ' 呼  出:GetDbcHandle()
    ' 引き数:なし
    ' 戻り値:接続ハンドル
    '==========================================================================
    Function GetDbcHandle() As HANDLE
        GetDbcHandle = hdbc
    End Function

'--------- おまけ -------------------------------------------------------------
    '==========================================================================
    ' 関数名:Compact関数
    ' 説  明:AccessMDBファイルの最適化を行う
    ' 呼  出:Compact(psFilePath As String)
    ' 引き数:psFilePath        As String       (I/ ) MDBファイルパス
    ' 戻り値:なし
    '==========================================================================
    Function Compact(psFilePath As String) As Integer

        'AccessMDBの最適化を行う
        SQLConfigDataSource( _
            0, _
            ODBC_CONFIG_DSN, _
            "Microsoft Access Driver (*.MDB)", _
            "DSN=MS Access Database;COMPACT_DB=" & psFilePath & " " & psFilePath _
            )

    End Function
'-----------------------------------------------------------------------------
End Class

'=====================================================================
' 名  称:レコードセットクラス
' 概  要:テーブルのレコードセットを取得する(疑似?)
'=====================================================================
Class DBRecordSet
    henv                    As HANDLE       '環境ハンドル
    hdbc                    As HANDLE       '接続ハンドル
    hstmt                   As HANDLE       'ステートメントハンドル
    iEof                    As Integer
Public

    '==========================================================================
    ' 関数名:コンストラクタ関数
    ' 説  明:コンストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub DBRecordSet()

        '変数初期化
        hdbc = 0
        henv = 0
        hstmt = 0
        iEof = 0

    End Sub

    '==========================================================================
    ' 関数名:デストラクタ関数
    ' 説  明:デストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub ~DBRecordSet()

        'ステートメントハンドルが設定されているか判定する
        If hstmt Then

            'ステートメントハンドルを解放する
            SQLFreeHandle(
                SQL_HANDLE_STMT, _
                hstmt _
                )

            hstmt = 0

        End If

    End Sub

    '==========================================================================
    ' 関数名:RecOpen関数
    ' 説  明:SQLをオープンする
    ' 呼  出:RecOpen(psSqlStr As String, pDbCn As *DBConnection)
    ' 引き数:psSqlStr          As String           (I/ ) SQL文格納用
    '         pDbCn             As *DBConnection    (I/ ) コネクション接続クラス
    ' 戻り値:なし
    '==========================================================================
    Function RecOpen(psSqlStr As String, pDbCn As *DBConnection) As Integer

        '環境ハンドルを取得する
        henv = pDbCn->GetEnvHandle()

        '接続ハンドルを取得する
        hdbc = pDbCn->GetDbcHandle()

        'ステートメントハンドルが取得されているか確認する
        If hstmt Then

            'ステートメントハンドルを解放する
            SQLFreeHandle( _
                SQL_HANDLE_STMT, _
                hstmt _
                )

            'ステートメントハンドルを初期化する
            hstmt = 0

        End If

        'ステートメントハンドルを取得する
        SQLAllocHandle( _
            SQL_HANDLE_STMT, _
            hdbc, _
            hstmt _
            )

        'SQL文を設定する
        SQLPrepare( _
            hstmt, _
            psSqlStr, _
            Len(psSqlStr) _
            )

        'SQL文を実行する
        SQLExecute(hstmt)

        MoveFirst()

        iEof = 0

    End Function

    '==========================================================================
    ' 関数名:RecClose関数
    ' 説  明:SQLをクローズする
    ' 呼  出:RecClose()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Function RecClose() As Integer
        '
        'SQLが実行されている場合に処理を行う
        IF hstmt Then
            'ステートメントハンドル解放
            SQLFreeHandle( _
                SQL_HANDLE_STMT, _
                hstmt _
                )

            hstmt = 0
        End If

    End Function

    '==========================================================================
    ' 関数名:MoveFirst関数
    ' 説  明:先頭行へカーソルを移動する
    ' 呼  出:MoveFirst()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Function MoveFirst() As Integer

        '先頭行へ移動する
        SQLFetchScroll( _
            hstmt, _
            SQL_FETCH_FIRST, _
            0 _
            )

        SQLFetch(hstmt)

    End Function

    '==========================================================================
    ' 関数名:MoveNext関数
    ' 説  明:次行へカーソルを移動する
    ' 呼  出:MoveNext()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Function MoveNext() As Integer
        Dim ret                 As Integer

        '次行へ移動する
        ret = SQLFetchScroll( _
            hstmt, _
            SQL_FETCH_NEXT, _
            0 _
            )
        If (ret = SQL_NO_DATA) Then
            iEof = 1
        Else
            iEof = 0
        End If

    End Function

    '==========================================================================
    ' 関数名:GetValueString関数
    ' 説  明:指定されたフィールドの値を取得する
    ' 呼  出:GetValueString(psFiledName As String)
    ' 引き数:psFiledName       As String       (I/ ) フィールド名
    ' 戻り値:なし
    '==========================================================================
    Function GetValueString(psFiledName As String) As String
        Dim lColCnt                         As Integer
        Dim i                               As Integer
        Dim sFiledName                      As String
        Dim Ret                             As Long
        Dim pNameLen                        As Integer
        Dim iDataType                       As Integer
        Dim iColSize                        As Long
        Dim iDecimal                        As Integer
        Dim ipNull                          As Integer
        Dim lngRetByteSize                  As Long

        'SQLが実行されている場合に処理を行う
        IF hstmt Then

            'カラム数を取得する
            SQLNumResultCols( _
                hstmt, _
                lColCnt _
                )

            'String領域確保
            sFiledName = ZeroString(SQL_LEN)

            For i = 1 To lColCnt
                'フィールド名を取得する
                SQLDescribeCol( _
                    hstmt, _
                    i, _
                    StrPtr(sFiledName), _
                    SQL_LEN, _
                    pNameLen, _
                    iDataType, _
                    iColSize, _
                    iDecimal, _
                    ipNull _
                    )

                '対象のフィールドか判定する
                If (psFiledName = sFiledName) Then

                    '対象のフィールドの場合、値を取得する
                    Select Case iDataType
                        Case SQL_VARCHAR

                            GetValueString = ZeroString(iColSize)

                            'SQLの値を取得する
                            SQLGetData( _
                                hstmt, _
                                i, _
                                SQL_CHAR, _
                                StrPtr(GetValueString),
                                iColSize, _
                                lngRetByteSize _
                                )

                        Case Else
                    End Select
                End If
            Next i
        End If

    End Function

    '==========================================================================
    ' 関数名:GetValueDouble関数
    ' 説  明:指定されたフィールドの値を取得する
    ' 呼  出:GetValueDouble(psFiledName As String)
    ' 引き数:psFiledName       As String       (I/ ) フィールド名
    ' 戻り値:なし
    '==========================================================================
    Function GetValueDouble(psFiledName As String) As Double
        Dim lColCnt                         As Integer
        Dim i                               As Integer
        Dim sFiledName                      As String
        Dim Ret                             As Long
        Dim pNameLen                        As Integer
        Dim iDataType                       As Integer
        Dim iColSize                        As Long
        Dim iDecimal                        As Integer
        Dim ipNull                          As Integer
        Dim lngRetByteSize                  As Long


        'SQLが実行されている場合に処理を行う
        IF hstmt Then

            'カラム数を取得する
            SQLNumResultCols( _
                hstmt, _
                lColCnt _
                )

            'String領域確保
            sFiledName = ZeroString(SQL_LEN)

            For i = 1 To lColCnt
                'フィールド名を取得する
                SQLDescribeCol( _
                    hstmt, _
                    i, _
                    StrPtr(sFiledName), _
                    SQL_LEN, _
                    pNameLen, _
                    iDataType, _
                    iColSize, _
                    iDecimal, _
                    ipNull _
                    )

                '対象のフィールドか判定する
                If (psFiledName = sFiledName) Then

                    '対象のフィールドの場合、値を取得する
                    Select Case iDataType
                        Case SQL_INTEGER, SQL_SMALLINT, SQL_FLOAT, SQL_REAL, SQL_DOUBLE

                            SQLGetData( _
                                hstmt, _
                                i, _
                                SQL_DOUBLE, _
                                VarPtr(GetValueDouble), _
                                0, _
                                lngRetByteSize _
                                )

                        Case Else
                    End Select
                End If
            Next i
        End If

    End Function

    '==========================================================================
    ' 関数名:Eof関数
    ' 説  明:EOFの状態を返却する
    ' 呼  出:Eof()
    ' 引き数:なし
    ' 戻り値: 0:正常
    '       : 1:EOF
    '==========================================================================
    Function Eof() As Integer

        Eof = iEof

    End Function

End Class
以下、呼出のサンプルです。
「tbl_test1」の「test1code」と「tbl_test2」の「test1code」がリンクするものとします。
mdb名:test.mdb

テーブル名:tbl_test1
フィールド1:test1code int

テーブル名:tbl_test2
フィールド1:test1code int
フィールド2:test2code int
フィールド3:test2char char(10)
コード:
Dim DbCn                    As *DBConnection
Dim DbRs1                   As *DBRecordSet
Dim DbRs2                   As *DBRecordSet
Dim lngtest1code            As long
DIm lngtest2code            As long
Dim strtest2char            As string

'DBクラス初期化
DbCn = New DBConnection
DbRs1 = New DBRecordSet
DbRs2 = New DBRecordSet

'mdbへ接続する
DbCn->ConOpen("DRIVER=Microsoft Access Driver(*.mdb);UID=;PWD=;DBQ=D:\test.mdb")

'tbl_test1をオープンする
DbRs1->RecOpen("SELECT * FROM tbl_test1", DbCn)

While (DbRs1->Eof() = 0)

    lngtest1code = DbRs1->GetValueDouble("test1code")

    'test1codeを条件にtbl_test2をオープンする
    DbRs2->RecOpen("SELECT test2code, test2char FROM tbl_test2 WHERE test1code = " & Str$(lngtest1code), DbCn)

    If (DbRs2->Eof() = 0) Then
        lngtest2code = DbRs2->GetValueDouble("test2code")
        strtest2char = DbRs2->GetValueString("test2char")
    End If

    'tbl_test2をクローズする
    DbRs2->RecClose()

    'tbl_test1の次レコードを検索
    DbRs1->MoveNext()
Wend

'tbl_test1をクローズする
DbRs1->RecClose()

'mdbから切断する
DbCn->ConClose()

'クラス解放
Delete DbRs1
Delete DbRs2


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年9月21日(水) 11:36 
オフライン

登録日時: 2005年8月23日(火) 00:15
記事: 161
住所: 沖縄県
hanchanさんのソースをベースにSQLBindCol関数と[AB4.1]で警告を減らしたモジュールを投稿します。
SQLBindCol関数を使用している為、データアクセスに関する互換性はほぼ無いと考えて下さい。
  1. 今回のモジュールは3部構成になっています。
  2. 定義部分
  3. コネクション部分
  4. レコードセット部分
  5. 呼び出し方法はhanchanさんと同じなので掲載なし
  6. データの参照は 3 で定義した変数をそのまま使用
1.定義部分
コード:
'=====================================================================
' 名  称:データベースアクセスクラス
' 概  要:ODBC接続にてデータベースにアクセスする
' 参照元:hanchan さん
'=====================================================================

'== 定数 =============================================================
Const DBCLASS_OK            =   0   As Integer  'クラス正常終了
Const DBCLASS_NG            =  -1   As Integer  'クラス異常終了

Const SQL_NTS               =  -3   'Multi Use
'=====================================================================

'== API用定数 ========================================================
'データソース用定数
Const ODBC_ADD_DSN          =   1   As Integer  'ユーザーデータソースの追加
Const ODBC_CONFIG_DSN       =   2   As Integer  'ユーザーデータソースの編集
Const ODBC_REMOVE_DSN       =   3   As Integer  'ユーザーデータソースの削除
Const ODBC_ADD_SYS_DSN      =   4   As Integer  'システム データ ソースを追加
Const ODBC_CONFIG_SYS_DSN   =   5   As Integer  'システム データ ソースを設定 (編集)
Const ODBC_REMOVE_SYS_DSN   =   6   As Integer  'システム データ ソースを削除

'トランザクション用定数
Const SQL_COMMIT            =   0   As Integer  'トランザクション-コミット
Const SQL_ROLLBACK          =   1   As Integer  'トランザクション-ロールバック

'返却値用定数
Const SQL_SUCCESS           =   0   As Integer  'SQL結果-正常終了
Const SQL_SUCCESS_WITH_INFO =   1   As Integer  'SQL結果-正常終了(警告あり)
Const SQL_ERROR             =  -1   As Integer  'SQL結果-異常終了
Const SQL_INVALID_HANDLE    =  -2   As Integer  'SQL結果-不正ハンドル返却
Const SQL_NO_DATA_FOUND     = 100   As Integer  'SQL結果-データなし

'SQLAllocHandle、SQLFreeHandle用定数
Const SQL_NULL_HANDLE       =   0   As Integer  'SQL_HANDLE_ENV時パラメータ
Const SQL_HANDLE_ENV        =   1   As Integer  '環境ハンドル
Const SQL_HANDLE_DBC        =   2   As Integer  '接続ハンドル
Const SQL_HANDLE_STMT       =   3   As Integer  'ステートメントハンドル
Const SQL_HANDLE_DESC       =   4   As Integer

'SQLSetConnectOption用定数
Const SQL_AUTOCOMMIT        = 102   As Integer  'AutoCommitオプション
Const SQL_AUTOCOMMIT_OFF    =   0   As Integer  'AutoCommitOff
Const SQL_AUTOCOMMIT_ON     =   1   As Integer  'AutoCommitOn

'Fetch用定数
Const SQL_FETCH_NEXT        =   1   As Integer
Const SQL_FETCH_FIRST       =   2   As Integer
Const SQL_FETCH_LAST        =   3   As Integer
Const SQL_FETCH_PRIOR       =   4   As Integer
Const SQL_FETCH_ABSOLUTE    =   5   As Integer
Const SQL_FETCH_RELATIVE    =   6   As Integer

'環境定数
Const SQL_ATTR_CURSOR_TYPE  =   6   As Integer
Const SQL_ATTR_ROW_NUMBER   =  14   As Integer
Const SQL_ATTR_ODBC_VERSION = 200   As Integer
Const SQL_OV_ODBC3          =   3   As Integer

'行操作・結果定数
Const SQL_ROW_SUCCESS       =   0   As Integer
Const SQL_ROW_DELETED       =   1   As Integer
Const SQL_ROW_UPDATED       =   2   As Integer
Const SQL_ROW_NOROW         =   3   As Integer
Const SQL_ROW_ADDED         =   4   As Integer
Const SQL_ROW_ERROR         =   5   As Integer
Const SQL_ROW_SUCCESS_WITH_INFO = 6 As Integer
Const SQL_ROW_PROCEED       =   0   As Integer
Const SQL_ROW_IGNORE        =   1   As Integer
Const SQL_NO_DATA           = 100   As Integer

'サイズ用定数
Const BRWS_LEN              = 1000  As Integer
Const SQL_LEN               = 1000  As Integer

'接続用定数
Const SQL_DRIVER_COMPLETE_REQUIRED = 3  As Integer

'型宣言用定数
Const SQL_UNKNOWN_TYPE      =  0    As Integer
Const SQL_CHAR              =  1    As Integer
Const SQL_NUMERIC           =  2    As Integer
Const SQL_DECIMAL           =  3    As Integer
Const SQL_INTEGER           =  4    As Integer
Const SQL_SMALLINT          =  5    As Integer
Const SQL_FLOAT             =  6    As Integer
Const SQL_REAL              =  7    As Integer
Const SQL_DOUBLE            =  8    As Integer
Const SQL_DATETIME          =  9    As Integer
Const SQL_VARCHAR           = 12    As Integer
Const SQL_TYPE_DATE         = 91    As Integer
Const SQL_TYPE_TIMESTAMP    = 93    As Integer
Const SQL_INTERVAL          = 10    As Integer
Const SQL_TIME              = 10    As Integer
Const SQL_TIMESTAMP         = 11    As Integer
Const SQL_LONGVARCHAR       = -1    As Integer
Const SQL_BINARY            = -2    As Integer
Const SQL_VARBINARY         = -3    As Integer
Const SQL_LONGVARBINARY     = -4    As Integer
Const SQL_BIGINT            = -5    As Integer
Const SQL_TINYINT           = -6    As Integer
Const SQL_BIT               = -7    As Integer
Const SQL_GUID              = -11   As Integer

Const SQL_C_BINARY          =   SQL_BINARY
Const SQL_C_BIT             =   SQL_BIT
Const SQL_C_CHAR            =   SQL_CHAR
Const SQL_C_DOUBLE          =   SQL_DOUBLE
Const SQL_C_FLOAT           =   SQL_REAL
Const SQL_C_LONG            =   SQL_INTEGER
Const SQL_C_SHORT           =   SQL_SMALLINT
Const SQL_C_TYPE_DATE       =   SQL_TYPE_DATE
Const SQL_C_TYPE_TIME       =   SQL_TYPE_DATE
Const SQL_C_TYPE_TIMESTAMP  =   SQL_TYPE_TIMESTAMP
Const SQL_C_TINYINT         =   SQL_TINYINT
'=====================================================================
'Declare Function SQLGetStmtAttr Lib "odbc32" (hstmt As HANDLE,Attribute As Long,ValuePtr As VoidPtr,StringLength As Long,StringLengthPtr As WordPtr) As Integer
'Declare Function SQLSetStmtAttr Lib "odbc32" (hstmt As HANDLE,Attribute As Long,ValuePtr As VoidPtr,StringLength As Long) As Integer

'Declare Function SQLAllocHandle Lib "odbc32" (HandleType As Integer,InputHandle As HANDLE,OutputHandlePtr As DWordPtr) As Integer
'SQLAllocHandle - ハンドルの割り当て
Declare Function SQLAllocHandle _
    Lib "odbc32.dll" ( _
    ByVal handletype As Integer, _
    ByVal inputhandle As HANDLE, _
    ByRef outputhandle As HANDLE _
    ) As Integer

'Declare Function SQLFreeHandle Lib "odbc32" (HandleType As Integer,Handle As HANDLE) As Integer
'SQLFreeHandle - ハンドル・リソースの解放
Declare Function SQLFreeHandle _
    Lib "odbc32.dll" ( _
    ByVal handletype As Integer, _
    ByVal handle As HANDLE _
    ) As Integer

'Declare Function SQLDisconnect Lib "odbc32" (hdbc As HANDLE) As Integer
'SQLDisconnect - データ・ソースからの切断
Declare Function SQLDisconnect _
    Lib "odbc32.dll" ( _
    ByVal hdbc As HANDLE _
    ) As Integer

'SQLPrepare - ステートメントの準備
Declare Function SQLPrepare _
    Lib "odbc32.dll" ( _
    ByVal hstmt As HANDLE, _
    ByVal stmt As String, _
    ByVal stmtlen As Long _
    ) As Integer

'SQLExecute - ステートメントの実行
Declare Function SQLExecute _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long _
    ) As Integer

'Declare Function SQLNumResultCols Lib "odbc32" (hstmt As HANDLE,ColumnCountPtr As WordPtr) As Integer
'SQLNumResultCols - 結果の列数の入手
Declare Function SQLNumResultCols _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long, _
    ByRef nCou As Integer _
    ) As Integer

'SQLDescribeCol - 列の属性セットの戻し
Declare Function SQLDescribeCol _
    Lib "odbc32.dll" ( _
    ByVal hstmt As Long, _
    ByVal colno As Integer, _
    ByVal colname As String, _
    ByVal namelen As Integer, _
    ByRef pnamelen As Integer, _
    ByRef datatype As Integer, _
    ByRef colsize As Long, _
    ByRef pdecimal As Integer, _
    ByRef pnull As Integer _
    ) As Integer

'Declare Function SQLFetch Lib "odbc32" (hstmt As HANDLE) As Integer
'SQLFetch - 次の行の取り出し
Declare Function SQLFetch _
    Lib "odbc32.dll" ( _
    ByVal hstmt As HANDLE _
    ) As Integer

'Declare Function SQLFetchScroll Lib "odbc32" (hstmt As HANDLE,FetchOrientation As Integer,FetchOffset As Long) As Integer
'SQLFetchScroll - 行セットの取り出しと、バインドされたすべての列のデータの戻し
Declare Function SQLFetchScroll _
    Lib "odbc32" ( _
    hstmt As HANDLE, _
    FetchOrientation As Integer, _
    FetchOffset As Long _
    ) As Integer

'Declare Function SQLGetData Lib "odbc32" (hstmt As HANDLE,icol As Integer,fCType As Integer,rgbValue As BytePtr,cbValueMax As Long,pcbValue As DWordPtr) As Integer

'SQLGetData - 列からのデータの入手
Declare Function SQLGetData _
    Lib "odbc32.dll" ( _
    ByVal hstmt As HANDLE, _
    ByVal colno As Integer, _
    ByVal targettype As Integer, _
    ByVal pVal As VoidPtr, _
    ByVal buflen As Long, _
    ByRef ind As Long _
    ) As Integer

'Declare Function SQLDriverConnect Lib "odbc32" (hdbc As HANDLE,hwnd As Word,szCSIn As BytePtr,cbCSIn As Integer,szCSOut As BytePtr,cbCSMax As Integer,cbCSOut As WordPtr,fDrvrComp As Integer) As Integer

'SQLDriverConnect - データ・ソースへの接続
Declare Function SQLDriverConnect _
    Lib "odbc32.dll" ( _
    hdbc As HANDLE, _
    hwnd As Word, _
    szCSIn As BytePtr, _
    cbCSIn As Integer, _
    szCSOut As BytePtr, _
    cbCSMax As Integer, _
    cbCSOut As WordPtr, _
    fDrvrComp As Integer _
    ) As Integer

'SQLSetConnectOption - 接続オプションの設定
Declare Function SQLSetConnectOption _
    Lib "odbc32.dll" ( _
    ByVal hDBc As HANDLE, _
    ByVal fOption As Integer, _
    ByVal vParam As Long
    ) As Integer

'Declare Function SQLSetEnvAttr Lib "odbc32" (henv As HANDLE,Attribute As Long,ValuePtr As VoidPtr,StringLength As Long) As Integer
'SQLSetEnvAttr - 環境属性を設定
Declare Function SQLSetEnvAttr _
    Lib "odbc32.dll" ( _
    henv            As HANDLE, _
    Attribute       As Long, _
    ValuePtr        As Long, _
    StringLength    As Long _
    ) As Integer                    'Matea

'SQLTransact - トランザクション管理
Declare Function SQLTransact _
    Lib "odbc32.dll" ( _
    ByVal hEnv As HANDLE, _
    ByVal hDBc As HANDLE, _
    ByVal fnType As Integer _
    ) As Integer

'SQLConfigDataSource - ODBC への登録・編集・削除
Declare Function SQLConfigDataSource _
    Lib "odbccp32.dll" ( _
    ByVal hwndParent As Long, _
    ByVal fRequest As Long, _
    ByVal lpszDriver As String, _
    ByVal lpszAttributes As String _
    ) As Long

'****** 列をバインド ******
Declare Function SQLExecDirect Lib "odbc32" ( _
    hstmt As HANDLE, _
    szSqlStr As BytePtr, _
    cbSqlStr As Long _
    ) As Integer

'****** 列をバインド ******
Declare Function SQLBindCol Lib "odbc32.dll" ( _
    ByVal hstmt      As HANDLE, _
    ByVal icol       As Long, _
    ByVal fCType     As Long, _
    ByRef rgbValue   As Any, _
    ByVal cbValueMax As Long, _
    ByRef pcbValue   As Long _
    ) As Long

'=====================================================================
'   定義の終了
'=====================================================================
2.コネクション部分
コード:
'******************************************************************************
' 名  称:コネクション接続クラス
' 概  要:ODBC接続にてデータベースに接続を行う
'******************************************************************************
Class DBConnection
    henv                    As  HANDLE      '環境ハンドル
    hdbc                    As  HANDLE      '接続ハンドル
    hstmt                   As  HANDLE      'ステートメントハンドル
    iConStrOut              As  Long
    sTableName              As  String
Public
    '==========================================================================
    ' 関数名:コンストラクタ関数
    ' 説  明:コンストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub DBConnection()
        '変数初期化
        hdbc  = 0
        henv  = 0
        hstmt = 0
        '
        SQLAllocHandle( SQL_HANDLE_ENV, 0   , henv )                    '環境ハンドル取得
        SQLSetEnvAttr ( henv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0 )  '環境属性設定【ODBC3.0】
        SQLAllocHandle( SQL_HANDLE_DBC, henv, hdbc )                    '接続ハンドル取得
    End Sub
    '==========================================================================
    ' 関数名:デストラクタ関数
    ' 説  明:デストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub ~DBConnection()
        DBCFreeHandle()                                 'ステートメントハンドルを解放する
        SQLDisconnect( hdbc )                           '接続を切断する
        SQLFreeHandle( SQL_HANDLE_DBC, hdbc )           '接続ハンドルを解放する
        SQLFreeHandle( SQL_HANDLE_ENV, henv )           '環境ハンドルを解放する
    End Sub
    '==========================================================================
    ' 関数名:ConOpen関数
    ' 説  明:データベースへ接続を行う
    ' 呼  出:ConOpen(psDataSource As String)
    ' 引き数:psDataSource    As String    (I/ ) ODBCデータソース
    ' 戻り値:接続状況
    '==========================================================================
    Function ConOpen(psDataSource As String)
        Dim sConStrOut[BRWS_LEN-1]  As  Byte
        Dim ret                     As  Integer

        'データベースへ接続する
        ret = SQLDriverConnect( hdbc, 0, psDataSource, SQL_NTS, sConStrOut, BRWS_LEN, VarPtr(iConStrOut), SQL_DRIVER_COMPLETE_REQUIRED )
        If (ret = SQL_NO_DATA_FOUND) THen
            ConOpen = DBCLASS_NG                        '返却値(NG)
        Else
            ConOpen = DBCLASS_OK                        '返却値(OK)
        End If
    End Function
    '==========================================================================
    ' 関数名:ConClose関数
    ' 説  明:データベースを切断する
    ' 呼  出:ConClose()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub ConClose()
        DBCFreeHandle()                                 'ステートメントハンドルを解放する
        SQLDisconnect(hdbc)                             'データベースを切断する
    End Sub

    '==========================================================================
    ' 関数名:Execute関数
    ' 説  明:SQL文を実行する
    ' 呼  出:Execute(psSqlStr As String)
    ' 引き数:psSqlStr        As String    (I/ ) SQL文格納用
    ' 戻り値:なし
    '==========================================================================
    Sub Execute(psSqlStr As String)
        DBCFreeHandle()                                 'ステートメントハンドルを解放する
        SQLAllocHandle( SQL_HANDLE_STMT, hdbc, hstmt )  'ステートメントハンドルを取得する
        SQLPrepare( hstmt, psSqlStr, Len(psSqlStr) )    'SQL文を設定する
        SQLExecute( hstmt )                             'SQL文を実行する
    End Sub
    '==========================================================================
    ' 関数名:BeginTransact関数
    ' 説  明:AutoCommitを解除し、明示的にトランザクションを行う
    ' 呼  出:BeginTransact()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub BeginTransact()
        SQLSetConnectOption( hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF ) 'AutoCommitをOFFにする
    End Sub
    '==========================================================================
    ' 関数名:Commit関数
    ' 説  明:Commitを行い、AutoCommitをONにする
    ' 呼  出:Commit()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub Commit()
        SQLTransact( henv, hdbc, SQL_COMMIT )                           'トランザクションをCommitする
        SQLSetConnectOption( hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON )  'AutoCommitをONにする
    End Sub
    '==========================================================================
    ' 関数名:RollBack関数
    ' 説  明:RollBackを行い、AutoCommitをONにする
    ' 呼  出:RollBack()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub RollBack()
        SQLTransact( henv, hdbc, SQL_ROLLBACK )                         'トランザクションをRollBackする
        SQLSetConnectOption( hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON )  'AutoCommitをONにする
    End Sub
    '==========================================================================
    ' 関数名:GetEnvHandle関数
    ' 説  明:接続されたコネクションの環境ハンドルを返却する
    ' 呼  出:GetEnvHandle()
    ' 引き数:なし
    ' 戻り値:環境ハンドル
    '==========================================================================
    Function GetEnvHandle() As HANDLE
        GetEnvHandle = henv
    End Function
    '==========================================================================
    ' 関数名:GetDbcHandle関数
    ' 説  明:接続されたコネクションの接続ハンドルを返却する
    ' 呼  出:GetDbcHandle()
    ' 引き数:なし
    ' 戻り値:接続ハンドル
    '==========================================================================
    Function GetDbcHandle() As HANDLE
        GetDbcHandle = hdbc
    End Function
'--------- おまけ -------------------------------------------------------------
    '==========================================================================
    ' 関数名:Compact関数
    ' 説  明:AccessMDBファイルの最適化を行う
    ' 呼  出:Compact(psFilePath As String)
    ' 引き数:psFilePath        As String      (I/ ) MDBファイルパス
    ' 戻り値:なし
    '==========================================================================
'   Function Compact(psFilePath As String) As Integer
'
'       'AccessMDBの最適化を行う
'       SQLConfigDataSource( _
'           0, _
'           ODBC_CONFIG_DSN, _
'           "Microsoft Access Driver (*.MDB)", _
'           "DSN=MS Access Database;COMPACT_DB=" & psFilePath & " " & psFilePath _
'           )
'
'   End Function
    '==========================================================================
    ' 内部関数
    '==========================================================================
Private
    '------------------------------------------------------
    ' ハンドルの開放
    '------------------------------------------------------
    Sub DBCFreeHandle()
        If hstmt = 0 Then Exit Sub              'ステートメントハンドルが設定されているか?
        SQLFreeHandle( SQL_HANDLE_STMT, hstmt ) 'ステートメントハンドルを解放
        hstmt = 0                               'ステートメントハンドルを初期化
    End Sub
End Class
'******************************************************************************
'******************************************************************************
3.レコードセット部分
コード:
'******************************************************************************
' 名  称:レコードセットクラス
' 概  要:テーブルのレコードセットを取得する(疑似?)
'******************************************************************************
' ●印の場所を、手書きで作成する事で、データの呼び出し性能が数倍高速化します
'   ただし、DBのテーブル定義順を知っている必要があります。
'   (現在:この定義を自動生成するツールを作成予定です)
'******************************************************************************
'※変数名に!が使用できる用なので、VB風にコーディングしました!!!
Dim DbRs!JUMINCD        As  DWord       '●
Dim DbRs!KARA           As  Word        '●
Dim DbRs!MADE           As  Word        '●
Dim DbRs!SEX            As  Word        '●
Dim DbRs!FAMILY         As  DWord       '●
Dim DbRs!KANA[60+1]     As  Byte        '●
Dim DbRs!NAME[80+1]     As  Byte        '●
Dim DbRs!YUBIN          As  DWord       '●
Dim DbRs!ADR1[80+1]     As  Byte        '●
Dim DbRs!ADR2[60+1]     As  Byte        '●
Dim DbRs!TEL[29]        As  Byte        '●
Dim DbRs!BIRTHDAY       As  DWord       '●
Dim xTest               As  Long        '●
'******************************************************************************
Class DBRecordSet
    henv                As  HANDLE      '環境ハンドル
    hdbc                As  HANDLE      '接続ハンドル
    hstmt               As  HANDLE      'ステートメントハンドル
    iEof                As  Integer
Public
    '==========================================================================
    ' 関数名:コンストラクタ関数
    ' 説  明:コンストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub DBRecordSet()
        '変数初期化
        hdbc  = 0
        henv  = 0
        hstmt = 0
        iEof  = 0
    End Sub
    '==========================================================================
    ' 関数名:デストラクタ関数
    ' 説  明:デストラクタ
    ' 呼  出:なし
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub ~DBRecordSet()
        DBRFreeHandle()                     'ステートメントハンドルを解放する
    End Sub
    '==========================================================================
    ' 関数名:RecOpen関数
    ' 説  明:SQLをオープンする
    ' 呼  出:RecOpen(psSqlStr As String, pDbCn As *DBConnection)
    ' 引き数:psSqlStr         As String        (I/ ) SQL文格納用
    '         pDbCn            As *DBConnection (I/ ) コネクション接続クラス
    ' 戻り値:なし
    '==========================================================================
    Sub RecOpen(psSqlStr As String, pDbCn As *DBConnection)
        Dim ret              As Integer

        henv = pDbCn->GetEnvHandle()        '環境ハンドルを取得する
        hdbc = pDbCn->GetDbcHandle()        '接続ハンドルを取得する
        DBRFreeHandle()                     'ステートメントハンドルを解放する
        '
        SQLAllocHandle( SQL_HANDLE_STMT, hdbc, hstmt )  'ステートメントハンドルを取得する
        SQLExecDirect( hstmt, psSqlStr, SQL_NTS  )      'SQL文を実行する
        '---------------------------------------------
        ' データ受取領域の設定
        '---------------------------------------------
'(説明) SQLBindCol( ハンドル, データの順番, データ型    , 受取データ   ,列バイト, 戻バイト)'●
        SQLBindCol( hstmt, 1 As Integer, SQL_C_LONG  , DbRs!JUMINCD ,     0, xTest )'●
        SQLBindCol( hstmt, 2 As Integer, SQL_C_SHORT , DbRs!KARA    ,     0, xTest )'●
        SQLBindCol( hstmt, 3 As Integer, SQL_C_SHORT , DbRs!MADE    ,     0, xTest )'●
        SQLBindCol( hstmt, 4 As Integer, SQL_C_SHORT , DbRs!SEX     ,     0, xTest )'●
        SQLBindCol( hstmt, 5 As Integer, SQL_C_LONG  , DbRs!FAMILY  ,     0, xTest )'●
        SQLBindCol( hstmt, 6 As Integer, SQL_C_CHAR  , DbRs!KANA    ,    61, xTest )'●
        SQLBindCol( hstmt, 7 As Integer, SQL_C_CHAR  , DbRs!NAME    ,    81, xTest )'●
        SQLBindCol( hstmt, 8 As Integer, SQL_C_LONG  , DbRs!YUBIN   ,     0, xTest )'●
        SQLBindCol( hstmt, 9 As Integer, SQL_C_CHAR  , DbRs!ADR1    ,    81, xTest )'●
        SQLBindCol( hstmt,10 As Integer, SQL_C_CHAR  , DbRs!ADR2    ,    61, xTest )'●
        SQLBindCol( hstmt,11 As Integer, SQL_C_CHAR  , DbRs!TEL     ,    29, xTest )'●
        SQLBindCol( hstmt,12 As Integer, SQL_C_LONG  , DbRs!BIRTHDAY,     0, xTest )'●
        '
        MoveFirst()
    End Sub
    '==========================================================================
    ' 関数名:RecClose関数
    ' 説  明:SQLをクローズする
    ' 呼  出:RecClose()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub RecClose()
        DBRFreeHandle()                     'ステートメントハンドルを解放する
    End Sub
    '==========================================================================
    ' 関数名:MoveFirst関数
    ' 説  明:先頭行へカーソルを移動する
    ' 呼  出:MoveFirst()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub MoveFirst()
        SQLFetchScroll( hstmt, SQL_FETCH_FIRST, 0 )         '先頭行へ移動する
        SQLFetch( hstmt )
    End Sub
    '==========================================================================
    ' 関数名:MoveNext関数
    ' 説  明:次行へカーソルを移動する
    ' 呼  出:MoveNext()
    ' 引き数:なし
    ' 戻り値:なし
    '==========================================================================
    Sub MoveNext()
        Dim ret              As Integer
        ret = SQLFetchScroll( hstmt, SQL_FETCH_NEXT, 0 )    '次行へ移動する
        iEof = (ret = SQL_NO_DATA) As Integer
    End Sub
    '==========================================================================
    ' 関数名:Eof関数
    ' 説  明:EOFの状態を返却する
    ' 呼  出:Eof()
    ' 引き数:なし
    ' 戻り値: 0:正常
    '       :-1:EOF       ( 1 から -1 へ変更 )
    '==========================================================================
    Function Eof() As Integer
        Eof = iEof
    End Function
    '==========================================================================
    ' 内部関数
    '==========================================================================
Private
    '------------------------------------------------------
    ' ハンドルの開放
    '------------------------------------------------------
    Sub DBRFreeHandle()
        If hstmt Then               'ステートメントハンドルが設定されているか判定する
            SQLFreeHandle( SQL_HANDLE_STMT, hstmt ) 'ステートメントハンドルを解放する
            hstmt = 0
        End If
    End Sub
End Class
'******************************************************************************
'
'******************************************************************************


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke