Ver Mensaje Individual
  #2  
Antiguo 23-05-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola.

Eso es debido al propio diseño de dbExpress. Se trata de unos drivers ligeros, que unicamente proporcionan cursores unidireccionales de solo lectura.

Es decir que no puedes modificiar los registros obtenidos con un TSQLQuery (con Edit y Post), ni moverte hacia atrás (Prior), solo puedes consultar y moverte hacia adelante.

Como en una grid se debe poder mover hacia arriba y abajo, se necesita un cursor bidireccional.

La solución es utilizar ClientDataSets (dbExpress se ha diseñado para ser los componentes mínimos imprescindibles para proporcionar datos a un ClientDataSet). Añade un TDataSetProvider al formulario, y enlazalo al TSQLQuery. Ahora añade un TClientDataSet y enlazalo al TDatasetProvider.

Ahora tienes disponible (en el ClientDataSet) un cursor bidireccional de lectura/escritura. Solo tienes que modificar tu TDataSource para enlazarlo con el TClientDataSet, de forma que sea éste el que proporcione el DataSet a la Grid.

NOTA : Tienes que modificar el código, de forma que todas las operaciones se hagan sobre el TClientDataSet (el Open, las modificacines, ....). El TSQLQuery solo está allí para que el TClientDataSet sepa como recoger los datos de la consulta, pero no se tiene que tocar para nada (es el propio ClientDataSet el que lo utilizará, via el DataSetProvider).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita