Dans 4D, il existe deux principales manières de tracer et de déboguer votre code : soit utiliser le Débogueur pour tracer et corriger les erreurs, soit utiliser la commande pour intercepter et traiter les erreurs de façon appropriée.
Ces deux techniques peuvent être mises en oeuvre avec le code SQL.
Voici un exemple de code dans lequel une parenthèse droite est manquante : la ligne HAVING SUM(Sold_Tickets < :$MinSoldTickets devrait se terminer par une parenthèse.
TABLEAU ENTIER LONG(aSoldTickets;0)
TABLEAU ENTIER(aMovieYear;0)
C_ENTIER LONG($MovieYear;$MinSoldTickets;SQL_Error)
$MovieYear:=1979
$MinSoldTickets:=10000000
SQL_Error:=0
APPELER SUR ERREUR("SQL_Error_Handler")
Debut 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;
Fin SQL
Comme vous pouvez le constater dans la fenêtre ci-dessous, l'application détecte l'erreur et ouvre la Fenêtre d'erreur de syntaxe qui affiche des informations détaillées sur l'erreur et son emplacement. Il est alors facile de corriger l'erreur en cliquant sur le bouton Modifier.

Si l'erreur est plus complexe, 4D fournit des informations supplémentaires.
Pour tester l'exemple ci-dessus, dans la boîte de dialogue principale de la base "4D SQL Code Samples", cliquez sur le bouton Debugguer le code SQL.
La deuxième façon de tracer les erreurs SQL consiste à utiliser la commande .
Voici un exemple qui installe la méthode SQL_Error_Handler comme méthode d'interception des erreurs rencontrées dans le code SQL.
TABLEAU ENTIER LONG(aSoldTickets;0)
TABLEAU ENTIER(aMovieYear;0)
C_ENTIER LONG($MovieYear;$MinSoldTickets;SQL_Error)
$MovieYear:=1979
$MinSoldTickets:=10000000
SQL_Error:=0
APPELER SUR ERREUR("SQL_Error_Handler")
Debut 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;
Fin SQL
APPELER SUR ERREUR("")
Si(SQL_Error#0)
ALERTE("SQL Error number: "+Chaine(MySQL_Error))
Fin de si
La méthode SQL_Error_Handler contient le code suivant :
MySQL_Error:=Error
Pour tester l'exemple ci-dessus, dans la boîte de dialogue principale de la base "4D SQL Code Samples", cliquez sur le bouton Utiliser "Appeler sur erreur".