UPDATE em tabela de acordo com ID de outra
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;
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
Curtidas 0
Respostas
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 é:
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
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 !! :))
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
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...
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
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 !!!
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
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á...
Se quiser ajuda, posta o código para vermos como ele está...
GOSTEI 0
Bruno Souza
25/02/2014
Fazendo como você tinha me citado, está assim:
Está gravando normalmente, mas....
[img:descricao=erro]http://arquivo.devmedia.com.br/forum/imagem/360925-20140225-144134.jpg[/img]
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
25/02/2014
Consegui utilizando Parâmetros....
Mas ainda está ocorrendo esse erro:
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
25/02/2014
Já consegui... troquei o .Open por .ExecSQL
Obrigado !!
Obrigado !!
GOSTEI 0
Marisiana Battistella
25/02/2014
Por nada! Que bom q vc conseguiu! =)
GOSTEI 0