Problemas com AdoQuery update Access

Delphi

23/01/2007

olá pessoal, sou iniciante em Delphi e muitas de minhas dúvidas resolvi lendo as mensagens deste fórum, PARABÉNS vocês ajudam muito,..mas tem um probleminha na minha aplicação que não consegui achar solução, estou usando uma conexão ADO e um banco de dados em ACCESS, consegui fazer funcionar todos os comandos SQL, somente o UPDATE que estou com problemas...qdo executo o comando dá a seguinte mensagem :
[b:fbd0552869]´O provedor atual não oferece suporte para retornar vários conjuntos de registros de uma única execução´[/b:fbd0552869], meu código é o seguinte:
USO ESSAS LINHAS PRA PESQUISAR OS CLIENTES
procedure TFrmAltCliente.BitBtnClick(Sender: TObject);
begin
ADOQueryAltCliente.Close;
ADOQueryAltCliente.Sql.Clear;
ADOQueryAltCliente.SQL.Add(´select *´);
ADOQueryAltCliente.SQL.Add(´from CLIENTES´);
ADOQueryAltCliente.SQL.Add(´where (NOME) like (´+QuotedStr(´¬´+Localizar.text+´¬´)+´)´);
ADOQueryAltCliente.ExecSQL;
ADOQueryAltCliente.Open;
COD.text := ADOQueryAltCliente.FieldByName(´CODIGO´).AsString;
CPF.text := ADOQueryAltCliente.FieldByName(´CPF´).AsString;
NOME.text := ADOQueryAltCliente.FieldByName(´NOME´).AsString;
RENDA.text := ADOQueryAltCliente.FieldByName(´RENDA´).AsString;

depois de mostrar em tela preciso alterar o valor de renda e gravar novamente na mesma

ADOQueryAltCliente.Close;
ADOQueryAltCliente.Sql.Clear;
ADOQueryAltCliente.SQL.Add(´update´);
ADOQueryAltCliente.SQL.Add(´CLIENTES´);
ADOQueryAltCliente.SQL.Add(´ set RENDA = ´+QuotedStr(´+RENDA.text+´)+´where ´+´ CPF= ´+QuotedStr(´+CPF.text+´)+´´);
ADOQueryAltCliente.ExecSQL;
ADOQueryAltCliente.Open;

alguém pode me ajudar...????


Ernani

Ernani

Curtidas 0

Respostas

Mario_n

Mario_n

23/01/2007

Use
ADOQuery. Edit;
Adoquery.Post;

Obs: Não Feche o select aberto anteriormente


GOSTEI 0
Ernani

Ernani

23/01/2007

Use ADOQuery. Edit; Adoquery.Post; Obs: Não Feche o select aberto anteriormente


oi desculpe minha ignorância, mais ainda sou iniciante nesse arte, voce poderia detalhar melhor como faria????


GOSTEI 0
Mario_n

Mario_n

23/01/2007

1 - você não precisa utilizar o ExecSQL após o select, somente o Open.
2 - Ao invés de utilizar o segundo bloco de codigo, contendo o ´Update´. utilize : Adoquery.Edit; e Adoquery.Post;
3 - Estou partindo do presusposto que os dados estão sendo exibidos em um Grid ou em um formulário em controles Dataware (DBEdit, DBGrid, etc).
Boa Sorte
Mario


GOSTEI 0
Bon Jovi

Bon Jovi

23/01/2007

Nao tem problema em usar direto via script. No caso de usar Edit/Post com ADOQuery é até melhor mesmo fazer via script UPDATE, pois no caso do Post do ADOQuery ele internamente montará um WHERE totalmente doido, usando todos os campos, deixando de usar o índice que deseja. Para usar Edit/Post teria que usar DataSetProvider/ClientDataSet em conjunto para poder setar os provider flags. Pesquise sobre Midas/ClientDataSet/DataSetProvider.

Sobre o problema em si, é o que o mario explicou, Open só para retornos de resultset (ex. SELECT) e seu UPDATE com problema nao precisa do Open, somente do ExecSQL.


GOSTEI 0
Ernani

Ernani

23/01/2007

1 - você não precisa utilizar o ExecSQL após o select, somente o Open. 2 - Ao invés de utilizar o segundo bloco de codigo, contendo o ´Update´. utilize : Adoquery.Edit; e Adoquery.Post; 3 - Estou partindo do presusposto que os dados estão sendo exibidos em um Grid ou em um formulário em controles Dataware (DBEdit, DBGrid, etc). Boa Sorte Mario


Blz meu amigo Mário deu certo, muito obrigado valeu mesmo!!! na próxima dúvida te procuro, heheheh, falow


GOSTEI 0
POSTAR