SQL Pass−Through Technology 関数の解説
作成 I.Tsuzuki 2001.2.25
ODBC接続等により外部データベースに接続した際に使われる
SQL Pass−Through Technology
関数の解説です。
注 一部、的確な日本語でない部分、不正確な個所、誤りがあるかもしれません。 お気づきの点はご連絡願います。
なおこれらの関数を実際に使われる場合は、必ずVisual
Foxproの正規ヘルプまたはドキュメントで確認を願います。
このドキュメントを参考したことにより使用者に損害が発生しても制作者及びこのホームページ管理者は一切の責任を負いませんのでこの条項をご確認のうえ、ご利用願います。
Task | 関数 | 目的 |
接続の操作 | SQLCONNECT() | データソースとの接続の確立 |
SQLSTRINGCONNECT() | データソースとの接続の確立 | |
SQLDISCONNECT() | ODBCデータソースとの接続の切断 | |
SQL文の実行と操作 | SQLCANCEL() | 実行中のSQLクエリーのキャンセル |
SQLEXEC() | SQL文の送信 | |
SQLMORERESULT() | 結果セットが複数返る場合に結果セット(カーソル)を逐次返す。 | |
SQLPREPARE() | SQLEXEC()を実行するためのSQL文の定義 (パラメータクエリで使用する) |
|
SQLCOMMIT() | SQLトランザクションの確定 | |
SQLROLLBACK() | SQLトランザクションの取り消し | |
データソース情報の取得 | SQLCOLUMNS() | テーブルのカラム情報を取得する |
SQLTABLES() | テーブルの名前を取得する | |
コネクションのプロパティ設定 | SQLGETPROP() | アクティブな接続のプロパティ値を取得する |
SQLSETPROP() | アクティブな接続のプロパティ値を設定する |
データソースとの接続の確立
書式
nConnectionHandle = SQLCONNECT('DataSourceName','cUserID','cPassword')
DataSourceName ODBCのデータソース名
cUserID ODBCのログオンユーザー名
cPassword ログオンパスワード
戻り値 Numeric
正の値(0以外) 接続成功
-2 接続失敗
example
gnConnHandle=SQLCONNECT('MyFoxSQLNT', 'sa', 'password')
IF gnConnHandle <= 0
= MESSAGEBOX('Cannot make connection', 16, 'SQL Connect Error')
ELSE
= MESSAGEBOX('Connection made', 48, 'SQL Connect Message)
= SQLDISCONNECT(gnConnHandle)
ENDIF
先頭へ戻る
connection string によるデータソースとの接続の確立
書式
nConnectionHandle =SQLSTRINGCONNECT([cConnectString])
cConnectionStribg ODBCドライバに要求される
Connection string
詳しくはODBCドライバのドキュメント参照
戻り値 Numeric
正の値(0以外) 接続成功
-2 接続失敗
example
STORE SQLSTRINGCONNECT('dsn=MyFoxSQLNT;uid=sa;pwd=FOXPRO'); TO gnConnHandle
IF gnConnHandle < 0
= MESSAGEBOX('Cannot make connection',
16, 'SQL Connect Error')
ELSE
= MESSAGEBOX('Connection made', 48,
'SQL Connect Message')
= SQLDISCONNECT(gnConnHandle)
ENDIF
ODBCデータソースとの接続の切断
書式
SQLDISCONNECT(nConnectionHandle)
nConnectionHandle SQLConnectで取得したアクティブなコネクションハンドル
戻り値 Numeric
1 切断成功
-1 コネクションレベルエラー
-2 環境レベルエラー
実行中のSQL文のキャンセル
書式
SQLCANCEL(nConnectionHandle)
nConnectionHandle SQLConnectで取得したアクティブなコネクションハンドル
戻り値 Numeric
1 成功
-1 コネクションレベルエラー
-2 環境レベルエラー
example
= SQLSETPROP(gnConnHandle, 'asynchronous',
.T.) && To stop SQLEXEC( )
= SQLEXEC(gnConnHandle, 'SELECT * FROM
authors')
= SQLCANCEL(gnConnHandle) && Wrong select statement, cancel
SQLCANCEL( ) は、’asynchronous’モードでの SQLCOLUMNS( ), SQLEXEC( ), SQLMORERESULTS( ),SQLTABLES( ) の実行をキャンセルする。
SQL文の実行
書式
SQLEXEC(nConnectionHandle , [cSQLCommand,
[CursorName]])
nConnectionHandle SQLConnectで取得したアクティブなコネクションハンドル
cSQLCommand SQL文(文字列)
CursorNmae 結果セットを格納されるカーソル
戻り値 Numeric
1 成功
0 実行中
-1 コネクションレベルエラー
example
= SQLSETPROP(gnConnHandle, 'asynchronous',
.F.)
= SQLEXEC(gnConnHandle, 'SELECT * FROM authors', 'MyCursor')
”SELECT * FROM authors” のSQLクエリーの結果が MyCursorにはいる
カーソルを指定しなかった場合は、”SQLresult"カーソルが自動的に作られる。
複数のSQL文の実行 複数のSQL文を実行させる場合は、SQL文をセミコロン ; でつなぐ。
= SQLEXEC(gnConnHandle, 'SELECT * FROM authors ; SELECT
* FROM amaster', 'MyCursor')
このとき結果セット 'MyCursor' , 'MyCursor1'が作られる
*注 現在、PostgrSQL に対しては SELECT文の複数実行はできません。(原因不明 最初のSQL文のみ実行されます)
SELECT文以外のINSERT、UPDATEは複数実行可能です。
実際にアプリケーションに組み込む場合は、十分な検証を行ってください。
MS-SQL Server 2000 、 Sybase SQL
Anywhere Studio 7.0 では正常に実行されるようです。
パラメータクエリ
先頭に?マークのついたパラメータにより、パラメータ付のSQL文を送信することができる
cCountry = 'Japan'
SQLEXEC(1,'SELECT * FROM customer WHERE
customer.country = ?cCountry')
結果セットが複数返る場合に結果セット(カーソル)を逐次返す (non BatchMode)
書式
SQLMORERESULTS(nConnectionHandle)
nConnectionHandle SQLConnectで取得したアクティブなコネクションハンドル
戻り値 Numeric
2 すべての結果セットを取得済み
1 SQLを実行中
0 結果セットが準備できていない
-1 コネクションレベルエラー
-2 環境レベルエラー
example
= SQLSETPROP(gnConnHandle, 'BatchMode', .F.)
&& Individual result sets
= SQLEXEC(gnConnHandle, 'SELECT * FROM
authors;
SELECT * FROM titles')
= SQLMORERES(gnConnHandle) && First result set
= SQLMORERES(gnConnHandle) && Second result set
SQLMORERESULT()を実行するためには Batchmodeを
.F. に設定します
上の例では2つのSELECT文を実行しているので2つの結果セットが返ります。
最初のSQLMORERES
ULT()で1つ目の結果セットが返り、
2番目のSQLMORERES
ULT()で2つ目の結果セットが返ります。
SQLMORERESULT()が2を返すまでSQLMORERESULT()をcallすべきである
先頭へ戻る
SQLEXEC()を実行するためのSQL文の定義 (パラメータクエリで使用する)
書式
SQLPREPARE(nConnectionHandle, cSQLCommand,
[CursorName])
nConnectionHandle SQLConnectで取得したアクティブなコネクションハンドル
cSQLCommand SQL文(文字列)
CursorNmae 結果セットを格納されるカーソル
戻り値 Numeric
1 成功
0 実行中
-1 コネクションレベルエラー
example
gcAuthor = 'Smith'
= SQLPREPARE(gnConnHandle, 'SELECT * FROM authors;
WHERE au_lname = ?gcAuthor')
= SQLEXEC(gnConnHandle)
...
gcAuthor = 'Jones'
= SQLEXEC(gnConnHandle)
SQLトランザクションの確定
書式
SQLCOMMIT(nConnectionHandle)
nConnectionHandle SQLConnectで取得したアクティブなコネクションハンドル
戻り値 Numeric
1 成功
-1 エラー エラーの場合は、AERROR( )
を使用してCommitできなかった理由を調べる
example
= SQLSETPROP(gnConnHandle, 'Transactions', 2) && Manual transactions
= SQLEXEC(gnConnHandle, "INSERT INTO authors (au_id, au_lname);
VALUES ('aupoe', 'Poe')") && Modify the authors table
= SQLCOMMIT(gnConnHandle) && Commit the changes
トランザクションプロパティが2(Manual)の場合に有効
カレントSQLトランザクションの変更の取り消し
書式
SQLCROLLBACK(nConnectionHandle)
nConnectionHandle SQLConnectで取得したアクティブなコネクションハンドル
戻り値 Numeric
1 成功
-1 エラー エラーの場合は、AERROR( )
を使用してCommitできなかった理由を調べる
example
= SQLSETPROP(gnConnHandle, 'Transactions', 2) && manual
= SQLEXEC(gnConnHandle, "INSERT INTO authors (au_id, au_lname);
VALUES ('aupoe', 'Poe')")
= SQLROLLBACK(gnConnHandle)
トランザクションプロパティが2(Manual)の場合に有効
指定したテーブルのカラム情報を返す (xBASEの LIst Structure コマンドと同等)
書式
SQLCOLUMNS(nConnectionHandle, TableName ,
[, "FOXPRO" | "NATIVE"]
,Cursorname )
nConnectionHandle アクティブなコネクションハンドル
TableName テーブル名
"FOXPRO" | "NATIVE" OXPRO形式か、データソースのネイティブ形式で表示するかの指定
Cursorname 結果セットがはいるカーソル名
戻り値 Numeric
1 成功
0 実行中
-1 コネクションレベルエラー
-2 環境レベルエラー
example
SQLCOLUMNS(gnConnHandle, 'authors' ,'FOXPRO', 'MyCursor')
SELECT MyCursor
BROWSE
USE
'authors' TABALE のカラム構造が、結果セット 'MyCursor'にはいる。
データソースに含まれるテーブルの名前を取得する
書式
SQLTABLES(nConnectionHandle [, cTableTypes]
[, cCursorName])
nConnectionHandle アクティブなコネクションハンドル
cTableType 'TABLE,'
'VIEW,' 'SYSTEM TABLE,'
cCursorName 結果セットがはいるカーソル名
戻り値
1 成功
0 実行中
-1 コネクションレベルエラー
-2 環境レベルエラー
example
SQLCOLUMNS(gnConnHandle, 'TABLE', 'MyCursor')
SELECT MyCursor
BROWSE
USE
データソースに含まれるテーブル名リストが、結果セット 'MyCursor'にはいる。
アクティブな接続の現在のまたはデフォルトのプロパティ値を取得する
書式
SQLGETPROP(nConnectionHandle, cSetting)
nConnectionHandle アクティブなコネクションハンドル
cSetting セッティング文字列
戻り値 Character Numeric Logical
アクティブな接続のプロパティ値を設定する
書式
SQLSETTPROP(nConnectionHandle, cSetting
, eExpression)
nConnectionHandle アクティブなコネクションハンドル
cSetting プロパティ
eExpression セットする値
戻り値 Character Numeric Logical
1 成功
-1 コネクションレベルエラー
-2 環境レベルエラー
SQLGETPROP() SQLSETPROP()で使用するproperty
重要と思われるものは太字で表示
Asychronos | Read-Write | 結果セットの戻り方 synchronously (同時性) false (.F.) default asynchronously(非同時性) true (.T.) |
Batchmode | Read-Write | SQLEXEC()の結果セットが一度の実行で返る true
.T. default 結果セットは個々のSQLMORERESULT()の実行で返る false .F. |
ConnectString | Read-Only | ログインのConnectString |
ConnectTimeout | Read-Write | コネクションタイムアウトエラーが返るまでの時間(秒) 0〜600 0 コネクションタイムアウトエラーは返らない 15 デフォルト値 |
ConnectBusy | Read-Only | shared connection が busy の時 true .T. その他の場合 false .F. |
DataSource | Read-Write | ODBC.INI ファイルのデータソース名 |
DispLogin | Read-Write | ODBCログインダイアログボックスの表示の有無の設定 1 or DB_PROMPTCOMPLETE (from FOXPRO.H) default 接続情報が失われた場合のみダイアログボックスを表示する 2 or DB_PROMPTALWAYS (from FOXPRO.H). ダイアログボックスを表示する 3 or DB_PROMPTNEVER (from FOXPRO.H). ダイアログボックスを表示しない |
DispWarings | Read-Write | エラーメッセージを表示する true .T. 表示しない false .F. (default) |
IdleTimeout | Read-Write | 指定された時間、idletime が続くとコネクションはdeactivateされる default 0 |
ODBChdbc | Read-Only | |
ODBChstmt | Read-Only | |
PacketSize | Read-Write | ネットワークパケットサイズ default 4096bytes(4K) |
Password | Read-Only | コネクションパスワード |
QueryTimeout | Read-Write | default 0 |
Transactions | Read-Write | トランザクションプロセスの指定 1 or DB_TRANSAUTO (from FOXPRO.H). default トランザクション処理は自動的に行われる 2 or DB_TRANSMANUAL (from FOXPRO.H) トランザクション処理はSQLCOMMIT()、SQLROLLBACK()によって手動で行う |
UserID | Read-Only | ユーザーID |
WaitTime | Read-Write | SQL文の実行が完了してからVFPがチェックするまでの時間(ミリ秒) default 100 milisecond |
以上