Ir para o conteúdo
passado

Testar existencia de registo

Mensagens Recomendadas

passado    0
passado

Boas pessoal eu queria colocar um teste no botao dele onde ele testasse se um determinado registo existe num tabela da base de dados e se exestisse ele nao deixava apagar, eu sei que isso da para fazer com as relações mas eu nao queria estar a mecher nas relações da BD porque ja uma vez mexi e deu barraca xD tipo um processo que testasse que colocasse num if, pareceme simples so nao sei a instrucção SQL que deva dar

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bruno1234    20
bruno1234

Não sei se percebi bem a tua pergunta.

Mas para saberes se existe um registo basta fazeres um select.

Select 1 from tabela where id=id_qualquer

se o resultado não for vazio, é pq existe.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

Eu tambem nao me expliquei muito bem, é assim eu tenho uma tabela empresas e uma tabela contactos a varios contactos pode estar associado uma empresa, ou seija o que eu quero testar e se no campo "Empresas" da tabela contactos existe algum contacto com o nome da empresa que estou a querer eliminar, se existir digo quais sao e nao deixo apagar se nao existir entao e eliminado com sucesso....

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bruno1234    20
bruno1234

para isso fazes um select na tabela de contactos pelo nome da empresa

Select empresa, etc... from Contactos

where empresa = 'Nome da empresa'

se for vazio pds apagar, se não for, o retorno da query é uma  tabelas com os contactos q tem esta empresa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

para isso fazes um select na tabela de contactos pelo nome da empresa

Select empresa, etc... from Contactos

where empresa = 'Nome da empresa'

se for vazio pds apagar, se não for, o retorno da query é uma  tabelas com os contactos q tem esta empresa

E fica melhor criar uma função e chamala no if ou um processo e chamalo no if? tipo

if processo ou funçao then

codigo para eleminar

else

a tal gridview com os contactos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

Eu não percebo de VB, mas diria q fica melhor se fizeres em separado, num processo.

vou ver as duas opçoes obrigado pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nokPT    4
nokPT

E fica melhor criar uma função e chamala no if ou um processo e chamalo no if?

Fica melhor mas mais difícil de ler o código, mas com a vantagem de podes chamar a mesma função várias vezes em alturas diferentes, é uma boa maneira de trabalhar

Fazes:

Private Function TestaRegisto (ByVal Contatos as String) as String

' Fazes o código de testar se há contactos associados à empresa

' Se houver:

' TestaRegisto = Texto da mensagem de erro com a Lista de contactos

' Se não houver:

' TestaRegistos=""

Depois no if testas de a tua função for igual a "", podes continuar, caso contrário mensagem erro ou assim...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

Eu so me interesa chamar a função uma vez so achei melhor assim porque assim o codigo co botao delete ficava mais limpo e menos confuso para a minha cabeça....

Ja agora uma duvida, na função eu faço o select a tabela contactos onde o campo empresa e igual a uma variavel carregada por um campo do formulário, a minha duvida é que instrucção dar ao if?

eu tennho dim sql as string = select.....

e no if?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

Private Function testedelete()
        'variaveis de ligação
        Dim strcon As String = (Contactos_Sofio.My.Settings.BDSofioConnectionString)
        Dim strsql As String = "SELECT [iD_Empresa] FROM Contactos WHERE [iD_Empresa] = '" & empID_EmpresaTextBox.Text & "'"

        'Ligação
        Dim con As New SqlConnection(strcon)
        Dim cmd As New SqlCommand(strsql, con)
        Try
            con.Open()
        Catch erro As SqlException
            MsgBox("Erro a conectar a base de dados: " & erro.Message)
        End Try
        'teste
        Dim reader As SqlDataReader = cmd.ExecuteReader()
        If reader.HasRows = 0 Then
            Return True
        Else
            Return False
        End If
        con.Close()
    End Function

Um bocadinho ali outro acula consegui construir o codigo aqui deixo para quem precisar

cumps

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tiago Salgado    2
Tiago Salgado

Se queres testar se existem ou não registos e não te interessa retorna-los, deverias ter antes algo deste genero:

    Private Function testedelete()
        'variaveis de ligação
        Dim strcon As String = (Contactos_Sofio.My.Settings.BDSofioConnectionString)

        'Ligação
        Dim con As New SqlConnection(strcon)
        Dim cmd As New SqlCommand("SELECT COUNT(1) FROM Contactos WHERE [iD_Empresa] = @Id", con)
        cmd.Parameters.Add("@Id", SqlDbType.Int, 4).Value = Integer.Parse(empID_EmpresaTextBox.Text)
        Try
            con.Open()
            If cmd.ExecuteScalar().ToString() = "0" Then
                Return True
            Else
                Return False
            End If
        Catch erro As SqlException
            MsgBox("Erro a conectar a base de dados: " & erro.Message)
        Finally
            con.Close()
            con.Dispose()
        End Try
    End Function

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

Se queres testar se existem ou não registos e não te interessa retorna-los, deverias ter antes algo deste genero:

    Private Function testedelete()
        'variaveis de ligação
        Dim strcon As String = (Contactos_Sofio.My.Settings.BDSofioConnectionString)

        'Ligação
        Dim con As New SqlConnection(strcon)
        Dim cmd As New SqlCommand("SELECT COUNT(1) FROM Contactos WHERE [iD_Empresa] = @Id", con)
        cmd.Parameters.Add("@Id", SqlDbType.Int, 4).Value = Integer.Parse(empID_EmpresaTextBox.Text)
        Try
            con.Open()
            If cmd.ExecuteScalar().ToString() = "0" Then
                Return True
            Else
                Return False
            End If
        Catch erro As SqlException
            MsgBox("Erro a conectar a base de dados: " & erro.Message)
        Finally
            con.Close()
            con.Dispose()
        End Try
    End Function

Estive a ver, mas nao encontrei grandes diferenças, podes explicarme?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Estive a ver, mas nao encontrei grandes diferenças, podes explicarme?

Estiveste a ver onde ? Foste ao help/msdn ou só olhaste para o código ?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader.

Resumindo o método ExecuteScalar() como serve para retornar apenas um valor é mais rápido e mais eficiente do que um ExecuteReader().

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passado    0
passado

Estiveste a ver onde ? Foste ao help/msdn ou só olhaste para o código ?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

Use the ExecuteScalar method to retrieve a single value (for example, an aggregate value) from a database. This requires less code than using the ExecuteReader method, and then performing the operations that you need to generate the single value using the data returned by a SqlDataReader.

Resumindo o método ExecuteScalar() como serve para retornar apenas um valor é mais rápido e mais eficiente do que um ExecuteReader().

Olhei para o codigo nao vi grandes diferenças aparentes, mas ja percebi obrigado

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade