Fórum Cannot modify a read-only dataset #293160

25/08/2005

0

Estou usando dois TQuery. Um objeto do Delphi e outro crio em tempo de execussão.
De acordo com a opção escolhida pelo usuário eu modifico a ligação do datasource, ora recebendo o resultado da consulta de um TQuery ora de outro e colocando-o num DBGrid.
Quando o datasource está ligado ao Query criado em tempo de execussão e tento edita-lo, recebo essa mensagem:

raised exception class EDatabaseError with message ´Cannot modify a read-only dataset´.

Quando é com o objeto TQuery do Delphi não tenho problemas, é só com o que é criado na hora.
Além do óbvio que a própria mensagem já diz o que posso fazer para poder editar o resultado o que está no grid?


Peununes

Peununes

Responder

Posts

25/08/2005

Beppe

Qual a SQL da query criada em run-time?


Responder

Gostei + 0

26/08/2005

Peununes

+- isso:
var
qRS : TQuery;
begin

qRS := TQuery.Create(nil);
qRS.DatabaseName := ´banco´;

with qRS do
begin
qRS.Close;
qRS.SQL.Add(´SELECT bla bla bla´);
qRS.SQL.Add(´ From bla bla bla´);
qRS.SQL.Add(´ WHERE bla bla bla);
qRS.Open;
end;

if qRS.isempety then
begin
ds.dataset := qRP //datasourse (ds) recebe do objeto TQuery
dbgrid.datasource := ds;
end
else
begin
ds.dataset := qRS //datasourse recebe do TQuery criado acima
dbgrid.datasource := ds;
end;

Quando ligo o datasource ao objeto não dá problema mas na ligação com o segundo dá o erro citado.


Responder

Gostei + 0

26/08/2005

Evaldobarbosa

Já que você está usando um TQuery para busca de dados e tenta editá-lo, vc tem que colocar junto dele também um componente TUpdateSQL que posa conter os dados de INSERT, UPDATE e DELETE!!!

Espero que resolva o seu problema, pois só conheço esse erro nesse tipo de situação.


Responder

Gostei + 0

26/08/2005

Adriano Santos

O RequestLive do TQuery precisa ser modificado. Se estiver True ele vai ficar read only e receberá a mensagem mencionada por voce. Se for usar também um UpdateSQL não esqueça de modificar na TQuery também a propriedade CachedUpdates;


Responder

Gostei + 0

26/08/2005

Peununes

Seguinte galera, mandei um show message:

ShowMessage(ds.DataSet.Name); e... surpresa!!! A mensagem vem vazia!!!

Quando altero da segunda vez para o ds receber o Query montado em tempo real a propriedade dataset não está recebendo a query!!

O engraçado é que em tempo real, o ds recebe a consulta feita no objeto TQuery normalmente!!!

Alguém sabe o que está havendo e como resolvo isso?


Responder

Gostei + 0

26/08/2005

Peununes

Ah, já ia esquecendo! O ds recebe o resultado da query em tempo real, só não estou conseguinto mudar o dataset dela para essa query, para o objeto é sem problemas!!!


Responder

Gostei + 0

26/08/2005

Beppe

ShowMessage(ds.DataSet.Name); e... surpresa!!! A mensagem vem vazia!!! Quando altero da segunda vez para o ds receber o Query montado em tempo real a propriedade dataset não está recebendo a query!!

Vc que não está interpretando corretamente o resultado. Na verdade, nada anormal occoreu. Componentes criados em runtime naum tem nome(logo Name = ´´). Se o DataSet naum estivesse setado, uma exceção iria ocorrer, como vc acessou uma propriedade dele.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar