Ir para conteúdo

POWERED BY:

Arquivado

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

yogodoshi

Como checar no banco antes de deletar?

Recommended Posts

Acho que não formulei bem minha pergunta, vou explicar melhor:

 

Possuo um banco com varias tabelas, o campo autonum de uma tabela está relacionado com os campos idproj das outras tabelas... ao deletar o registro na tabela projeto, keru que delete todos os registros relacionados a ele nas outras tabelas, entao meu codigo fica assim:

 

sql = "DELETE * FROM tbdespesa WHERE idproj= " & id 			Banco.Execute(sql)						sql2 = "DELETE * FROM tbrelatorios WHERE idproj= " & id 			Banco.Execute(sql2)						sql3 = "DELETE * FROM tbquestionario WHERE idproj= " & id 			Banco.Execute(sql3)						sql4 = "DELETE * FROM tbreceita WHERE idproj= " & id 			Banco.Execute(sql4)						sql5 = "DELETE * FROM tbresultado WHERE idproj= " & id 			Banco.Execute(sql5)						sql6 = "DELETE * FROM form WHERE autonum = " & id			Banco.Execute(sql6)

Mas caso não tenha nenhum registro com esse id em uma das tabelas, dá erro no ASP.

 

Então aí está minha pergunta: como fazer para ele checar se existe um registro com essa ID no banco, se houver ele deleta, senão ele passa adiante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o comando tah certo sim, eu defino antes:id = request.form("radio")o codigo funciona se todas as tabelas tiverem algo cadastrado com esse idproj.... o prob eh se alguma das tabelas NAO tem algo cadastrado com esse idproj, ae dá erro no ASP... eu preciso eh do comando pra xecar se tem algo na tabela com esse idproj...

Compartilhar este post


Link para o post
Compartilhar em outros sites
sql = "DELETE tbdespesa WHERE idproj= " & id 			Banco.Execute(sql)						sql2 = "DELETE tbrelatorios WHERE idproj= " & id 			Banco.Execute(sql2)						sql3 = "DELETE tbquestionario WHERE idproj= " & id 			Banco.Execute(sql3)						sql4 = "DELETE tbreceita WHERE idproj= " & id 			Banco.Execute(sql4)						sql5 = "DELETE tbresultado WHERE idproj= " & id 			Banco.Execute(sql5)						sql6 = "DELETE form WHERE autonum = " & id			Banco.Execute(sql6)
usa esse codigo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas quando da erro voce realmente passou o id na SQL?vja isso, veja se o SQL esta sendo executado como deveria

Compartilhar este post


Link para o post
Compartilhar em outros sites

rapha, eu n keru deletar a tabela... keru deletar o registro com o id indicado...marioufpa, vou checar isso amanha, mas antes funcionava normalmente, dps parou de funcionar qnd tentei deletar um projeto que havia acabado de incluir (sem incluir todos os itens relacionados a ele em outras tabelas) ae o codigo passou pela primeira sql de despesas e qnd xegou em relatorios disse q n encontrou nada com a id que eu enviei...

Compartilhar este post


Link para o post
Compartilhar em outros sites
sql = "DELETE FROM tbdespesa WHERE idproj= " & id & ";"Banco.Execute(sql)sql2 = "DELETE FROM tbrelatorios WHERE idproj= " & id & ";"Banco.Execute(sql2)sql3 = "DELETE FROM tbquestionario WHERE idproj= " & id & ";"Banco.Execute(sql3)sql4 = "DELETE FROM tbreceita WHERE idproj= " & id & ";"Banco.Execute(sql4)sql5 = "DELETE FROM tbresultado WHERE idproj= " & id & ";"Banco.Execute(sql5)sql6 = "DELETE FROM form WHERE autonum = " & id & ";"Banco.Execute(sql6)

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça um IF antes e force a variavel ter um valor inteiro

if id<>"" or id>0 or isnull(id)=false or len(trim(id))>0 thenid = cint(id)sql = "DELETE tbdespesa WHERE idproj= " & id 			Banco.Execute(sql)						sql2 = "DELETE tbrelatorios WHERE idproj= " & id 			Banco.Execute(sql2)						sql3 = "DELETE tbquestionario WHERE idproj= " & id 			Banco.Execute(sql3)						sql4 = "DELETE tbreceita WHERE idproj= " & id 			Banco.Execute(sql4)						sql5 = "DELETE tbresultado WHERE idproj= " & id 			Banco.Execute(sql5)						sql6 = "DELETE form WHERE autonum = " & id			Banco.Execute(sql6)elseresponse.write("a variavel ID está vazia, não pode ser rxcluido o registro")end if
outra coisa, qual a mensagem e codigo do erro??? você não colocou no topico pra ajudar na resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso que o jonathan postou era o que queria falarse voce passar um valor de id ali tanto faz se tem ou nao registros pois se nao tiver apenas nao vai exckuir nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, eu nao postei o erro pq eu sei o motivo do erro... eu tentei explicar lah em cima mas vou explicar de novo ^^E esse codigo que voces tao criando não tá errado não?

sql6 = "DELETE tbdespesa WHERE idproj = " & id
o meu código era assim:
sql6 = "DELETE * FROM tbdespesa WHERE idproj = " & id
Lembrando que "tbdespesa" = nome de uma das tabelas "idproj" = campoMesmo axando que o codigo estava errado, eu fui testar e deu esse erro:

Microsoft JET Database Engine error '80040e14'Syntax error (missing operator) in query expression 'tbdespesa WHERE idproj= 24'./gestor/admin/projetos_excluindo.asp, line 11

Eu queria era saber como faço para checar no banco de dados se na tabela X tem um registro com o campo Y = Zse tiver um registro como foi especificado, ele deleta esse registro, caso não haja esse registro ele não faz nada e passa para o comando seguinte.Algo como: (vou INVENTAR HEIN! APENAS PARA FINS DIDATICOS xD)
sql = "SELECT * FROM tbdespesa WHERE idproj= " & id Banco.Execute(sql)if not sql.eof thensql2 = "DELETE * FROM tbdespesa WHERE idproj= " & id Banco.Execute(sql2)end if
obs: mt util essa verificacao completa do id, vlw pela dica ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que me parece você está usando access e relacionou as tabelas no menu "relacionamentos" e o erro está ocorrendo porque você está excluindo os registros da tabela pai antes de excluir da tabela filha. Duas alterantivas....desfaça o relacionamento no access ou exclua os registros das tabelas filhas e depois da mãe

 

a sua "ideia" acima é logica mas não funcional pois o delete só executa se existe o registro e dá erro quando ocorre o relacionamento interno no banco(acho que é esse o caso) ou quando são dados incompativeis.

você colocou o:

id = cint(id)
antes de executar o delete?

o campo idproj é do tipo numérico???

Compartilhar este post


Link para o post
Compartilhar em outros sites

era numero sim...

e o meu xefe aki no trabalho me mostro como se fazia...

 

			Set ObjRs2 = Server.CreateObject("ADODB.Recordset")			sql2 = "select * from tbrelatorios WHERE idproj= " & id			ObjRs2.Open sql2, Banco,3,3			if not ObjRs2.eof then								sql2_2 = "DELETE * from tbrelatorios WHERE idproj= " & id			Banco.Execute(sql2_2)						end if
era isso que eu keria ^^

xecar se existe, se existir deleta, se nao existir = passar adiante...

eu ateh tinha tentado dessa maneira mas a anta aki tava tentando executar direto a sql sem usar recordset ¬¬

 

vlw pela ajuda ae galera!!

abrcss

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.