Problemas com AdoQuery update Access
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...????
[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
Curtidas 0
Respostas
Mario_n
23/01/2007
Use
ADOQuery. Edit;
Adoquery.Post;
Obs: Não Feche o select aberto anteriormente
ADOQuery. Edit;
Adoquery.Post;
Obs: Não Feche o select aberto anteriormente
GOSTEI 0
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
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
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
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.
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
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