4D v16.3

SQLコマンドの概要

ホーム

 
4D v16.3
SQL
SQLコマンドの概要

SQLコマンドの概要  


 

 

4D には SQL カーネルが統合されています。さらに 4D には SQL サーバー機能が含まれていて、他の4Dアプリケーションや (4D ODBC Driver 経由で) サードパーティアプリケーションからクエリを実行できます。

4DのSQL関連ドキュメントは大きく二つあります:

  • 4D SQL リファレンスガイド (SQLリファレンス): このマニュアルでは4DのSQLカーネルにアクセスするための様々な方法、SQLサーバー設定、およびSQLクエリで使用できるコマンドやキーワード (例えば SELECTUPDATE) について説明しています。4Dに実装されたSQLランゲージについて知りたい場合はこのマニュアルを参照してください。

4Dの組み込みSQLコマンドは、接頭辞"SQL" で始まります。そして、以下の原則が実装されます:

  • 特に断らない限り、これらのコマンドを4Dの内部SQLカーネル、外部へのダイレクトまたはODBC経由の接続で使用できます。SQL LOGINコマンドで接続方法を指定できます。
  • 接続のスコープはプロセスです。同時に複数の接続を実行したい場合、新たに開始したプロセスでSQL LOGINを実行します。
  • ON ERR CALLコマンドを使用して、ハイレベルSQLコマンドを実行している間に発生したODBCエラーを捕らえることができます。追加情報を得るにはSQL GET LAST ERRORコマンドを使用します。

ODBC (Open DataBase Connectivity) 標準は、標準化された機能のライブラリを定義します。これらの機能により4Dのようなアプリケーションは、SQLランゲージでODBC互換のデータ管理シ ステム(データベース、スプレッドシート、他の4Dのアプリケーションなど) へアクセスできます。

注: 4DではIMPORT ODBCEXPORT ODBCコマンドを使用して、あるいはデザインモードで手動により、ODBCソースからデータを読み込んだり、ODBCソースへデータを書き出したりすることが可能です。詳細については、4D Design Referenceマニュアルを参照してください。

: 4DのハイレベルSQLコマンドを使用して、ODBCデータソースと通信する単純な4Dアプリケーションを実装できます。もしアプリケーションでODBC標準の広範なサポートが必要である場合、4DのローレベルODBCプラグインである、4D ODBC Proをお使いください。

以下は4Dが自動的に設定する4DのタイプとSQLデータタイプの対応リストです:

4DのタイプSQLのタイプ
C_STRINGSQL_C_CHAR
C_TEXTSQL_C_CHAR
C_REALSQL_C_DOUBLE
C_DATESQL_C_TYPE_DATE
C_TIMESQL_C_TYPE_TIME
C_BOOLEANSQL_C_BIT
C_INTEGERSQL_C_SHORT
C_LONGINTSQL_C_SLONG
C_BLOBSQL_C_BINARY
C_PICTURESQL_C_BINARY
C_GRAPHSQL_C_BINARY

注: オブジェクト型データ(C_OBJECT)は4DのSQLカーネルではサポートされていません。

SQLリクエストに4D式 (変数、配列、フィールド、ポインタ、有効な式) を挿入するには2通りの方法があります。一つは直接割り当てる方法。もう一つはSQL SET PARAMTERで引数を設定する方法です。

直接の割り当ては2つの方法で実行できます:

  • リクエストのテキスト中で、4Dオブジェクト名を<<>>文字の間に挿入する
  • 参照をコロンの後に記述する
 SQL EXECUTE("INSERT INTO emp (empnum,ename) VALUES (<<vEmpnum>>,<<vEname>>)")
 SQL EXECUTE("SELECT age FROM People WHERE name= :vName")

Note: コンパイルモードでは、($で始まる) ローカル変数への参照を使用することはできません。

この例では、リクエスト実行時に引数が4DのvEmpnum、vEnameおよびvNametheの現在値に置き換えられます。このソリューションは4Dフィールドと配列でも動作します。

この簡単に使用できるシンタックスには、SQL標準に対応していない、また出力引数の使用を許可しないといった欠点もあります。これを修正するには、SQL SET PARAMETERコマンドを使用します。このコマンドを使用して使用モード (入力と出力) とともに、リクエストに各4Dオブジェクトを統合できます。作り出されたシンタックスは標準のものです。詳細については、SQL SET PARAMETERコマンドの説明を参照してください。

1. この例題では4D配列を直接関連付けてSQLクエリを実行します:

 ARRAY TEXT(MyTextArray;10)
 ARRAY LONGINT(MyLongintArray;10)
 
 For(vCounter;1;Size of array(MyTextArray))
    MyTextArray{vCounter}:="Text"+String(vCounter)
    MyLongintArray{vCounter}:=vCounter
 End for
 SQL LOGIN("mysql";"root";"")
 SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<MyTextArray>>, <<MyLongintArray>>)"
 SQL EXECUTE(SQLStmt)


2. この例題では4Dフィールドを直接関連付けて、SQLクエリを実行します:

 ALL RECORDS([Table_2])
 SQL LOGIN("mysql";"root";"")
 SQLStmt:="insert into app_testTable (alpha_field, longint_field) VALUES (<<[Table_2]Field1>"+">,<<[Table_2]Field2>>)"
 SQL EXECUTE(SQLStmt)

3. この例題では逆参照されたポインタを使用して直接変数を渡して、SQLクエリを実行します:

 C_LONGINT($vLong)
 C_POINTER($vPointer)
 $vLong:=1
 $vPointer:=->$vLong
 SQL LOGIN("mysql";"root";"")
 SQLStmt:="SELECT Col1 FROM TEST WHERE Col1=:$vPointer"
 SQL EXECUTE(SQLStmt)

コンパイルモードでは特定の条件下において、SQL文の中でローカル変数参照を使用できます:

  • Begin SQL / End SQLブロック内でローカル変数を使用できます。ただしEXECUTE IMMEDIATEコマンドは除きます;
  • 変数を (参照ではなく) 引数内で直接使用する場合、SQL EXECUTEコマンドでローカル変数を使用できます。
    例えば以下のコードはコンパイルモードで動作します:
     SQL EXECUTE("select * from t1 into :$myvar")

    以下のコードはコンパイルモードでエラーを生成します:
     C_TEXT(tRequest)
     tRequest:="select * from t1 into :$myvar"
     SQL EXECUTE(tRequest)

4Dランゲージ中でSQLクエリの値を受け取る方法は2つあります:

  • SQL EXECUTE コマンドの追加の引数を使用する (推奨)
  • SQLクエリのINTO節を使用する (特別な場合のために予約されたソリューション)

SQLクエリーの結果を直接配列タイプのリストボックスに表示することができます。これによりSQLクエリーの結果を素早く見る方法が提供されま す。SELECTタイプのクエリーのみを使用できます。このメカニズムは外部SQLデータベースには使用できません。

この機能は以下の原則に基づいて動作します:

  • クエリーの結果を受け取るリストボックスを作成します。リストボックスのデータソースは配列に設定しなければなりません。
  • SELECTタイプのSQLクエリーを実行し、結果をリストボックスに割り当てた変数に受け取ります。Begin SQL/End SQL キーワードを使用できます (4Dランゲージリファレンス参照)。
  • ユーザーはリストボックス列をソートしたり、更新したりできます。
  • SELECTクエリーを実行するたびに、リストボックス列はリセットされます (複数のSELECTクエリーを実行して、リストボックスに行を追加することはできません)。   
  • SQL クエリーの結果受け取る列数と同じ数の列をリストボックスに用意することを推奨します。SELECTクエリーにより返される列数よりもリストボックスの列数が少ない場合、自動で列が追加されます。SELECTクエリーの結果よりも多い列数がある場合、不必要な列は自動で隠されます。
    注: 自動で追加された列は、 配列型の ダイナミック変数 にバインドされます。これらのダイナミック配列はフォームが閉じられるまで存在します。またダイナミック変数は各ヘッダー用にも作成されます。LISTBOX GET ARRAYSコマンドが呼び出されると、arrColVars引数にはダイナミック配列へのポインターが、arrHeaderVars引数にはダイナミックヘッダー変数へのポインターが返されます。例えば5つの列が追加されると、5番目の列の配列名はsql_column5でヘッダー名はsql_header5となります。
  • インタープリターモードでは、SQLクエリーにより返されたデータに基づき、自動でリストボックスの既存の配列が型変更される場合があります。


PEOPLEテーブルのすべてのフィールドのデータを取得し、vlistboxという変数名のリストボックスに結果を表示します。これを行うためのメソッドは以下の通りです:

 Begin SQL
    SELECT * FROM PEOPLE INTO <<vlistbox>>
 End SQL



参照 

EXPORT ODBC
IMPORT ODBC

 
プロパティ 

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

 
履歴 

 
ARTICLE USAGE

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