SAK 図書館
VB ADO + SQL 応用編 (その四) ADO ストアドファンクション - CreateParameter
基本的に Oracle、SQL-Sever、MDB で共通です。 ■ストアドファンクション / ストアドプロシジャ 例えば、Oracle に次のようなストアドファンクションがあるとします。 (VB で言うユーザ関数のようなもの) これを ADO で呼びたし、戻り値を得ることが可能です。 /* ======================================================================== テンポラリテーブル番号取得 Copyright (C) 1999-2000 Y.SAK ======================================================================== */ create or replace function sak.GetTmp return varchar2 is todt char(10); dt char(10); no number(9); tmp varchar2(20); cid integer; begin todt := to_char(sysdate, 'yyyy.mm.dd'); select 日付 into dt from sak.TMPm; if todt > dt then update sak.TMPm set 番号 = 0, 日付 = todt; end if; update sak.TMPm set 番号 = 番号 + 1; select 番号 into no from sak.TMPm; commit; tmp := 'tmp' || ltrim(to_char(no, '000000')); begin cid := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(cid, 'drop table ' || tmp, dbms_sql.v7); DBMS_SQL.CLOSE_CURSOR(cid); exception when OTHERS then DBMS_SQL.CLOSE_CURSOR(cid); end; return tmp; end; / ■テンポラリテーブル取得ストアドファンクション呼び出し(一時テーブル、一時表) ▼フォームグローバル宣言で必要な数のテンポラリテーブル取得変数を宣言し ます。ワークt と言うのがそれです。 Const TMP_SCM = "sak." Const GetTmp = TMP_SCM & "GetTmp" Dim ワークt As String ▼フォーム初期化ルーチンで、実際に使用可能なテンポラリテーブル名を取得 しています。複数個必要な場合は、s3cn_cmd.Execute からを複数書きます。 ストアドファンクションの実行は、Microsoft が Oracle 用に提供している ドライバでないと動作しない。 Private Sub Form_Load() Dim s3cn_cmd Dim p0, p1 Dim rcd As String '** テンポラリテーブル名取得 set s3cn_cmd = CreateObject ("ADODB.Command") s3cn_cmd.ActiveConnection = s3cn_ado s3cn_cmd.commandtext = GetTmp s3cn_cmd.commandtype = 4 set p0 = s3cn_cmd.createParameter("rcd", 200, 4, 9) 'set p1 = s3cn_cmd.createParameter("p1", 200, 1, 20, "") s3cn_cmd.Parameters.Append p0 's3cn_cmd.Parameters.Append p1 'p1.Value = "a001" s3cn_cmd.execute rcd = p0.value ワークt = TMP_SCM & rcd ▼フォーム破棄ルーチンで、使用したテンポラリテーブルを削除します。 テスト時、残しておきたいなら、drop table の行を注釈にします。 Private Sub Form_Unload(Cancel As Integer) '** テンポラリテーブル削除 if ワークt <> "" then On Local Error Resume Next s3cn_ado.Execute "drop table " & ワークt On Local Error GoTo 0 end if ■補足 ・Oracle の場合、Oracle のネイティブ ODBC ドライバでは、ストアドファン クションが正常に呼び出せません。さんざん悩んだので要注意です。 Microsoft ODBC for Oracle ドライバでストアドファンクションは呼び出し て下さい。 ■CommandType s3cn_cmd.CommandType = 1 'adCmdText SQL s3cn_cmd.CommandType = 2 'adCmdTable テーブル s3cn_cmd.CommandType = 512 'adCmdTableDirect テーブル s3cn_cmd.CommandType = 4 'adCmdStoredProc ストアドプロシジャ s3cn_cmd.CommandType = 8 'adCmdUnknown 不明(デフォルト) s3cn_cmd.CommandType = 256 'adCmdFile 永続化 Recordset s3cn_cmd.CommandType = ? 'adExecuteNoRecords 行を返さないコマンド ■VB ADO + SQL 応用編資料
■VB RDO + SQL 応用編資料
■VB oo4o + SQL 応用編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料