Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

flavioavilela

erro ao dar update em campo Null

Recommended Posts

boa tarde a todos... uso o sql server e fiz uma stored procedure para atualizar um determinado campo numa tabela

só que quando chamo a procedure e se o campo for um valor Null, ele nao atualiza o campo que eu quero...

update Cadastro_Gado set Codigo_Situacao=@Codigo_Situacao
		     where @Codigo_Animal=Codigo_Animal
alguem pode dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu where não está escrito de modo invertido??? Outra coisa, que campo está dando esse problema? Qual a estrutura dos dados? Se bem que sua dúvida devia estar postada na área do SQL Server....

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao, acho que nao está invertido nao, tanto q peguei de uma outra que já estava pronta e funcionando...

qnto a postar em outra categoria do forum, lá o povo demora um século pra responder agente, pensei que aqui a galera iria me ajudar mais rápido... como já está acontecendo... mas desculpe ai caso postei errado...

qnto ao campo com problema, é esse campo que estou me referindo na stored procedure Codigo_Situacao... ele está Null, ai eu mando dar um update nele e nada acontece... e lá no delphi eu estou passando ele blzinha saca, veja o exemplo abaixo...

  with dm.SPAtualiza_Situacao do
    begin
      Parameters.ParamByName('@Codigo_Animal').Value:= dm.qryconsulta_ver_coberturaCodigo_Animal.AsInteger;
      Parameters.ParamByName('@Codigo_Situacao').Value:= situacao_vaca_seca_coberta;
      ExecProc;
    end;
essa variável situacao_vaca_seca_coberta é uma variável global que está armazenando o código que tem que ir pro parametro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que estou vendo você está enviando um valor inteiro para a procedure.... me diz uma coisa: na tabela em vez de null está gravando o que? Zero? Ah sim.... pode por a procedure completa aqui e um exemplo dos valores que está enviando?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso... o parametro está recebendo um valor inteiro... e lá no bd, o tipo de dado do campo Codigo_Situacao é int tbm... no bd nao estou gravando nada... está Null mesmo... ai, quero atualizar esse 'valor' Null para um codigo X saca... e nao atualiza...

abaixo o codigo da criação da procedure...

Create Proc [dbo].[Atualiza_Situacao_Animal]
	@Codigo_Animal int,
	@Codigo_Situacao int
as
begin
	update Cadastro_Gado set Codigo_Situacao=@Codigo_Situacao
	         		where @Codigo_Animal=Codigo_Animal
end
abaixo, a chamada dela no delphi

with dm.SPAtualiza_Situacao do
  begin
    Parameters.ParamByName('@Codigo_Animal').Value:= dm.qryconsulta_ver_coberturaCodigo_Animal.AsInteger;
    Parameters.ParamByName('@Codigo_Situacao').Value:= situacao_vaca_seca_coberta;
    ExecProc;
  end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta... você já rodou este update direto no BD para ver se está ok? Eu particularmente nunca uso o where da forma que montou o seu, pra mim o seu where está invertido.... eu costumo usar assim:

 

    	update Cadastro_Gado 
    	set Codigo_Situacao=@Codigo_Situacao 
    	where Codigo_Animal = @Codigo_Animal

Outra coisa.... você debugou o código em execução para ver se os valores estão sendo enviados corretamente? E também, a menos que eu esteja viajando, a declaração de uma procedure é CREATE PROCEDURE e não CREATE PROC. Dá um sp_help Atualiza_Situacao_Animal no SQL Server e vê se a procedure existe lá. Se sim, como está a chamada da procedure no programa? Como codificou ela no SPAtualiza_Situacao ?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

em questão da sintaxe, eu imagino que estege correto, pois estou usando assim em todas as janelas e sempre funcionou perfeito...

quanto aos valores enviados corretamente, essa variável situacao_vaca_lac_coberta é uma variável global que, quando o cara loga no programa ela já é alimentada de uma tabela de configurações que criei e já fiz um ShowMessage entre os dois parametros da procedure para verificar se está vindo a informação que preciso e está vindo sim os dois parametros, aparentemente estaria funcionando pois a variavel está sendo alimentada numa boa com a informação... só que, na hora de executar a proc, ele joga Null lá pra dentro do campo.... e o campo na tabela eu joguei informações lá pra dentro só pra teste saca, pra nao ficar Null, mas, ao executar a proc, fica Null... agora ficou feio rsrs... e agora???

 

obs.: até mesmo depois de executar a proc, eu dei um showmessage(inttostr(situacao_vaca_lac_coberta)); e showmessage(dm.qryconsulta_ver_coberturaCodigo_Animal.AsString)e continuou chamando a informação desejada...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahh, executei a stored proc dentro do bd com a "minha sintaxe" e funcionou perfeito... e pra completar, coloquei lá na tabela, no campo desejado o valor Null... depois executei a proc e mandei colocar o valor 12, e colocou o valor rsrs, ou seja, independente de estar null ou nao, ele tem que atualizar... agora deu zebra mesmo rsrsrs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é esse SPAtualiza_Situacao? Porque está usando .value em vez de .integer na passagem dos parâmetros? Executando a proc direto no banco (dando um exec Atualiza_Situacao_Animal 1, 1 por exemplo), o que acontece com os dados da tabela? Você tem algum outro local que possua algum update nesta tabela que execute após passar por essa procedure?

 

Sem debugar seu código e ver as variáveis a situação in loquo fica meio difícil achar o erro agora....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a procedure está correta, então o problema deve estar na forma como você está codificando o SPAtualiza_Situacao. Que componente ele é? Como está montado o comando para executar a procedure nele?

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse componente é um TADOStoredProc... eu chamei ele de SPAtualiza_Situacao... nele, eu chamo minha procedure que eu criei lá no bd... e onde eu precisar dele, eu chamo dessa forma:

with dm.SPAtualiza_Situacao do
  begin
    showmessage(dm.qryconsulta_ver_coberturaCodigo_Animal.AsString);
    Parameters.ParamByName('@Codigo_Animal').Value:= dm.qryconsulta_ver_coberturaCodigo_Animal.AsInteger;
    showmessage(situacao_vaca_seca_coberta);
    Parameters.ParamByName('@Codigo_Situacao').Value:= situacao_vaca_seca_coberta;
    ExecProc;
    showmessage(situacao_vaca_seca_coberta);
  end;
o curioso é q eu dei um showmessage ai e todas as vezes ele chama perfeito os dados q quero... essa dm.qryconsulta_ver_coberturaCodigo_Animal.AsInteger é uma query que tenho no meu dm com alguns dados de uma tabela... e essa variavel situacao_vaca_seca_coberta eu expliquei acima ai... to zuado bixo... zuadim...

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera, estou enxergando uma luz no fim do tunel... rsrs...

minha chamada da stored procedure no delphi está assim:

with dm.SPAtualiza_Situacao do
  begin
    Parameters.ParamByName('@Codigo_Animal').Value:= dm.qryconsulta_ver_coberturaCodigo_Animal.AsInteger;
    Parameters.ParamByName('@Codigo_Situacao').Value:= situacao_vaca_lac_coberta;
    ExecProc;
  end;
se eu colocar assim funciona, atualiza os dados:

with dm.SPAtualiza_Situacao do
  begin
    Parameters.ParamByName('@Codigo_Animal').Value:= StrToInt(Edit1.Text);
    Parameters.ParamByName('@Codigo_Situacao').Value:= situacao_vaca_lac_coberta;
    ExecProc;
  end;
mas eu preciso colocar é a query, pois é de lá q virá meus dados q preciso... mas é aquela questão, já dei um showmessage antes e depois do execproc, e chama os dados numa boa... alguem sabe???

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera, estou enxergando uma luz no fim do tunel... rsrs...

minha chamada da stored procedure no delphi está assim:

with dm.SPAtualiza_Situacao do
  begin
    Parameters.ParamByName('@Codigo_Animal').Value:= dm.qryconsulta_ver_coberturaCodigo_Animal.AsInteger;
    Parameters.ParamByName('@Codigo_Situacao').Value:= situacao_vaca_lac_coberta;
    ExecProc;
  end;
se eu colocar assim funciona, atualiza os dados:

with dm.SPAtualiza_Situacao do
  begin
    Parameters.ParamByName('@Codigo_Animal').Value:= StrToInt(Edit1.Text);
    Parameters.ParamByName('@Codigo_Situacao').Value:= situacao_vaca_lac_coberta;
    ExecProc;
  end;
mas eu preciso colocar é a query, pois é de lá q virá meus dados q preciso... mas é aquela questão, já dei um showmessage antes e depois do execproc, e chama os dados numa boa... alguem sabe???

 

pelo que pude ver o parametro @Codigo_Animal recebendo valor => integer não corresponde na TStrings, tramforme o valor recebido para tal:

Parameters.ParamByName('@Codigo_Animal').Value:= IntToStr(dm.qryconsulta_ver_coberturaCodigo_Animal.AsInteger);

ok...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.