Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Dbexpress no se actualiza el query (https://www.clubdelphi.com/foros/showthread.php?t=24732)

Mariana 31-08-2005 20:03:49

Dbexpress no se actualiza el query
 
Hola a todos, esta vez les consulto por lo siguiente:
Tengo un Tsimpledataset, que lo utilizo de la siguiente forma

Q.DataSet.CommandText := ‘ select * from personas where id_persona=:n_id_persona’;
Q.DataSet.CommandType := ctQuery;
Q.DataSet.Prepared :=false;
Q.DataSet.Params.ParamByName('n_id_persona').AsString:= ‘xx’;
Q.DataSet.Prepared := true;
Q.Execute;

la primera vez que se ejecuta funciona bien, el problema es la segunda vez que le quedan datos anteriores. Alguien me puede indicar como limpiarlo, he probado haciendo close y open, clearfields, params.clear, hasta probe cerrar la conexion a la BD y volverla a abrir, pero nada me dio resultado.
Muchas gracias por la ayuda que me puedan dar.

jmariano 31-08-2005 20:54:15

Puesto que la consulta que estás haciendo devuelve un resultado no debes usar el método "Execute" (sólo usa "Execute" cuando la consulta no devuelva resultado o, mejor dicho, un conjunto de registros). Utiliza, en su lugar, el método "Open" para ejecutar la consulta

Código Delphi [-]
Q.DataSet.CommandText := 'select * from personas where id_persona=:n_id_persona';
Q.DataSet.CommandType := ctQuery;
Q.DataSet.Params.ParamByName('n_id_persona').AsString:= ‘xx’;
Q.DataSet.Prepared :=false;
Q.DataSet.Close;
Q.DataSet.Open;

Saludos!

Mariana 31-08-2005 21:01:54

El problema sigue
 
Gracias por la respuesta pero justo puse un ejemplo donde si devuelve un solo resultado, pero tengo otros donde devuelve un conjunto de registros y el problema es el mismo.
Como tengo que hacer en esos casos?
Gracias

jmariano 31-08-2005 21:17:58

Como te comenté antes, siempre que la consulta te devuelva ya sea un sólo registro como un conjunto de ellos has de usar el método "Open" (cerrándo primero el DataSet, con "Close", para que se limpie). El método "Execute" sólo se utiliza para ejecutar aquellas consultas que no devuelven registro alguno (o como pone la ayuda, consultas que no devuelvan un "cursor"), como son, por ejemplo, las consultas para actualizar datos (aquellas que contienen la cláusula "INSERT" o "UPDATE").

(Si aún cerrando y abriendo el DataSet no se te refresca bien, cosa que sería extraña, puedes obligar el refresco usando el método "Refresh")

Bye!


La franja horaria es GMT +2. Ahora son las 02:33:42.

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