Query: Cannot modify a read-only dataset

04/03/2004

0

Estou usando o procedure abaixo, que me permite filtrar um registro...

Só que ao tentar Editar o DBGrid recebo está mensagem:

Project Financial.exe raised exception class EDatabaseError with message ´Query: Cannot modify a read-only dataset´. Process stopped. Use step or run to continue

Porque não consigo Editá-lo ???

procedure TFrmBaixaDoc.EdtPesquisa2Exit(Sender: TObject);
begin
If (EdtPesquisa.Text <> ´´) AND (EdtPesquisa2.Text <> ´´) AND (MaskEdit1.Text <> ´´) Then


Begin
DMFactoring.Query.Close;
DMFactoring.Query.SQL.Clear;
DMFactoring.Query.SQL.Add(´SELECT * FROM Sacado_cedente ´);
DMFactoring.Query.SQL.Add(´WHERE CGC_CPF = ´´+edtPesquisa.Text+´´ ´);
DMFactoring.Query.SQL.Add(´AND BAIXADO = ´´+EdtPesquisa2.Text+´´ ´);
DMFactoring.Query.SQL.Add(´AND QDO_BAIXAR = :MasKEdit1.Text ´);
DMFactoring.Query.parambyname(´MasKEdit1.Text´).asDateTime := date;
DMFactoring.Query.SQL.Add(´ORDER BY CGC_CPF ´);
DMFactoring.Query.Open;
If DMFactoring.Query.IsEmpty Then
ShowMessage(´Nada foi Encontrado de Acordo com a sua Pesquisa´);

If not DMFactoring.Query.IsEmpty Then
DMFactoring.Query.Edit;
End
Else
ShowMessage(´Estão faltando parâmetros para a Pesquisa´);
end;


Alexandretavares

Alexandretavares

Responder

Post mais votado

23/09/2005

Estou usando o procedure abaixo, que me permite filtrar um registro... Só que ao tentar Editar o DBGrid recebo está mensagem: Project Financial.exe raised exception class EDatabaseError with message ´Query: Cannot modify a read-only dataset´. Process stopped. Use step or run to continue Porque não consigo Editá-lo ??? procedure TFrmBaixaDoc.EdtPesquisa2Exit(Sender: TObject); begin If (EdtPesquisa.Text <> ´´) AND (EdtPesquisa2.Text <> ´´) AND (MaskEdit1.Text <> ´´) Then Begin DMFactoring.Query.Close; DMFactoring.Query.SQL.Clear; DMFactoring.Query.SQL.Add(´SELECT * FROM Sacado_cedente ´); DMFactoring.Query.SQL.Add(´WHERE CGC_CPF = ´´+edtPesquisa.Text+´´ ´); DMFactoring.Query.SQL.Add(´AND BAIXADO = ´´+EdtPesquisa2.Text+´´ ´); DMFactoring.Query.SQL.Add(´AND QDO_BAIXAR = :MasKEdit1.Text ´); DMFactoring.Query.parambyname(´MasKEdit1.Text´).asDateTime := date; DMFactoring.Query.SQL.Add(´ORDER BY CGC_CPF ´); DMFactoring.Query.Open; If DMFactoring.Query.IsEmpty Then ShowMessage(´Nada foi Encontrado de Acordo com a sua Pesquisa´); If not DMFactoring.Query.IsEmpty Then DMFactoring.Query.Edit; End Else ShowMessage(´Estão faltando parâmetros para a Pesquisa´); end;


se o componente em questão for um TQuery da guia BDE, basta alterar a propriedade RequestLive para True.


Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

04/03/2004

Edupgarcia

Você deve usar parâmetros ao e não reconstruir a query.


Responder

23/09/2005

Peununes

Galera, estou tendo o mesmo problema e não consegui entender o que o amigo Edu quis dizer...
Alguém pode explciar melhor?


Responder

23/09/2005

Steve_narancic

vc não pode utilizar uma query para editar direto na grid, mas sim um table, para poder editar um registro o comando SQL deve ser Update e não Select


Responder

23/09/2005

Tnaires

Olá
Qual conjunto de componentes vc tá usando? BDE, ADO...
Em ambos vc pode sim usar Query para editar registros. No BDE, ajuste a propriedade RequestLive para true. No ADO, não é necessário fazer nada.
Abraços


Responder

23/09/2005

Djorius

olha, posso estar enganado, mas a SQLQuery funciona como a IBSQL da IBX. ela só vai aceitar comandos tipo UPDATE, DELETE, ALTER TABLE, INSERT ou SELECT mas sem edição. Se você quer editar esse registro acho que terá que usar um SQLDataSet.

Posso estar enganado porque não uso DBX.


Responder

23/09/2005

Steve_narancic

olha, posso estar enganado, mas a SQLQuery funciona como a IBSQL da IBX. ela só vai aceitar comandos tipo UPDATE, DELETE, ALTER TABLE, INSERT ou SELECT mas sem edição. Se você quer editar esse registro acho que terá que usar um SQLDataSet. Posso estar enganado porque não uso DBX.


Exatamente o que eu queria dizer só que não tinha palavras para tal


Responder

23/09/2005

Peununes

Seguinte galera, estava lendo um forum delphi em ingles e o negócio é mais ou menos o seguinte:

No meu caso, estou fazendo uma consulta via TQuery no momento em que o form é criado.
Quando a consulta retorna true, eu jogo o resultado da query criada dinamicamente para um objeto TQuery.

Exe.: QueryRecebe.SQL := QueryDinamico.SQL;

Mostro o resultado num grid e consigo editar as informações por ai tranquilamente. Tem um jeito de fazer isso, mas fica para depois.

O Problema todo é quando a Query dinâmica retorna false. Por ´default´ todo dataset é read-only e, como ele está vazio, ele permanece read-only.

A grosso modo é mais ou menos isso.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar