4D v16

SQLクエリの結果を配列に受け取る

ホーム

 
4D v16
SQLクエリの結果を配列に受け取る

SQLクエリの結果を配列に受け取る  


 

 

SQLクエリの引数に (年をハードコードするのではなく) 年を格納した変数を渡し、1960年以降に公開された映画の情報を取得する方法を見てみましょう。取得する情報はタイトルの他、公開年、ディレクター、メディア、販売チケット数です。取得した情報は配列やリストボックスに受け取ります。

  • 4Dコードは以下のようになります:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     C_LONGINT($MovieYear)
     
     REDUCE SELECTION([MOVIES];0)
     $MovieYear:=1960
     QUERY([MOVIES];[MOVIES]Year_of_Movie>=$MovieYear)
     SELECTION TO ARRAY([MOVIES]Year_of_Movie;aMovieYear;[MOVIES]Title;aTitles;[MOVIES]Director;aDirectors;[MOVIES]Media;aMedias;[MOVIES]Sold_Tickets;aSoldTickets)
      ` 情報を表示するためにリストボックスの残りの列を初期化
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
  • SQLコードでは上記のクエリが以下のようになります:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     C_LONGINT($MovieYear)
     
     $MovieYear:=1960
     Begin SQL
        SELECT Year_of_Movie, Title, Director, Media, Sold_Tickets
        FROM MOVIES
        WHERE Year_of_Movie >= :$MovieYear
        INTO :aMovieYear, :aTitles, :aDirectors, :aMedias, :aSoldTickets;
     End SQL
      ` 情報を表示するためにリストボックスの残りの列を初期化
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))


ご覧頂いたとおり:

  • 変数 ($MovieYear) を引数としてSQLクエリに渡すことができます。値を受け取る際と同じ記法です。
  • SQLクエリ結果は配列aMovieYear、aTitles、aDirectories、aMedias、そしてaSoldTicketsに格納されます。この結果はメインウィンドウ中で二つの方法で表示されます:
    • グループ化されたスクロールエリア:

    • 同じ名称の列名を持つリストボックス:

  • 汎用SQLコマンドの場合:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     C_LONGINT($MovieYear)
     C_TEXT($tQueryTxt)
     
     REDUCE SELECTION([MOVIES];0)
     $MovieYear:=1960
     SQL LOGIN(SQL_INTERNAL;"";"")
     $tQueryTxt:=""
     $tQueryTxt:=$tQueryTxt+"SELECT Year_of_Movie, Title, Director, Media, Sold_Tickets"
     $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
     $tQueryTxt:=$tQueryTxt+" WHERE Year_of_Movie >= :$MovieYear"
     SQL EXECUTE($tQueryTxt;aMovieYear;aTitles;aDirectors;aMedias;aSoldTickets)
     SQL LOAD RECORD(SQL all records)
     SQL LOGOUT
      ` 情報を表示するためにリストボックスの残りの列を初期化
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
  • QUERY BY SQLコマンドの場合:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     C_LONGINT($MovieYear)
     
     REDUCE SELECTION([MOVIES];0)
     $MovieYear:=1960
     QUERY BY SQL([MOVIES];"Year_of_Movie >= :$MovieYear")
     SELECTION TO ARRAY([MOVIES]Year_of_Movie;aMovieYear;[MOVIES]Title;aTitles;[MOVIES]Director;aDirectors;[MOVIES]Media;aMedias;[MOVIES]Sold_Tickets;aSoldTickets)
      ` 情報を表示するためにリストボックスの残りの列を初期化
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))
  • SQLのEXECUTE IMMEDIATEコマンドを使用した場合:

     ARRAY LONGINT(aSoldTickets;0)
     ARRAY INTEGER(aMovieYear;0)
     ARRAY TEXT(aTitles;0)
     ARRAY TEXT(aDirectors;0)
     ARRAY TEXT(aMedias;0)
     C_LONGINT($MovieYear)
     C_TEXT($tQueryTxt)
     
     REDUCE SELECTION([MOVIES];0)
     $MovieYear:=1960
     $tQueryTxt:=""
     $tQueryTxt:=$tQueryTxt+"SELECT Year_of_Movie, Title, Director, Media, Sold_Tickets"
     $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
     $tQueryTxt:=$tQueryTxt+" WHERE Year_of_Movie >= :$MovieYear"
     $tQueryTxt:=$tQueryTxt+" INTO :aMovieYear, :aTitles, :aDirectors, :aMedias, :aSoldTickets;"
     Begin SQL
        EXECUTE IMMEDIATE :$tQueryTxt;
     End SQL
      ` 情報を表示するためにリストボックスの残りの列を初期化
     ARRAY LONGINT(aNrActors;Size of array(aMovieYear))

これらをテストするには、4D SQL Code Samplesデータベースを起動してメインウィンドウを表示させます。クエリモードを選択してSQL query results in arraysボタンをクリックします。

 
プロパティ 

プロダクト: 4D
テーマ: チュートリアル

 
履歴 

 
ARTICLE USAGE

SQLリファレンス ( 4D v16)