Query: Cannot modify a read-only dataset

Delphi

04/03/2004

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

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

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.


GOSTEI 1

Mais Respostas

Edupgarcia

Edupgarcia

04/03/2004

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


GOSTEI 0
Peununes

Peununes

04/03/2004

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


GOSTEI 0
Steve_narancic

Steve_narancic

04/03/2004

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


GOSTEI 0
Tnaires

Tnaires

04/03/2004

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


GOSTEI 0
Djorius

Djorius

04/03/2004

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.


GOSTEI 0
Steve_narancic

Steve_narancic

04/03/2004

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


GOSTEI 0
Peununes

Peununes

04/03/2004

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.


GOSTEI 0
POSTAR