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

passado

Testar existencia de registo

14 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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().

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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