Registro locado
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
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
Curtidas 0
Respostas
Diegotiemann
09/10/2008
Coloque um TAplicationEvent no seu programa
E no evento on Exception dele coloque o seguinte código:
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.´)
GOSTEI 0
Ricardo_ascii
09/10/2008
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
GOSTEI 0
Diegotiemann
09/10/2008
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;
GOSTEI 0
Ricardo_ascii
09/10/2008
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
GOSTEI 0
Ricardo_ascii
09/10/2008
[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
GOSTEI 0