PDA

Ver la Versión Completa : Problema editando DataSource


vijumaba89
10-04-2012, 17:31:53
Hola amigos... no se si este sea el Foro correcto... soy nuevo en esto y ando algo perdido. Estoy trabajando con Lazarus.
Mi problema es el siguiente:
Tengo un TDataSource el cuál lleno con el resultado de un SQLQuery. Lo que deseo es poder recorrer dicho datasource y hacer una actualizaión de un campo especifico del registro en el que me encuetro.
Hasta el momento he logrado hacer el recorrido pero cuando trato de actualizar el valor del campo del datasource, me genera un error que me dice que el dataset is read-only, he intentado hacerlo de varias manera y siempre obtengo el miso error.
No se si alguno de ustede pueda ayudarme... se lo agradeceria inmensamente.

El código que uso es el siguiente:


dso_rpt_balance.DataSet.First; // Posiciono el Dataset en la primera posicion
while not dso_rpt_balance.DataSet.EOF do
begin //Inicio el recorrido
// hago las operaciones que deseo para obtener el valor que voy a actualizar
{........} //Luego coloco el dataset en modo de edición
dso_rpt_balance.DataSet.Edit;
dso_rpt_balance.DataSet.FieldByName('nombrecampo').AsString:='10000'; //Seteo el valor al campo deseado
dso_rpt_balance.DataSet.Post;
dso_rpt_balance.DataSet.Next;
// Avanzo en el ciclo
end;


Si alguién tiene idea de como puedo resolver el problema u otra manera de hacer lo que deseo... estaría de maravilla....

maeyanes
10-04-2012, 18:20:35
Hola...

Bienvenido a los foros de Club Delphi, te recomiendo que le des una leida a la Guía de Estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Sobre tu duda, si la consulta sobre la que tratas de hacer los cambios es una consulta compleja, o sea, tiene joins, group by, etc... entonces no es posible que la puedas modificar de la forma que deseas.

Ahora bien, si es una consulta sencilla (select * from table1), entonces tienes que checar que la propiedad RequestLive del componente SQLQuery tenga como valor True.

Todo esto te lo comento desde la perspectiva de Delphi, no se si en Lazarus el componente SQLQuery cuente con esta propiedad.



Saludos...

vijumaba89
10-04-2012, 18:39:08
Hola amigo... muchas gracias por tu pronta respuesta...

Efectivamente el query qe ejecuto con el SQLQuery tiene de todo un poco joins, group by.

No se si exista otra manera de hacerlo.... lo que necesito es despues de tomar los datos de una consulta poder actualizar esos datos con valores que obtengo de otro proceso. No se si usando otro componente pueda hacerlo....?

maeyanes
10-04-2012, 18:43:09
Hola...

Pues tendrías que actualizar las tablas involucradas independientemente. Otra forma que se me ocurre es que uses una vista actualizable, pero esto depende mucho del motor de base de datos que utilices.

También tienes la opción de usar procedimientos almacenados, pero como en el caso de las vistas, depende del motor de base de datos que utilices.



Saludos...