• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

esquima

ve.net apagar registo!?!?

20 mensagens neste tópico

Boas...preciso de apagar um registo da base de dados em  acess so que antes de apagar queria ver se existe acodigo estado na tabela projectos e em caso de existir mandar uma msg de erro..A.

axo que tou perto...mas quando nao existe nenhum cod_projecto para o codigo estado que quero apagar ele da me erro no aux=.odr.item("cod_estado")..alguma sugestao???

o meu codigo e este

        Dim sSql As String

        Dim oDR As OleDbDataReader

        Dim aux As Integer

        sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados

        oDR = abreConexao(sSql)

        oDR.Read()

        aux = oDR.Item("cod_projecto")

        If aux <> Nothing Then

            MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo)

            oDR.Close()

        Else

            sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados

            oDR = abreConexao(sSql)

            oDR.Close()

        End If

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1º No titulo coloca-se [VB.NET VERSÃO XXX] -

2º Usa o GeSHi

3º Talvez assim:

Dim sSql As String
        Dim oDR As OleDbDataReader

        sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados
        oDR = abreConexao(sSql)
        oDR.Read()

        If oDR.Item("cod_projecto") <> Nothing Then

            MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo)
            oDR.Close()
        Else
            sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados
            oDR = abreConexao(sSql)
            oDR.Close()
        End If

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o erro continua o mesmo, o problema e que axo que quando ele faz o select e nao encontra nenhum cod_projecto o acess da erro axo eu..mas se devolve alguma coisa tambem nao sei se é o valor nothing

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dim sSql As String
        Dim oDR As OleDbDataReader

        sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados
        oDR = abreConexao(sSql)
        oDR.Read()

        If NOT oDR.Item("cod_projecto") = "" Then

            MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo)
            oDR.Close()
        Else
            sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados
            oDR = abreConexao(sSql)
            oDR.Close()
        End If

    End Sub

Talvez assim ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o erro é o mesmo.. o problema ta no valor que o acess devolve  :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

de certeza que sSelectedEstados contem valores?

usa o bloco

Try
   ...
catch ex as exception
   messagebox.show(ex.message)
end catch

para ter uma descricao exacta do erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim o sSelected estados tem valor...quero e apanhar quando o cod_projecto com esse sSelectedestado..quando ele existe corre bem..mas quando n existe da me erro...talvez o acess n rebente ao nao encontrar nenhum valor

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ao não encontrar valores não é suposto dar erro...

tenta um

While oDR.Read()

msgbox(oDR.Item("cod_projecto")

End While

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O mais provavel é o teu estado ser uma chave estrangeira da tabela projecto. Portanto ao tentares apagar esse estado da tabela estado vai-te dar erro porque ainda existe uma referência a esse estado na tabela projecto. Se for isso tens que primeiro apagar esse estado da tabela projecto antes de apagar da tabela estado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu prefiro bases de dados PostgreSQL ;)

Beto ele diz que lhe dá erro antes de isso acontecer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esquina , tenta o codigo abaixo, se der erro posta o erro por extenso.

try
Dim sSql As String
Dim oDR As OleDbDataReader         
sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados        
oDR = abreConexao(sSql)        
oDR.Read()         
If NOT oDR.Item("cod_projecto") = "" Then  
           MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo) 
           oDR.Close()
Else    
        sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados        
        Dim con As New OleDb.OleDbConnection(constring)
        con.Open()
        Dim com As New OleDb.OleDbCommand(sSql, con)
        com.ExecuteNonQuery()
        con.Close()

End If     
catch ex as exception
messagebox.show(ex.message)
end catch

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim o cod_estado e uma chave estrangeira do projecto...eu consigo apagar..ele avisame que esta associado a outra tabela caso eu queira apagar...

mas o que eu quero e que se o estado n tiver associado a nenhum proj,ele apague logo..senao quero que me mande uma msg...o problema e que quando faço o select e o cod_estado nao esta associado a nenhum projecto ele rebenta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ups vi mal...  :-[

Experimenta assim então

Dim sSql As String
        Dim oDR As OleDbDataReader

        sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados
        oDR = abreConexao(sSql)
        

        If oDR.Read() Then

            MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo)
            oDR.Close()
        Else
            sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados
            oDR = abreConexao(sSql)
            oDR.Close()
        End If

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta versao deve funcionar esquina

tens definir constring como sendo string é aquela que usas para abrir ligacoes ao access.

try
Dim sSql As String
Dim oDR As OleDbDataReader         
sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados        
Dim con As New OleDb.OleDbConnection(constring)
con.Open()
Dim com As New OleDb.OleDbCommand(sSql, con)
oDR= com.ExecuteReader
while oDR.read
if IsDBNull(oDR(0)) Then
	MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo) 
	oRD.Close
	con.close
else
        sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados        
        Dim con As New OleDb.OleDbConnection(constring)
        con.Open()
        Dim com As New OleDb.OleDbCommand(sSql, con)
        com.ExecuteNonQuery()
        con.Close()

end if
end while
oDR.Close
con.close

catch ex as exception
messagebox.show(em.message)
end catch

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esta resposta era para o codigo do beto

assim ja faz o que eu quero..consigo apagar um estado que n ta associado a nenhum projecto..mas quando esta associado e ele vai apagar diz que "nao e possivel eliminar ou alterar o registo porque a tabela 'projecto' inclui registos selecionados..mas eu queria apagar na mesma caso o utilizador queira

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, mais uma tentativa :)

try
Dim sSql As String
Dim oDR As OleDbDataReader         
dim apaga as boolean
sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados        
Dim con As New OleDb.OleDbConnection(constring)
con.Open()
Dim com As New OleDb.OleDbCommand(sSql, con)
oDR= com.ExecuteReader
while oDR.read
if IsDBNull(oDR(0)) Then
	MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo) 
	oRD.Close
	con.close
	apaga = true
else
	apaga = false


end if
end while
oDR.Close
con.close
if apaga then
        sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados        
        Dim con As New OleDb.OleDbConnection(constring)
        con.Open()
        Dim com As New OleDb.OleDbCommand(sSql, con)
        com.ExecuteNonQuery()
        con.Close()
end if
catch ex as exception
messagebox.show(ex.message)
end catch

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

esta resposta era para o codigo do beto

assim ja faz o que eu quero..consigo apagar um estado que n ta associado a nenhum projecto..mas quando esta associado e ele vai apagar diz que "nao e possivel eliminar ou alterar o registo porque a tabela 'projecto' inclui registos selecionados..mas eu queria apagar na mesma caso o utilizador queira

Huh?!

O meu código funcionou e agora quando fores apagar se o utilizador respoder SIM aparece essa mensagem de erro. Era isto que querias dizer?

Se sim mostra como tens o código agora. Se não explica melhor..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Asgorath, não deveria ser

If MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
apaga = True
Else
oRD.Close
con.close
End If

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

asgorath fiz as alteraçoes que eram para fazer...so que quando mete para apgar aparece logo uma msg a dizer a lifaçao ja esta aberta (state=open,fetching).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
try
Dim sSql As String
Dim oDR As OleDbDataReader         
dim apaga as boolean
sSql = "SELECT cod_projecto FROM projecto  WHERE cod_estado=" & sSelectedEstados        
Dim con As New OleDb.OleDbConnection(constring)
con.Open()
Dim com As New OleDb.OleDbCommand(sSql, con)
oDR= com.ExecuteReader
while oDR.read
if IsDBNull(oDR(0)) Then
	MsgBox("Este estado está ASSOCIADO a um projecto!!!!Deseja mesmo apagar", MsgBoxStyle.YesNo) 
	oRD.Close
	con.close
	apaga = true
else
	apaga = false


end if
end while
oDR.Close
con.close
if apaga then
        sSql = "DELETE FROM estado WHERE cod_estado=" & sSelectedEstados        
Dim con As New OleDb.OleDbConnection()
        If con.State = ConnectionState.Closed Then
	con.connectring=constring
	con.open
End If



        Dim com As New OleDb.OleDbCommand(sSql, con)
        com.ExecuteNonQuery()
        con.Close()
end if
catch ex as exception
messagebox.show(ex.message)
end catch

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora