UPDATE em tabela de acordo com ID de outra

Delphi

25/02/2014

Bom dia galera...

Sou iniciante em comandos de SQL, e preciso saber como ficaria a sintaxe para atualizar os campos de uma tabela conforme ID de outra, ex:

tenho a tabela "tab_combustivel" com os seguintes campos e registros:

ID_COMB(autom.)-------Descricao-------Valor
1--------------------------------Alcool---------------1,5
2--------------------------------Gasolina------------2,5


E tenho a tabela "tab_veiculo":

ID_VEICULO---------ID_COMBUSTIVEL---------Descricao---------Valor_Comb
1--------------------------1----------------------------------Gol 1.6----------------1,5
2--------------------------2----------------------------------Celta------------------2,5
3--------------------------1----------------------------------Monza-----------------1,5
4--------------------------2----------------------------------Corsa------------------2,5


Gostaria que quando eu ALTERASSE um combustível, ex. o Alcool para um valor de 1,7... todos os veículos cujo o ID_COMBUSTIVEL = 1 sofressem essa alteração no campo de Valor_Comb para 1,7.

Sei que não é uma coisa difícil, mas não faço a mínima ideia de como resolver. Um amigo me disse que eu deveria fazer um UPDATE na query, e depois usar Parâmetros...

Uso: ADOQuery, ADOTablle, ADOConnection, banco de dados Access, e Delphi 2010.

Abs;
Bruno Souza

Bruno Souza

Curtidas 0

Respostas

Marisiana Battistella

Marisiana Battistella

25/02/2014

Olá Bruno!
Neste link tem um conteúdo bom pra t ajudar a entender melhor : [url]http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insert-update-delete-e-select.aspx[/url]

No caso q vc descreveu, o código que vc precisa é:

update  tab_veiculo
set valor_comb = 1.7
where id_combustivel = 1
GOSTEI 0
Bruno Souza

Bruno Souza

25/02/2014

Bom dia.... Obrigado pela resposta.

Mas no meu caso, não quero especificamente que altere o valor pra 1,7 .... tinha sido somente um exemplo. O usuário pode entrar no formulário de Combustíveis, e alterar qualquer um deles, gostaria que fizesse dinamicamente....

Exemplo:

O usuário altera o valor da Gasolina para 2,599 ..... então, todos os veículos da tabela de veículos passam a ter o valor de comb. de 2,599...


Obrigado pela ajuda !! :))
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/02/2014

Uhum.. entendi.
Mas ai é só você colocar uma variável no lugar no 1.7 pra receber o valor a ser alterado por parâmetro...
GOSTEI 0
Bruno Souza

Bruno Souza

25/02/2014

Entendi....

O modo como vc me passou antes, dava certo, alterava todos os valores da tabela... Mas antes que a operação fosse concluída, aparecia uma mensagem de erro:

"O provedor atual não oferece suporte para retornar vários conjuntos de registros de uma única execução."

Somente clicando em Continuar é que terminava de alterar os dados.... Por que será ??


Obrigado mais uma vez !!!
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/02/2014

Esse erro deve ter a ver com o teu código, porque o SQL está correto....
Se quiser ajuda, posta o código para vermos como ele está...
GOSTEI 0
Bruno Souza

Bruno Souza

25/02/2014

Fazendo como você tinha me citado, está assim:

procedure Tfrm_cadcombustivel.GravarClick(Sender: TObject);
begin
dm.q_veiculo.Close;
dm.q_veiculo.SQL.Clear;
dm.q_veiculo.SQL.Add('update tab_veiculo set valor_comb = 1.7 where id_combustivel = 1');
dm.q_veiculo.ExecSQL;
dm.q_veiculo.Open;

dm.tab_combustivel.Post;  //grava registro
muda;  //desabilita
end;



Está gravando normalmente, mas....

[img:descricao=erro]http://arquivo.devmedia.com.br/forum/imagem/360925-20140225-144134.jpg[/img]
GOSTEI 0
Bruno Souza

Bruno Souza

25/02/2014

Consegui utilizando Parâmetros....

dm.q_veiculo.Close;
dm.q_veiculo.SQL.Clear;
dm.q_veiculo.SQL.Add('update tab_veiculo set valor_comb = :XValor where id_combustivel = :IDComb');
dm.q_veiculo.Parameters.ParamByName('XValor').Value := dbedit2.Text;
dm.q_veiculo.Parameters.ParamByName('IDComb').Value := StrToInt(dbedit3.Text);
dm.q_veiculo.Open;


Mas ainda está ocorrendo esse erro:

o provedor atual nao oferece suporte para retornar varios conjuntos de registros de uma unica execução
GOSTEI 0
Bruno Souza

Bruno Souza

25/02/2014

Já consegui... troquei o .Open por .ExecSQL

Obrigado !!
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

25/02/2014

Por nada! Que bom q vc conseguiu! =)
GOSTEI 0
POSTAR