Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Activar un SQLQuery (https://www.clubdelphi.com/foros/showthread.php?t=35022)

beatriz g 29-08-2006 08:56:42

Activar un SQLQuery
 
Hola tengo un problema el insertar datos en una base de datos Mysql. Para insertar utilizo un componente SQLQuery al que le añado la sentencia insert (query.SQL.Add('insert into personas ....')) y a veces me da un error de violacion de memoria, me dijeron que tal vez fuera porque el componente no estuviera activo, efectivamente compruebo la propiedad Active del componente en tiempo de ejecuion y es False, le asigno el valor True esta propiedad (query.Active:=True) pero me genera el siguiente error al ejecutar:

query: cursor nor returned from Query

¿Porque me genera este error?

Bicho 29-08-2006 09:22:12

Hola Beatriz, quizá sería bueno que pusieras ese pedazo de código donde trabajas con la Query para ver que estás haciendo.

Así a bote pronto se me ocurre por lo que dices, que estás activando la Query cuando no hace falta hacerlo.

- La desactivas.
- Le añades el texto SQL a la query.
- Le añades los parámetros si los tiene.
- Por último ejecutas la query, ¿como? si una simple consulta, basta que hagas un Open o Active = True. Pero si tu caso es una consulta de modificación, alta o borrado, debes usar ExecSQL.

Alomejor me he ido por otro camino, por eso repite que mejor sería que pusieras el código, para ver entre todos donde puede estar ocurriendo el error.

Saludos

beatriz g 29-08-2006 09:46:30

Bueno con lo que me comentas creo que estoy equivocada al poner la propiedad Active del Query a True, al ser un 'insert' no se puede poner esta propiedad activa, verdad?. Bueno era por probar algo ya que la violacion de memoria al ejecutar el 'insert' con ExecSQL no consigo que desaparezca y creia que podia ser porque la propiedad Active estuviera a False. Os paso el codigo y :

query.SQL.Clear;
query.SQL.Add('insert into personas values (:p1,:p2,:p3,:p4,:p5,:p6,:p7)');
query.ParamByName('p1').Clear;
query.ParamByName('p1').AsInteger:=identificador;
query.ParamByName('p2').Clear;
query.ParamByName('p2').AsString:=e_e.Text;
.....
....//asigno el valor de todos los parametros
.....
// query.Active:=True; //al ejecutar esto es donde me genera la el error que os comente antes.
query.ExecSQL; // y al ejecutar esto a veces me genera una violacion de memoria

Yo en realidad lo que estoy intentando solucionar es la violacion de memoria,
¿se os ocurre algo?

Bicho 29-08-2006 10:06:40

Efectivamente no hay que poner el active a true al hacer un insert.
Por el código que mandas yo lo veo bien. Sólo que no he usado nunca un clear de los parámetros, ya que siempre me suelo asegurar de que tendrán un valor.

Lo que te aconsejo es que:
1º - prueba a quitar el parambyname.clear a ver que tal. No sea cosa que fuera por eso, no lo sé. :p

2º - si aún así no se te ha arreglado, pon un breakpoint en la linea del SQL.Clear y ves paso a paso con F8 y ponte encima de todos los parámetros que le mandas a ver si son todos correcto, no sea que alguno esté mal.

Espero te sirva

Saludos


La franja horaria es GMT +2. Ahora son las 08:23:41.

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