Samuelsjn Postado Outubro 2, 2007 Denunciar Share Postado Outubro 2, 2007 Amigos,Estou com dúvidas em relação ao tratamento de exceção gerada pelo SGBD Postgres. alguém possui um exemplo que possa compartilhar?Estou utilizando a conexão através do componente, ADOConnection e ADOQuery, e ODBC....alguém poderia me ajudar?ObrigadoAbraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mayron Cachina Postado Outubro 3, 2007 Denunciar Share Postado Outubro 3, 2007 Amigos,Estou com dúvidas em relação ao tratamento de exceção gerada pelo SGBD Postgres. alguém possui um exemplo que possa compartilhar?Estou utilizando a conexão através do componente, ADOConnection e ADOQuery, e ODBC....alguém poderia me ajudar?ObrigadoAbraçoQual a exceção??? todas???ou so os erros mesmo quando o query ta retornando o except? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Samuelsjn Postado Outubro 3, 2007 Autor Denunciar Share Postado Outubro 3, 2007 So o retorno de exeção do banco, como duplicidade de chave estrangeira, etc....ou caso se você tiver todas pode memandar tb, ficarei muito grato....meu email é samuelsjn@yahoo.com.brSe você tiver vou ficar muito agradecidoAbraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mayron Cachina Postado Outubro 3, 2007 Denunciar Share Postado Outubro 3, 2007 você quer saber como se trata ou quais os códigos??/eu tinha os do FB... postgres eu n tenho...é isso que você quer? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Samuelsjn Postado Outubro 4, 2007 Autor Denunciar Share Postado Outubro 4, 2007 Ola Mayron Cachina,Como vai?Quero saber na verdade, em qual evento que faço isso no componente ADOConnection.Os erros gerados pelo Postgres eu descubro quando for ocorrendo.Eu tenho um tratamento de exeção do InterBase. Mas os eventos são diferentes e como nunca usei o ADOConnection estou um pouco perdido.Abraço e obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mayron Cachina Postado Outubro 4, 2007 Denunciar Share Postado Outubro 4, 2007 Olha eu faço desse jeito...digamos que eu tenha um dbgrid e dele eu tenha q pegar o id do registro no evento oncell click...try data_cliente := FormatDateTime('yyyy-mm-dd',dbgManutencao.DataSource.DataSet.FieldValues['data']); id_da_manutencao := dbgManutencao.DataSource.DataSet.FieldValues['idtb_manutencao']; except On E: Exception Do begin ShowMessage(E.Message); end; end;dai você pode pegar uma procedure pra tratar em cima desse E.Message....é isso que você queria saber???ou eu me enganei? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Samuelsjn Postado Outubro 4, 2007 Autor Denunciar Share Postado Outubro 4, 2007 Entaum voce trata o erro na hora que você chama o banco, e não no DataModule.Eu tratava o erro diretamente no DataModule, por isso q fiquei perdido....Obrigado, vou tentar isso aqui... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 5, 2007 Denunciar Share Postado Outubro 5, 2007 Entaum voce trata o erro na hora que você chama o banco, e não no DataModule.É o mais usual. Há um componente (não lembro qual) que até tem um evento para quando ocorrem erros no banco. Mas o usual é isto: utilizar um try..except..endVeja também este post.Há diferenças em tratar o try..except e utilizar um ShowMessage para mostrar a mensagem. Como a exceção não ocorrerá, o programa continua a execução após o "end" do try..except. Isto não ocorre no exemplo que postei: o raise fará com que a execução pare naquele ponto. (normalmente é o desejável). Vai do caso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Samuelsjn Postado Outubro 22, 2007 Autor Denunciar Share Postado Outubro 22, 2007 (editado) Ola pessoal,Tentei utilizar o try exceptio end, mais não obtive sucesso. Abaixo a parte do código q estou utilizando.alguém poderia me ajudar?try dtmdlCIM.QueryPrincipal.ExecSQL; except on E: EDatabaseErro do begin if Pos('ERROR: insert or update on table "item" violates foreign key constraint "item_idcategoria_fkey";Error while executing the query.', UpperCase(E.Message)) > 0 then begin ShowMessage('Dados importantes não foram preenchidos!'); raise; end; end; end;Obrigado Editado Outubro 22, 2007 por Micheus Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 22, 2007 Denunciar Share Postado Outubro 22, 2007 Samuelsjn, o seu problema reside no fato de que você está querendo comparar a mensagem "normal" (com maiúsculas e minúsculas) com a mensagem original da exceção em maiúscula (você está utilizando UpperCase):if Pos('ERROR: insert or update on table "item" violates foreign key constraint "item_idcategoria_fkey";Error while executing the query.', UpperCase(E.Message)) > 0 thenMas a título de garantir o resultado, o correto seria realmente testar tudo (os dois lados) em maiúscula ou minúscula (tanto faz), então a sugestão seria deixar como você verá abaixo.Sugiro ainda que deixe o tratamento um pouco mais gernérico - não precisa colocar todos os detalhes da mensagem, apenas aquilo que a identifica (no seu caso a violação da chave estrangeira). Também é interessante observar que, se você vai permitir o RAISE (que abortará a continuidade da execução de sua procedure), então fica mais lógico você modificar a mensagem original da exceção e não utilizar a função ShowMessage:... try dtmdlCIM.QueryPrincipal.ExecSQL; except on E: EDatabaseErro do begin if Pos('violates foreign key constraint', LowerCase(E.Message)) > 0 then begin E.Message := 'Dados importantes não foram preenchidos!'#10#10'Erro: ' +E.Message; raise; end; end; end;Voce pode apenas atribuir a sua mensagem para a propriedade Message, mas por questões de "segurança", eu costumo agregar ao final da mesma a mensgem original (fica a seu critério). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Outubro 23, 2007 Denunciar Share Postado Outubro 23, 2007 Caro Micheus,Deu certo, muito obrigado pela explicação!!!Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Samuelsjn
Amigos,
Estou com dúvidas em relação ao tratamento de exceção gerada pelo SGBD Postgres. alguém possui um exemplo que possa compartilhar?
Estou utilizando a conexão através do componente, ADOConnection e ADOQuery, e ODBC....
alguém poderia me ajudar?
Obrigado
Abraço
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.