高度 - 間違った使い方?
SEQ | データ1 | データ2 |
000001 | 2 | 9 |
000002 | 1 | 10 |
000003 | 3 | 8 |
000004 | 4 | 12 |
SEQ | 今一番大きいデータ1 | データ2 |
000001 | 2 | 9 |
000002 | 2 | 10 |
000003 | 3 | 8 |
000004 | 4 | 12 |
SEQ | 今一番大きいデータ1 | データ2 |
000003 | 3 | 8 |
000001 | 3 | 9 |
000002 | 3 | 10 |
000004 | 4 | 12 |
ACCESS: ACCESSの「テーブルのリンク」でODBCを選択すると、
ODBC経由で他のデータベースと接続できます。
リンク設定したテーブルは、ACCESSのテーブルの様に扱えます。
VB ⇔ ACCESS ⇔ (MySQL、SQLServer、ORACLE、・・・)
※ 例えば、MySQL上の商品マスタとSQLサーバー上の買い物データファイル
をリンク設定すると、
「SELECT F.*
, M.*
FROM
買い物データファイル F
left join 商品マスタ M on F.商品コード =
M.商品コード」
のSQL文を実行できる。
※ データの移行作業時によく使います。
SQLServer(MSDE): 「sp_addlinkedserver」を使うことで、他のデータベースと接続できます。
下の例は、コマンドプロンプトからosqlを起動させて行います。
※ 動く保証はありません。(前は動いていたんですが・・・)
[対 Oracleの例]
sp_addlinkedserver 'OrDB' , 'Oracle'
, 'MSDAORA' , 'ORACLEDB'
sp_addlinkedsrvlogin 'OrDB' , false
, 'sa' , 'SCOTT' , 'TIGER'
SELECT
* FROM OrDB..SCOTT.EMP
[対
MySQLの例]
sp_addlinkedserver
'mysqlDB', 'MySQL', 'MSDASQL', Null, Null, 'Driver= {MySQL ODBC 3.51 Driver}'
SELECT * FROM OPENQUERY
(mysqlDB,'SELECT * FROM MYSQL.ACCOUNT')
[リンクサーバーの削除]
sp_dropserver OrDB,
droplogins
※ 実務で使用したことがありませんので、用途はわかりません。
SQLサーバーのテーブルにトリガーでも仕掛けて、
他のデータベースにも「追加・更新・削除」するとか・・・。
[動的なストアド
Oracleの例]
ストアドプロシージャと言えば開発時に作成し、コンパイル済みであるかのようですが、
プログラム実行時に作成する事もできます。
'---------------------------------------------------------------------
Set OraSession =
CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase =
OraSession.OpenDatabase("SNAME", "USER/PASS", 0&)
strSql = "" '←ここにストアドのソースをセットする。
' CREATE PROCEDUREの記述は書かずに、変数宣言からはじめます。
OraDatabase.dbexecutesql( strSql )
'---------------------------------------------------------------------
上記のプログラムでストアドが実行されます。
ストアドの結果を得たい場合は、パラメータを設定します。
[簡単な例]
Dim objSess as object
Dim objConn as object
Dim strSql As
String
Dim lngRet as Long
Dim Serv As String , User
As String , Pass As String , Work
As String
Serv =
""
User =
"SYSTEM"
Pass = "MANAGER"
Set objSess =
CreateObject("OracleInProcServer.XOraSession")
Work = User & "/" & Pass
Set
objConn = objSess.DbOpenDatabase(Serv, Work,
0&)
With
objConn
.Parameters.Add
"initAllData", 0,
2
.Parameters("initAllData").ServerType
= ORATYPE_CHAR
strSql =
""
strSql = strSql & "
DECLARE initAllData
CHAR(40);"
strSql = strSql
& " BEGIN"
strSql =
strSql & " :initAllData :=
'TAKO8';"
strSql = strSql
& " END;"
lngRet =
.dbexecutesql(strSql)
Debug.Print
.Parameters("initAllData").Value
End With
この結果、「TAKO8」が表示されます。
(c)2006 はじめたばかりのデータベース rAreSoft All Rights Reserved.