SQL Pass−Through Technology 関数の解説

作成 I.Tsuzuki  2001.2.25

ODBC接続等により外部データベースに接続した際に使われる SQL Pass−Through Technology 関数の解説です。

 一部、的確な日本語でない部分、不正確な個所、誤りがあるかもしれません。 お気づきの点はご連絡願います。
なおこれらの関数を実際に使われる場合は、必ずVisual Foxproの正規ヘルプまたはドキュメントで確認を願います。
このドキュメントを参考したことにより使用者に損害が発生しても制作者及びこのホームページ管理者は一切の責任を負いませんのでこの条項をご確認のうえ、ご利用願います。


SQL Pass-Through Technology 関数INDEX
Task 関数 目的
接続の操作 SQLCONNECT() データソースとの接続の確立
SQLSTRINGCONNECT() データソースとの接続の確立
SQLDISCONNECT() ODBCデータソースとの接続の切断
SQL文の実行と操作 SQLCANCEL() 実行中のSQLクエリーのキャンセル
SQLEXEC() SQL文の送信
SQLMORERESULT() 結果セットが複数返る場合に結果セット(カーソル)を逐次返す。
SQLPREPARE() SQLEXEC()を実行するためのSQL文の定義
(パラメータクエリで使用する)
SQLCOMMIT() SQLトランザクションの確定
SQLROLLBACK() SQLトランザクションの取り消し
データソース情報の取得 SQLCOLUMNS() テーブルのカラム情報を取得する
SQLTABLES() テーブルの名前を取得する
コネクションのプロパティ設定 SQLGETPROP() アクティブな接続のプロパティ値を取得する
SQLSETPROP() アクティブな接続のプロパティ値を設定する


SQLCONNECT()

データソースとの接続の確立

書式
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

先頭へ戻る

SQLSTRINGCONNECT()

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

先頭へ戻る

SQLDISCONNECT()

ODBCデータソースとの接続の切断

書式
   SQLDISCONNECT(nConnectionHandle)
      nConnectionHandle   SQLConnectで取得したアクティブなコネクションハンドル
戻り値 Numeric
   1    切断成功
   -1    コネクションレベルエラー
   -2    環境レベルエラー  

先頭へ戻る

SQLCANCEL()

実行中の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( ) の実行をキャンセルする。

先頭へ戻る

SQLEXEEC()

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')

先頭へ戻る

SQLMORERESULT()

結果セットが複数返る場合に結果セット(カーソル)を逐次返す (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つの結果セットが返ります。
 最初のSQLMORERESULT()で1つ目の結果セットが返り、
 2番目のSQLMORERESULT()で2つ目の結果セットが返ります。
 SQLMORERESULT()が2を返すまでSQLMORERESULT()をcallすべきである

先頭へ戻る

SQLPREPARE()

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)

先頭へ戻る

SQLCOMMIT()

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)の場合に有効    

先頭へ戻る

SQLROLLBACK()

カレント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)の場合に有効    

先頭へ戻る

SQLCOLUMNS()

指定したテーブルのカラム情報を返す  (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()

データソースに含まれるテーブルの名前を取得する

書式
   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()

アクティブな接続の現在のまたはデフォルトのプロパティ値を取得する

書式
   SQLGETPROP(nConnectionHandle, cSetting)
      nConnectionHandle       アクティブなコネクションハンドル
      cSetting               セッティング文字列

戻り値 Character Numeric Logical
   

先頭へ戻る


SQLSETPROP()

アクティブな接続のプロパティ値を設定する

書式
   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

先頭へ戻る

以上