SQLコマンドの概要

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11.3 (Modified)


バージョン11以降、4Dは統合されたSQLカーネルを導入しています。他の4Dアプリケーションまたはサードパーティーアプリケーションが (4D OBDC driver経由で) クエリできるSQLサーバも含まれています。

4DのSQLカーネルへのアクセス方法、SQLサーバの設定、SQLクエリで使用できるコマンドとキーワードについての詳細は、4D SQL Referenceマニュアルを参照してください。

"SQL"テーマでは、4DでSQLの使用に関連する多様な4Dコマンドをグループ化しています:

・SQLサーバのコントロール: START SQL SERVERSTOP SQL SERVER

・統合されたSQLカーネルへのダイレクトアクセス: SET FIELD VALUE NULL, Is field value Null, QUERY BY SQL

・外部または内部データソースへの接続管理 (SQL パススルー): GET DATA SOURCE LIST, Get current data source, SQL LOGIN, SQL LOGOUT

・直接のSQL接続またはODBC接続のフレームワークにおけるデータ処理を行うハイレベルコマンド: Begin SQL, End SQL, SQL CANCEL LOAD, SQL LOAD RECORD, SQL EXECUTE, SQL EXPORT, SQL End of selection, SQL SET OPTION, SQL SET PARAMETER, SQL IMPORT, SQL GET LAST ERROR, SQL GET OPTION.

ハイレベルSQLコマンドの動作

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

・これらのコマンドを4Dの内部SQLカーネル、外部へのダイレクトまたはODBC経由の接続で使用できます。SQL LOGINコマンドで接続方法を指定できます。

・接続のスコープはプロセスです。同時に複数の接続を実行したい場合、新たに開始したプロセスでSQL LOGINを実行します。

同じ接続で複数のSELECTリクエストを実行するにはSQL CANCEL LOADコマンドを使用します。

ON ERR CALLコマンドを使用して、ハイレベルSQLコマンドを実行している間に発生したODBCエラーを捕らえることができます。付加情報を得るにはSQL GET LAST ERRORコマンドを使用します。

標準ODBCのサポート

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

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

Note: 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

SQLリクエストで4D式を参照する

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

この例では、リクエスト実行時に引数が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)

4Dで値を受け取る

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

SQL EXECUTE コマンドの追加の引数を使用する (推奨)

・SQLクエリのINTO節を使用する (特別な場合のために予約されたソリューション)


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次