Pueden ser varias causas, por ejemplo:
Conversión con StrToFloat
Código Delphi
[-]dm.FDQuery1.ParamByName('val2').asfloat := strtofloat(edit2.text);
En España usamos coma, y MySQL espera punto.
Servidor MySQL remoto (timeout / hosting)
Como dices que está en
hosting web, muy típico, el servidor corta conexiones si tardan demasiado, hay error en la query, paquete inválido...
Campo incompatible en MySQL
Revisa la tabla platillos, posibles problemas: precio es DECIMAL y le mandas mal formato, disponible no es INTEGER (ej: TINYINT o BOOL)o categoriaid no existe o FK inválida
Valores inválidos (muy común)
strtoint(edit3.text)
strtoint(edit4.text)
Si el usuario deja vacío entonces ocurre una excepción.
Conexión cerrada previamente
Antes del ExecSQL, revisa:
Código Delphi
[-]if not dm.FDConnection1.Connected then
dm.FDConnection1.Connected := True;
Prueba rápida:
Código Delphi
[-]dm.FDQuery1.SQL.Text :=
'INSERT INTO platillos (nombre, precio, disponible, categoriaid) VALUES ("TEST", 10.5, 1, 1)';
dm.FDQuery1.ExecSQL;
Si esto funciona entonces el problema está en los datos (seguro el float).