4D v16.3

SQL EXECUTE

ホーム

 
4D v16.3
SQL
SQL EXECUTE

SQL EXECUTE 


 

SQL EXECUTE ( sqlStatement {; boundObj}{; boundObj2 ; ... ; boundObjN} )  
引数   説明
sqlStatement  テキスト in 実行するSQLコマンド
boundObj  変数, フィールド in 結果を受け取る(必要に応じて)

説明   

SQL EXECUTEコマンドを使用してSQLコマンドを実行し、結果を4Dのオブジェクト(配列、変数またはフィールド) にバインドできます。

このコマンドを実行するためには、カレントプロセスで有効な接続が指定されていなければなりません。

sqlStatement引数には実行するSQLコマンドが含まれています。boundObjはその結果を受け取ります。変数は列の順番でバインドされ、残っているリモートカラムは放棄されます。

boundObjに4Dのフィールドが渡された場合、コマンドはレコードを作成し自動的に保存します。4Dのフィールドは同じテーブルに属していなければなりません (テーブル1のフィールドとテーブル2のフィールドを同じ呼び出しで渡すことはできません)。複数のテーブルのフィールドが渡された場合、エラーが発生します。

警告: boundObj 引数に4Dのフィールドを渡してSELECTコマンドを実行した場合、常にリモート4Dのデータが更新されます。リモートソースのデータをローカルに取得したい場合、まずデータを配列に取得してINSERTコマンドを呼び出します (例題 6参照)。

boundObj引数に4Dの配列を渡す場合、コマンドを呼び出す前に、その配列を宣言することをお勧めします。これは処理されるデータのタイプを検証するためです。必要に応じて配列は自動でサイズ変更されます。

4D変数の場合、1度に1つのレコードが取得されます。他の結果は無視されます。

注: SQLクエリで4D式を参照することについての詳細は、SQLコマンドの概要を参照してください。

以下の例で、データソースにあるempテーブルのenameカラムを取得します。その結果は、4Dのフィールドの[Employee]Nameに保存されます。4Dのレコードは自動的に作成されます。

 SQLStmt:="SELECT ename FROM emp"
 SQL EXECUTE(SQLStmt;[Employee]Name)
 SQL LOAD RECORD(SQL all records)

レコードの作成を確認するには、トランザクションにコードを投入します。そしてオペレーションが十分であると判明した場合のみ、それを認証します。

 SQL LOGIN("mysql";"root";"")
 SQLStmt:="SELECT alpha_field FROM app_testTable"
 START TRANSACTION
 SQL EXECUTE(SQLStmt;[Table2]Field1)
 While(Not(SQL End selection))
    SQL LOAD RECORD
    ... `ここにデータを検証するコードを設定します。
 End while
 VALIDATE TRANSACTION `トランザクションの検証

以下の例では、データソースにあるempテーブルのenameカラムを取得します。その結果は、aName 配列に保存されます。1度に10個のレコードを取って来ます。

 ARRAY TEXT(aName;20)
 SQLStmt:="SELECT ename FROM emp"
 SQL EXECUTE(SQLStmt;aName)
 While(Not(SQL End selection))
    SQL LOAD RECORD(10)
 End while

以下の例では、データソースの特定のID(WHERE節) のためのempテーブルのenameとジョブを取得します。その結果は、4Dの変数、vNamevJobに保存されます。最初のレコードだけを取って来ます。

 SQLStmt:="SELECT ename, job FROM emp WHERE id = 3"
 SQL EXECUTE(SQLStmt;vName;vJob)
 SQL LOAD RECORD

以下の例では、データソースにあるTestテーブルのBlob_Fieldカラムを取得します。その結果は、BLOB変数に保存されます。そして、レコードがロードされる度に、そのBLOB変数の値を更新します。

 C_BLOB(MyBlob)
 SQL LOGIN
 SQL EXECUTE("SELECT Champ_Blob FROM Test";MonBlob)
 While(Not(SQL End selection))
  `結果を調査します。
    SQL LOAD RECORD
  `呼び出す度にMyBlobの値を更新します。
 End while

リモートの4D Serverデータベースからデータをローカルに取得します:

  // リモートデータベースにログインする
 SQL LOGIN("IP:192.168.18.15:19812";"user";"password";*)
 If(OK=1)
  // これ以降、すべてのSQL命令はリモートデータベース上で実行されます
    C_TEXT($LastName_value// 検索文で使用される4D変数
    ARRAY TEXT($a_LastName;0) // LastNameデータの一時的な格納場所
    ARRAY TEXT($a_FirstName;0) // FirstNameデータの一時的な格納場所
    C_BOOLEAN($UseSQL//データをローカルに格納する方法の選択
 
    $LastName_value:="Smith" // 4D変数の初期化
 
  // SQLリクエスト中の一番目のプレースホルダー "?" に、4Dの$LastName_value変数を割り当てる
    SQL SET PARAMETER($LastName_value;SQL param in)
 
  // リモートのPERSONSテーブルから"LastName = Smith"であるLastNameとFirstNameカラムの
  // 値を取得、$a_LastName と $a_FirstName 配列に格納する
    SQL EXECUTE("SELECT LastName, FirstName FROM PERSONS WHERE LastName = ?";$a_LastName;$a_FirstName)
    If(Not(SQL End selection)) // レコードが検索されたら
 
       SQL LOAD RECORD(SQL all records// 全レコードをロードする
       SQL CANCEL LOAD
 
       $UseSQL:=True // データを統合する方法を選択
 
       If($UseSQL// SQLリクエストを使用する場合
          SQL LOGOUT // リモートデータベースからログアウトする
          SQL LOGIN(SQL_INTERNAL;"user";"password") // ローカルデータベースにログイン
  // これ以降、すべてのSQL命令はローカルデータベース上で実行されます
  // $a_LastName と $a_FirstName 配列中のデータをローカルのPERSONSテーブルに保存
          SQL EXECUTE("INSERT INTO PERSONS(LastName, FirstName) VALUES (:$a_LastName, :$a_FirstName);")
          SQL CANCEL LOAD
 
       Else // 4Dコマンドを使用する場合
 
          REDUCE SELECTION([PERSONS];0)
          ARRAY TO SELECTION($a_LastName;[PERSONS]LastName;$a_FirstName;[PERSONS]FirstName)
 
       End if
    End if
    SQL LOGOUT // 接続を閉じる
 End if

コマンドが正しく実行されると、OKシステム変数は1に、そうでなければ0に設定されます。



参照 

SQL LOAD RECORD

 
プロパティ 

プロダクト: 4D
テーマ: SQL
番号: 820

このコマンドはOKシステム変数を更新します

 
履歴 

初出: 4D 2004

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)