Ir para conteúdo

POWERED BY:

Arquivado

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

fabfernandes

Integridade Referencial

Recommended Posts

Pessoal, Estou fazendo um projeto todo em plataforma web com PHP e MS-SQL Server 2000. Estou com um pequeno probleminha, a solução parece ser simples, mas não estou conseguindo enxergar... me ajudem por favor. :) Por exemplo:Digamos que eu tenho duas tabelas, FUNCIONARIO e SETOR. Estas tabelas estão relacionadas entre si, de modo que todo funcionário pertence a um setor, e que eu não possa excluir um setor que ja tenha um funcionário pertencente a ele. Porém, quando eu tento apagar o setor, o PHP me diz o seguinte:Warning: mssql_query(): message: Cannot DELETE Tb_Setor because Tb_Funcionario exists. (severity 16) in c:\easyphp1-7\www\cad_setor.php on line 10Warning: mssql_query(): Query failed in c:\easyphp1-7\www\cad_setor.php on line 10Eu queria que somente a mensagem "Cannot DELETE Tb_Setor because Tb_Funcionario exists." fosse exibida, e de preferencia num alert em javascript.COMO EU FACO ISSO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

kara não é tão complicado...

primeiro você precisa capturar o erro...

mole, pode usar o mysql_error() para isso...

claro no caso do mysql, mas acredito que msql server tenha algo do genero...

 

depois precisa separar a string...

explode faz isso mole mole...

 

depois um alert do JS resolve o resto....

 

ficaria mais ou menos assim....

 

PHP [/tr][tr]

<?php

// note que aqui você atribuiria o mysql_error(), esse foi só para exemplo e teste...

$texto = "Warning: mssql_query(): message: Cannot DELETE Tb_Setor because Tb_Funcionario exists. (severity 16) in c:\easyphp1-7\www\cad_setor.php on line 10

Warning: mssql_query(): Query failed in c:\easyphp1-7\www\cad_setor.php on line 10"

;

 

$texto = explode(":", $texto); // separo a string a que eu quero está na posição 03...

$limpo = explode(".",$texto[3]);//agora está na posição 1

 

echo "<script>alert('$limpo[0]')</script>";

?>

[/tr]

 

 

espero que isso possa lhe ser util...

 

abraços

 

Marcio

 

obs:

 

aqui tem o exemplo que lhe mostrei...

 

error

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

Com o mysql eu consigo fazer tranquilo, pois existe a função mysql_error()...

mas como eu faria isso com o MS-SQL ????

 

 

if (mysql_query("DELETE FROM Tb_Setor WHERE idSetor=$idsetor"))

print "<script>alert('Sistema Excluído do Cadastro!');</SCRIPT>";

else

print "<script>alert('".mysql_error()."')</script>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai galera....

depois de procurar muiiiito pela internet e não achar anda... parei e pensei um pouco.... e CONSEGUI! Entrei agora para postar o meu sucesso, e vi que a minha solução foi similar a que o Fabyo disse ai em cima.

 

Fiz o seguinte:

Editei o PHP.INI e modifiquei a seguinte linha:

error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

 

Com isso, o php parou de enviar mensagens de WARNING... dai no meu

script php eu faco o seguinte:

 

PHP [/tr][tr]if (!$sql_apagar = mssql_query("DELETE FROM Tb_Setor WHERE idNatureza = ".$cod))

print "<script>alert('".mssql_get_last_message()."');</SCRIPT>";

else

print "<script>alert('Registro APAGADO com Sucesso!');</SCRIPT>";

[/tr]

 

EUREKA!!!!

Agora eu posso fazer minha integridade referencial toda por triggers e com mensagens personalizadas em portugues... fika massa!!! :D :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma dica nao mude diretamente essa configuração no seu php.ini

 

pq quando você esta programando é importante você ver que erro que esta dando

 

pra você por corrigir e achar o erro mais facil

 

se pode setar essa configuração na propria pagina usando o ini_set()

 

eu nao gosto de ocultar erros mas nesse seu caso é uma solução boa

 

ate mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo... totalmente válida essa sua observação.... eu desconhecia essa funcao ini_set().... mas como eu a uso?

 

Coloquei o seguinte no inicio do meu script mas nao deu certo:

ini_set ("error_reporting","E_ALL & ~E_NOTICE & ~E_WARNING");

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.