Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   error al agregar registro en mysql (https://www.clubdelphi.com/foros/showthread.php?t=98023)

OSITOdePELUCHE 01-04-2026 05:57:38

error al agregar registro en mysql
 
buen dia, al agregar registro me marca error mi base de datos la tengo remota en mi dominio web con el servicio de mysql
al ejecutar este codigo:

Código Delphi [-]
                  dm.FDQuery1.close;
                  dm.FDQuery1.SQL.Text := 'INSERT INTO platillos (nombre, precio, disponible, categoriaid) VALUES (:val1, :val2, :val3, :val4)';
                  dm.FDQuery1.ParamByName('val1').AsString  :=  edit1.text;
                  dm.FDQuery1.ParamByName('val2').asfloat   :=  strtofloat(edit2.text);
                  dm.FDQuery1.ParamByName('val3').AsInteger :=  strtoint(edit3.text);
                  dm.FDQuery1.ParamByName('val4').AsInteger :=  strtoint(edit4.text);
                  dm.FDQuery1.ExecSQL;


arroja este error:

[firedac][phys][mysql] lost connection to MySQL server during query

a alguien le a pasado algo similar? o alguien que me de luz sobre el tema ?

Casimiro Noteví 01-04-2026 09:47:33

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).

navbuoy 21-05-2026 22:21:59

Lo MÁS sospechoso aquí

Por experiencia con Delphi + FireDAC + MySQL:

sospechosos principales:
StrToFloat() por configuración regional
conexión MySQL dormida
charset utf8 roto
reutilizar FDQuery1 para todo

Son los clásicos de toda la vida con FireDAC.

strtofloat() puede generar problemas raros dependiendo de configuración regional.

codigo relevante cuando vayas a hacer el strtofloat:

Código Delphi [-]
var fs: TFormatSettings;

fs := TFormatSettings.Create;
fs.DecimalSeparator := '.';

StrToFloat(edit2.Text, fs);

delphi.com.ar 27-05-2026 19:07:12

Hola gente.

No coincido del todo con las respuestas anteriores, aunque posiblemente se deba a mi falta de experiencia específica con FireDAC.

El error lo está devolviendo MySQL, por lo que la instrucción al menos superó la etapa de parseo y llegó a ser procesada por el servidor.

Tengo un par de preguntas:
  • ¿Eres el único usuario ejecutando esa instrucción?
  • ¿Ese INSERT dispara triggers o algún proceso adicional?

Mi razonamiento va más por el lado de que FireDAC y la conexión estén funcionando correctamente, pero que la ejecución en el servidor esté demorando más de lo esperado, sea porque no es simplemente un insert, sino que se ejecuta otro tipo de código, o haya usuarios o procesos bloqueando la tabla.

Desconozco si FireDAC tiene alguna particularidad en su implementación que pueda provocar errores poco descriptivos o no normalizados, pero el mensaje en sí mismo significa que la conexión TCP entre cliente y servidor se perdió mientras había una consulta en ejecución.

Saludos.

Felinotronica 29-05-2026 23:35:22

Hola, revisa las transacciones, tanto ADO como firedac permiten controlar las transacciones, asi como los errores y generar un rollback en caso de que algo salga mal. Esto es muy util en tablas relacionales, ya que algunos errores son por inconsistencia de datos. No se si es el caso, pero a mi con Horse en los API Rest me daba problemas por los controles active x en los endpoint, ya que han de estar inicializados: coInitialize y coUninitialize, esto pasa si en tu codigo hay algo como un end point que use active x o similares. Debes revisar el codigo y saber que usas.


La franja horaria es GMT +2. Ahora son las 04:07:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi