Array
(
)

Mensagem de Erro SQL SERVER

Guima
   - 08 mar 2005

Qdo deleto uma cidade no cad_cidade e tem um cliente com essa cidade (uso relacionamento no BD) o programa dah uma mensagem enorme q o cliente pediu pra muda-la, alguem sabe como axo o codigo da mensagem e mostro uma com messadlg mesmo ???

Bon Jovi
   - 08 mar 2005

Qual linguagem?

Ex. Delphi:
#Código

  try
     StrToInt(´a´);
  except
    on E: Exception do
      if Pos(´is not a valid integer value´, AnsiLowerCase(E.Message)) > 0 then
        Application.MessageBox(´Número inteiro inválido´, ´´, 0)
  end;


Dependendo da situação isso pode furar, se a msg vir diferente/em outra língua. No caso do Oracle ele retorna um código do erro na msg. No Sql Server acho q não tem isso.

Outra opção é usando ClientDataSet, onde possui o evento OnReconcileError, mas não sei se vc está usando cds ou até Delphi.

Guima
   - 10 mar 2005

mas no caso do SQL Server qdo apaga uma cidade relacionada com um cliente, o proprio BD dah uma mensagem enorme q naun pode deletar pq existe registros usando aquela cidade q vc quer apagar - eu quero trocar essa mensagem do BD por uma MessageDlg(´Tem cliente usando essa cidade, impossivel apaga-la´) ... help=me please

Felipe_cduarte
   - 11 mar 2005

Fala !

vou dar um help. vc pode criar um procedimento +- assim

procedure TrataErrosSQLServer(CodErro: Integer);
Var Descricao : String;
begin
Descricao := DtModule.ADOConnection1.Errors.Item[0].Description;

if ( CodErro = 2627 ) then // Violação de constraint unique
begin
if ( Pos( ´nome_da_chave´, Descricao ) > 0 ) then
begin
Application.MessageBox(´Já existe um ?? cadastrado.´, ´Atenção !!!´, MB_ICONSTOP );
end;
end
else if ( CodErro = 547 ) then // Conflitos ( Inserção, Alteração ou Exclusão )
begin
if ( Pos( ´fk_cliente´, Descricao ) > 0 ) then
Application.MessageBox(´cliente nao pode ser excluido´ , ´Atenção!!!´ , MB_ICONSTOP )
end
else
Application.MessageBox( PChar( ´Erro: ´ + IntToStr( CodErro ) + ´ - ´ + Descricao ), ´Atenção !!!´, MB_ICONEXCLAMATION );
end;

esses códigos estão documentados no BOL

pra chamar o procedimento vc pode usar um bloco de try/except

try
dm.begintrans;
// codigo
dm.committrans;
except
on EOleException do
begin
TrataErrosSQLServer( DtModule.ADOConnection1.Errors.Item[0].NativeError );
end;
end;

[]´s

Guima
   - 11 mar 2005

Cara, brigadaun, vou tentar arrumar isso lah, por hora obrigado, c eu naun consegui te falo again .... mas por hora brigadaun mesmo