4D v16

SQLコードのエラー追跡とデバッグ

ホーム

 
4D v16
SQLコードのエラー追跡とデバッグ

SQLコードのエラー追跡とデバッグ  


 

 

4Dでは、コードをトレースしたり修正したりする二つの方法があります。_o_Duringを使用してトレースや修正を行うか、ON ERR CALLコマンドを呼び出してエラーをキャッチし、適切なアクションを行います。これらの方法を使用して、SQLコード中にある問題を解決することができます。
この例題では、わざと右側の括弧が抜けています。つまりHAVING SUM(Sold_Tickets <:$MinSoldTickets)となるべきところがHAVING SUM(Sold_Tickets <:$MinSoldTicketsとなっています。

 ARRAY LONGINT(aSoldTickets;0)
 ARRAY INTEGER(aMovieYear;0)
 C_LONGINT($MovieYear;$MinSoldTickets)
 $MovieYear:=1979
 $MinSoldTickets:=10000000
 
 Begin SQL
    SELECT Year_of_Movie, SUM(Sold_Tickets)
    FROM MOVIES
    WHERE Year_of_Movie >= :$MovieYear
    GROUP BY Year_of_Movie
    HAVING SUM(Sold_Tickets < :$MinSoldTickets
    ORDER BY 1
    INTO :aMovieYear,  :aSoldTickets;
 End SQL


以下のウィンドウのとおり、アプリケーションはエラーを検知し、Afterシンタックスエラーウィンドウを開いて、エラーに関する詳細な情報とエラーの発生場所を提供します。編集ボタンをクリックすると、エラーが発生したメソッドが開きます。

エラーがもっと複雑な場合、アプリケーションはスタック情報を含むさらなる情報を提供します。この情報は詳細ボタンをクリックすると表示されます。
これをテストするには、4D SQL Code Samplesデータベースのメインウィンドウで、Debugging SQL code ボタンをクリックします。

SQLエラーを追跡するもう一つの方法は、ON ERR CALLコマンドを使用することです。
この例題ではSQLコードで発生するエラーをキャッチするために、SQL_Error_Handlerメソッドをエラーハンドラとして使用します。

 ARRAY LONGINT(aSoldTickets;0)
 ARRAY INTEGER(aMovieYear;0)
 C_LONGINT($MovieYear;$MinSoldTickets;MySQL_Error)
 $MovieYear:=1979
 $MinSoldTickets:=10000000
 MySQL_Error:=0
 
  // エラーをキャッチするためにSQL_Error_Handlerメソッドをインストールする
 ON ERR CALL("SQL_Error_Handler")
 Begin SQL
    SELECT Year_of_Movie, SUM(Sold_Tickets)
    FROM MOVIES
    WHERE Year_of_Movie >= :$MovieYear
    GROUP BY Year_of_Movie
    HAVING SUM(Sold_Tickets < :$MinSoldTickets
    ORDER BY 1
    INTO :aMovieYear,  :aSoldTickets;
 End SQL
 &NBSP// SQL_Error_Handlerメソッドを無効にする
 ON ERR CALL("")
 If(MySQL_Error#0)
    ALERT("SQL Error number: "+String(MySQL_Error))
 End if

SQL_Error_Handlerメソッドは以下のようになります:

  `(P) SQL_Error_Handler
 MySQL_Error:=Error

これをテストするには、4D SQL Code Samplesデータベースのメインウィンドウで、Using ON ERR CALLボタンをクリックします。

 
プロパティ 

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

 
履歴 

 
ARTICLE USAGE

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