Selecao DevMedia QUERO SER PRIME

Fórum Registro locado #364851

09/10/2008

0

Delphi 7 (Paradox)

Olá pessoal,

Gostaria de tratar o registro quando ele estiver sendo usado por outro usuário em outra estação.

Por exemplo: Quando eu entrar em edição em um determinado registro e caso o mesmo esteja sendo usado por outro usuário em outra estação, eu gostaria de tratar a mensagem em português assim: ´Registro esta sendo usado por outro usuário em outra estação.´.

Quem souber agradeço.

Ricardo


Ricardo_ascii

Ricardo_ascii

Responder

Posts

09/10/2008

Diegotiemann

Coloque um TAplicationEvent no seu programa
E no evento on Exception dele coloque o seguinte código:
if Pos(UpperCase(´aqui colocar como esta vindo a mensagem em ingles´), UpperCase(E.Message)) <> 0 then
    showmessage(Registro esta sendo usado por outro usuário em outra estação.´)



Responder

Gostei + 0

10/10/2008

Ricardo_ascii

Coloque um TAplicationEvent no seu programa E no evento on Exception dele coloque o seguinte código:
if Pos(UpperCase(´aqui colocar como esta vindo a mensagem em ingles´), UpperCase(E.Message)) <> 0 then
    showmessage(Registro esta sendo usado por outro usuário em outra estação.´)


Oi Diego, tudo bem?

Primeiramente quero agradecer a sua atenção e colaboração referente ao tópico solicitado.
É exatamente isso que preciso só que tem um porém. A mensagem em inglês aindacontinua aparecendo e depois vem a minha mensagem tratada.

Por exemplo:

Primeiro aparece a mensagem assim: ´Locked by another ..........´
e depois aparece a minha mensagem que eu tratei. Vc. não sabe como aparecer somente a mensagem que eu tratei?

Abraço, Ricardo


Responder

Gostei + 0

10/10/2008

Diegotiemann

Abaixo postei toda a minha função, só tenho isso no evento on Exception e não dá duas vezes a mesma mensagem.

procedure TDM.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
  mensagem: string;
  Pos1, Pos2: integer;
begin
  if Pos(UpperCase(´is not a valid date´), UpperCase(E.Message)) <> 0 then
    showmessage(´Data inválida, proceda a correção.´)
  else if Pos(UpperCase(´must have a value´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1:=Pos(´´´´, E.Message);
    mensagem:=E.Message;
    Delete(mensagem, Pos1, 1);
    Pos2:=Pos(´´´´, mensagem);
    mensagem:=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
    mensagem := ´É obrigatório o preenchimento do campo ´+ mensagem + ´.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´INI´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1:=Pos(´INI´, E.Message) + 3;
    Pos2:=Pos(´FIM´, E.Message);
    mensagem:=copy(E.Message, Pos1, Pos2 - Pos1);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´key violation´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Houve violação de código.  Este código já está sendo usado por outro registro.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Input value´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Campo preenchido com valor não válido. Proceda correção.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´is not a valid time´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Hora inválida, proceda a correção.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Erro ApplyUpdates´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Não foi possível salvar a(s) modificação(ões) no banco de dados.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´is not a valid float´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1     :=Pos(´´´´, E.Message);
    mensagem :=E.Message;
    Delete(mensagem, Pos1, 1);
    Pos2     := Pos(´´´´, mensagem);
    mensagem :=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
    mensagem := ´O valor  ´+ mensagem + ´ não é válido.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´field value required´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1     :=Pos(´column ´, E.Message) + 7;
    Pos2     :=Pos(´,´, E.Message);
    mensagem :=copy(E.Message, Pos1, Pos2 - Pos1);
    mensagem := ´Campo obrigatório ´ + mensagem + ´ deve ser preenchido.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´ATTEMPT TO STORE DUPLICATE VALUE´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Não é permitido valor duplicado. ´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´FOREIGN KEY´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Operação não permitida, registro vinculado em outro registro.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Provider not exported:´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Versão do servidor de aplicação incompatível com a aplicação´;
    Application.MessageBox(PChar(E.Message + #13 + mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´SQL Server Error: Column unknown´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Versão do banco de dados incompatível com a aplicação´;
    Application.MessageBox(PChar(E.Message + 13 + mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Application.MainForm.Close;
  end
  else if Pos(´VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT´, UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Registro Duplicado´+1310+Copy(UpperCase(E.Message),Pos(´VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT´,UpperCase(E.Message))+47,100);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´SQLCONNECTION PROPERTY REQUIRED FOR THIS OPERATION´), UpperCase(E.Message)) <> 0 then
  begin
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´INVALID VARIANT OPERATION´), UpperCase(E.Message)) <> 0 then
  begin
    ReabreConexaoServers;
  end
  else if (Pos(UpperCase(´MUST APPLY UPDATES BEFORE REFRESHING DATA´), UpperCase(E.Message)) <> 0) then
  begin
    mensagem := ´É necessário aplicar as alterações antes de atualizar os dados.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if ((Pos(UpperCase(´FALHA CATASTRóFICA´), UpperCase(E.Message)) <> 0)
       or  (Pos(UpperCase(´FALHA CATASTROFICA´), UpperCase(E.Message)) <> 0)) then
  begin
    mensagem := ´Falha na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´FALHA INESPERADA´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´CATASTROPHIC FAILURE´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´PARENTCONNECTION IS NOT ASSIGNED´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´dbExpress Error: [0x0015]: Connection failed´), UpperCase(E.Message)) <> 0 then
  begin
    if Pos(UpperCase(´SQL Server Error: Unable to complete network request to host´), UpperCase(E.Message)) <> 0 then
    begin
      Pos1     :=Pos(´"´, E.Message);
      mensagem :=E.Message;
      Delete(mensagem, Pos1, 1);
      Pos2     := Pos(´"´, mensagem);
      mensagem := copy(E.Message, Pos1 + 1, Pos2 - Pos1);
      mensagem := ´O servidor ´ + mensagem + ´ não pode ser acessado.´ + 13 +
                  ´Este problema pode estar ocorrendo por problemas na conexão´ + 13 +
                  ´desta estação com a rede, ou por problemas de configuração ou firewals.´ + 13 +
                  ´Esta Aplicação será finalizada. Contate o suporte.´;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
  end
  else if Pos(UpperCase(´missing database´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´ Banco de Dados não encontrado.´ + #13 +
                ´ Tente novamente em alguns instantes ou´ + 13 +
                ´ entre em contato com o suporte,´ + 13 +
                ´ provável problema de conexão com a rede.´ + 13 +
                ´ O programa será fechado.´ ;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Halt; //Desliga o programa chutando td e qq coisa
  end
  else if Pos(UpperCase(´ERROR READING FROM SOCKET´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                ´ problema de conexão com a rede.´ + 13 +
                ´ Tente novamente em alguns instantes ou´ + 13 +
                ´ entre em contato com o suporte.´ + #13 +
                ´ O programa será fechado.´ ;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Halt; //Desliga o programa chutando td e qq coisa
  end
  else if Pos(UpperCase(´WINDOWS SOCKET ERROR:´), UpperCase(E.Message)) <> 0 then
  begin
    if Pos(UpperCase(´WINDOWS SOCKET ERROR:´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
      else if Pos(UpperCase(´validation error for column´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´CAmpo obrigatório não foi preenchido´;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´NENHUMA CONEXãO PôDE SER FEITA PORQUE A MáQUINA DE DESTINO AS RECUSOU ATIVAMENTE (10061), ON API ´ + ´´´´ + ´CONNECT´ + ´´´´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + #13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´DESTINO AS RECUSOU ATIVAMENTE´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + #13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´(10061)´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + #13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end;
  end
  else
  if Pos(UpperCase(´COULD NOT PARSE SQL TIMESTAMP STRING´), UpperCase(E.Message)) <> 0 then
  begin
    Application.MessageBox(´Data inválida.´ + 13 + ´Proceda a correção.´, ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else
  begin
    mensagem := ´Ocorreu o seguinte erro: ´ + 13 +UpperCase(E.Message);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end;

end;



Responder

Gostei + 0

11/10/2008

Ricardo_ascii

Abaixo postei toda a minha função, só tenho isso no evento on Exception e não dá duas vezes a mesma mensagem.
procedure TDM.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
  mensagem: string;
  Pos1, Pos2: integer;
begin
  if Pos(UpperCase(´is not a valid date´), UpperCase(E.Message)) <> 0 then
    showmessage(´Data inválida, proceda a correção.´)
  else if Pos(UpperCase(´must have a value´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1:=Pos(´´´´, E.Message);
    mensagem:=E.Message;
    Delete(mensagem, Pos1, 1);
    Pos2:=Pos(´´´´, mensagem);
    mensagem:=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
    mensagem := ´É obrigatório o preenchimento do campo ´+ mensagem + ´.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´INI´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1:=Pos(´INI´, E.Message) + 3;
    Pos2:=Pos(´FIM´, E.Message);
    mensagem:=copy(E.Message, Pos1, Pos2 - Pos1);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´key violation´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Houve violação de código.  Este código já está sendo usado por outro registro.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Input value´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Campo preenchido com valor não válido. Proceda correção.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´is not a valid time´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Hora inválida, proceda a correção.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Erro ApplyUpdates´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Não foi possível salvar a(s) modificação(ões) no banco de dados.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´is not a valid float´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1     :=Pos(´´´´, E.Message);
    mensagem :=E.Message;
    Delete(mensagem, Pos1, 1);
    Pos2     := Pos(´´´´, mensagem);
    mensagem :=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
    mensagem := ´O valor  ´+ mensagem + ´ não é válido.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´field value required´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1     :=Pos(´column ´, E.Message) + 7;
    Pos2     :=Pos(´,´, E.Message);
    mensagem :=copy(E.Message, Pos1, Pos2 - Pos1);
    mensagem := ´Campo obrigatório ´ + mensagem + ´ deve ser preenchido.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´ATTEMPT TO STORE DUPLICATE VALUE´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Não é permitido valor duplicado. ´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´FOREIGN KEY´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Operação não permitida, registro vinculado em outro registro.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Provider not exported:´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Versão do servidor de aplicação incompatível com a aplicação´;
    Application.MessageBox(PChar(E.Message + #13 + mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´SQL Server Error: Column unknown´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Versão do banco de dados incompatível com a aplicação´;
    Application.MessageBox(PChar(E.Message + 13 + mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Application.MainForm.Close;
  end
  else if Pos(´VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT´, UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Registro Duplicado´+1310+Copy(UpperCase(E.Message),Pos(´VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT´,UpperCase(E.Message))+47,100);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´SQLCONNECTION PROPERTY REQUIRED FOR THIS OPERATION´), UpperCase(E.Message)) <> 0 then
  begin
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´INVALID VARIANT OPERATION´), UpperCase(E.Message)) <> 0 then
  begin
    ReabreConexaoServers;
  end
  else if (Pos(UpperCase(´MUST APPLY UPDATES BEFORE REFRESHING DATA´), UpperCase(E.Message)) <> 0) then
  begin
    mensagem := ´É necessário aplicar as alterações antes de atualizar os dados.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if ((Pos(UpperCase(´FALHA CATASTRóFICA´), UpperCase(E.Message)) <> 0)
       or  (Pos(UpperCase(´FALHA CATASTROFICA´), UpperCase(E.Message)) <> 0)) then
  begin
    mensagem := ´Falha na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´FALHA INESPERADA´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´CATASTROPHIC FAILURE´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´PARENTCONNECTION IS NOT ASSIGNED´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´dbExpress Error: [0x0015]: Connection failed´), UpperCase(E.Message)) <> 0 then
  begin
    if Pos(UpperCase(´SQL Server Error: Unable to complete network request to host´), UpperCase(E.Message)) <> 0 then
    begin
      Pos1     :=Pos(´"´, E.Message);
      mensagem :=E.Message;
      Delete(mensagem, Pos1, 1);
      Pos2     := Pos(´"´, mensagem);
      mensagem := copy(E.Message, Pos1 + 1, Pos2 - Pos1);
      mensagem := ´O servidor ´ + mensagem + ´ não pode ser acessado.´ + 13 +
                  ´Este problema pode estar ocorrendo por problemas na conexão´ + 13 +
                  ´desta estação com a rede, ou por problemas de configuração ou firewals.´ + 13 +
                  ´Esta Aplicação será finalizada. Contate o suporte.´;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
  end
  else if Pos(UpperCase(´missing database´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´ Banco de Dados não encontrado.´ + #13 +
                ´ Tente novamente em alguns instantes ou´ + 13 +
                ´ entre em contato com o suporte,´ + 13 +
                ´ provável problema de conexão com a rede.´ + 13 +
                ´ O programa será fechado.´ ;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Halt; //Desliga o programa chutando td e qq coisa
  end
  else if Pos(UpperCase(´ERROR READING FROM SOCKET´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                ´ problema de conexão com a rede.´ + 13 +
                ´ Tente novamente em alguns instantes ou´ + 13 +
                ´ entre em contato com o suporte.´ + #13 +
                ´ O programa será fechado.´ ;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Halt; //Desliga o programa chutando td e qq coisa
  end
  else if Pos(UpperCase(´WINDOWS SOCKET ERROR:´), UpperCase(E.Message)) <> 0 then
  begin
    if Pos(UpperCase(´WINDOWS SOCKET ERROR:´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
      else if Pos(UpperCase(´validation error for column´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´CAmpo obrigatório não foi preenchido´;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´NENHUMA CONEXãO PôDE SER FEITA PORQUE A MáQUINA DE DESTINO AS RECUSOU ATIVAMENTE (10061), ON API ´ + ´´´´ + ´CONNECT´ + ´´´´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + #13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´DESTINO AS RECUSOU ATIVAMENTE´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + #13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´(10061)´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + #13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end;
  end
  else
  if Pos(UpperCase(´COULD NOT PARSE SQL TIMESTAMP STRING´), UpperCase(E.Message)) <> 0 then
  begin
    Application.MessageBox(´Data inválida.´ + 13 + ´Proceda a correção.´, ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else
  begin
    mensagem := ´Ocorreu o seguinte erro: ´ + 13 +UpperCase(E.Message);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end;

end;


Olá Diego,

Meu amigo! Não sei o que eu estou fazendo, mas peguei a sua função completa como teste e coloquei no meu aplicativo. Ele roda normalmente mas na hora fa mensagem ele me da primeiro em inglês em seguida ele me mostra a mensagem tratada.

Por exemplo: Primeiro ele me mostra ´Key violation´ quando clico no ok ele me mostra ´Registro duplicado´.

Não sei se tem alguma particularidade mas comigo não esta dando certo.

Abraço e um ótimo final de semana amigo,

Ricardo


Responder

Gostei + 0

13/10/2008

Ricardo_ascii

[quote:82de6b6bf4=´diegotiemann´]Abaixo postei toda a minha função, só tenho isso no evento on Exception e não dá duas vezes a mesma mensagem.
procedure TDM.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
  mensagem: string;
  Pos1, Pos2: integer;
begin
  if Pos(UpperCase(´is not a valid date´), UpperCase(E.Message)) <> 0 then
    showmessage(´Data inválida, proceda a correção.´)
  else if Pos(UpperCase(´must have a value´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1:=Pos(´´´´, E.Message);
    mensagem:=E.Message;
    Delete(mensagem, Pos1, 1);
    Pos2:=Pos(´´´´, mensagem);
    mensagem:=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
    mensagem := ´É obrigatório o preenchimento do campo ´+ mensagem + ´.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´INI´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1:=Pos(´INI´, E.Message) + 3;
    Pos2:=Pos(´FIM´, E.Message);
    mensagem:=copy(E.Message, Pos1, Pos2 - Pos1);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´key violation´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Houve violação de código.  Este código já está sendo usado por outro registro.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Input value´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Campo preenchido com valor não válido. Proceda correção.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´is not a valid time´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Hora inválida, proceda a correção.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Erro ApplyUpdates´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Não foi possível salvar a(s) modificação(ões) no banco de dados.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´is not a valid float´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1     :=Pos(´´´´, E.Message);
    mensagem :=E.Message;
    Delete(mensagem, Pos1, 1);
    Pos2     := Pos(´´´´, mensagem);
    mensagem :=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
    mensagem := ´O valor  ´+ mensagem + ´ não é válido.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´field value required´), UpperCase(E.Message)) <> 0 then
  begin
    Pos1     :=Pos(´column ´, E.Message) + 7;
    Pos2     :=Pos(´,´, E.Message);
    mensagem :=copy(E.Message, Pos1, Pos2 - Pos1);
    mensagem := ´Campo obrigatório ´ + mensagem + ´ deve ser preenchido.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´ATTEMPT TO STORE DUPLICATE VALUE´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Não é permitido valor duplicado. ´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´FOREIGN KEY´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Operação não permitida, registro vinculado em outro registro.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´Provider not exported:´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Versão do servidor de aplicação incompatível com a aplicação´;
    Application.MessageBox(PChar(E.Message + #13 + mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´SQL Server Error: Column unknown´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Versão do banco de dados incompatível com a aplicação´;
    Application.MessageBox(PChar(E.Message + 13 + mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Application.MainForm.Close;
  end
  else if Pos(´VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT´, UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Registro Duplicado´+1310+Copy(UpperCase(E.Message),Pos(´VIOLATION OF PRIMARY OR UNIQUE KEY CONSTRAINT´,UpperCase(E.Message))+47,100);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if Pos(UpperCase(´SQLCONNECTION PROPERTY REQUIRED FOR THIS OPERATION´), UpperCase(E.Message)) <> 0 then
  begin
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´INVALID VARIANT OPERATION´), UpperCase(E.Message)) <> 0 then
  begin
    ReabreConexaoServers;
  end
  else if (Pos(UpperCase(´MUST APPLY UPDATES BEFORE REFRESHING DATA´), UpperCase(E.Message)) <> 0) then
  begin
    mensagem := ´É necessário aplicar as alterações antes de atualizar os dados.´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else if ((Pos(UpperCase(´FALHA CATASTRóFICA´), UpperCase(E.Message)) <> 0)
       or  (Pos(UpperCase(´FALHA CATASTROFICA´), UpperCase(E.Message)) <> 0)) then
  begin
    mensagem := ´Falha na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´FALHA INESPERADA´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´CATASTROPHIC FAILURE´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´PARENTCONNECTION IS NOT ASSIGNED´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´Falha inesperada na conexão com o servidor, restabelecendo conexão agora...´;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    ReabreConexaoServers;
  end
  else if Pos(UpperCase(´dbExpress Error: [0x0015]: Connection failed´), UpperCase(E.Message)) <> 0 then
  begin
    if Pos(UpperCase(´SQL Server Error: Unable to complete network request to host´), UpperCase(E.Message)) <> 0 then
    begin
      Pos1     :=Pos(´"´, E.Message);
      mensagem :=E.Message;
      Delete(mensagem, Pos1, 1);
      Pos2     := Pos(´"´, mensagem);
      mensagem := copy(E.Message, Pos1 + 1, Pos2 - Pos1);
      mensagem := ´O servidor ´ + mensagem + ´ não pode ser acessado.´ + 13 +
                  ´Este problema pode estar ocorrendo por problemas na conexão´ + 13 +
                  ´desta estação com a rede, ou por problemas de configuração ou firewals.´ + 13 +
                  ´Esta Aplicação será finalizada. Contate o suporte.´;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
  end
  else if Pos(UpperCase(´missing database´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´ Banco de Dados não encontrado.´ + #13 +
                ´ Tente novamente em alguns instantes ou´ + 13 +
                ´ entre em contato com o suporte,´ + 13 +
                ´ provável problema de conexão com a rede.´ + 13 +
                ´ O programa será fechado.´ ;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Halt; //Desliga o programa chutando td e qq coisa
  end
  else if Pos(UpperCase(´ERROR READING FROM SOCKET´), UpperCase(E.Message)) <> 0 then
  begin
    mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                ´ problema de conexão com a rede.´ + 13 +
                ´ Tente novamente em alguns instantes ou´ + 13 +
                ´ entre em contato com o suporte.´ + #13 +
                ´ O programa será fechado.´ ;
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
    Halt; //Desliga o programa chutando td e qq coisa
  end
  else if Pos(UpperCase(´WINDOWS SOCKET ERROR:´), UpperCase(E.Message)) <> 0 then
  begin
    if Pos(UpperCase(´WINDOWS SOCKET ERROR:´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
      else if Pos(UpperCase(´validation error for column´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´CAmpo obrigatório não foi preenchido´;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´NENHUMA CONEXãO PôDE SER FEITA PORQUE A MáQUINA DE DESTINO AS RECUSOU ATIVAMENTE (10061), ON API ´ + ´´´´ + ´CONNECT´ + ´´´´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + #13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´DESTINO AS RECUSOU ATIVAMENTE´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + #13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + 13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end
    else if Pos(UpperCase(´(10061)´), UpperCase(E.Message)) <> 0 then
    begin
      mensagem := ´ Servidor em manutenção ou provável´ + 13 +
                  ´ problema de conexão com a rede.´ + 13 +
                  ´ Tente novamente em alguns instantes ou´ + 13 +
                  ´ entre em contato com o suporte.´ + #13 +
                  ´ O programa será fechado.´ ;
      Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
      Halt; //Desliga o programa chutando td e qq coisa
    end;
  end
  else
  if Pos(UpperCase(´COULD NOT PARSE SQL TIMESTAMP STRING´), UpperCase(E.Message)) <> 0 then
  begin
    Application.MessageBox(´Data inválida.´ + 13 + ´Proceda a correção.´, ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end
  else
  begin
    mensagem := ´Ocorreu o seguinte erro: ´ + 13 +UpperCase(E.Message);
    Application.MessageBox(PChar(mensagem), ´Aviso´, MB_OK+MB_ICONINFORMATION);
  end;

end;


Olá Diego,

Meu amigo! Não sei o que eu estou fazendo, mas peguei a sua função completa como teste e coloquei no meu aplicativo. Ele roda normalmente mas na hora fa mensagem ele me da primeiro em inglês em seguida ele me mostra a mensagem tratada.

Por exemplo: Primeiro ele me mostra ´Key violation´ quando clico no ok ele me mostra ´Registro duplicado´.

Não sei se tem alguma particularidade mas comigo não esta dando certo.

Abraço e um ótimo final de semana amigo,

Ricardo[/quote:82de6b6bf4]

Resolvi o problema seguindo os passos de um colega aqui no Fórum. O procedimento citado acima esta corretíssimo, mas tem que ir na opção: Tools, Debugger Options, Language exceptions e desmarque a opção Stop on Delphi Exceptions

Agradeço a todos pela colaboração

Ricardo


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar