Query: Cannot modify a read-only dataset
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;
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
Curtidas 0
Melhor post
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
04/03/2004
Você deve usar parâmetros ao e não reconstruir a query.
GOSTEI 0
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?
Alguém pode explciar melhor?
GOSTEI 0
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
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
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
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.
Posso estar enganado porque não uso DBX.
GOSTEI 0
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
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.
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