En 4D, hay dos posibilidades principales para la localización y corrección de su código: o bien utilizando el para localizar y corregir cualquier error o llamando al comando ON ERR CALL para capturar el error y tomar las medidas adecuadas. Podemos utilizar estas dos técnicas para resolver los problemas encontrados con el código SQL.
Este es un ejemplo donde falta un paréntesis intecionalmente: en lugar de HAVING SUM(Sold_Tickets <:$MinSoldTickets), tenemos 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
Como puede ver en la ventana inferior, la aplicación detecta el error y abre la
que ofrece información más detallada sobre el error y el lugar donde ocurrió. Es entonces fácil de corregir con sólo presionar el botón
Editar.
![](../../picture/148239/pict148239.es.png)
Si el error es más complejo, la aplicación ofrece más información incluyendo el contenido de la pila, que se puede ver presionando el botón Detalles.
Para probar el ejemplo anterior, en la ventana principal de la base "4D SQL Code Samples", presione el botón Depurar el código SQL.
La segunda posibilidad principal para el seguimiento de errores SQL utiliza el comando ON ERR CALL.
Este es un ejemplo que instala el método SQL_Error_Handler para detectar errores encontrados en el código SQL.
ARRAY LONGINT(aSoldTickets;0)
ARRAY INTEGER(aMovieYear;0)
C_LONGINT($MovieYear;$MinSoldTickets;MySQL_Error)
$MovieYear:=1979
$MinSoldTickets:=10000000
MySQL_Error:=0
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
ON ERR CALL("")
El método SQL_Error_Handler es el siguiente:
If(MySQL_Error#0)
ALERT("SQL Error number: "+String(MySQL_Error))
End if
Para probar el ejemplo anterior, en la ventana principal de de la base "4D SQL Code Samples" presione el botón
Using ON ERR CALL.