Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

jobrufali

Função para verificar se um valor já existe na BD

Mensagens Recomendadas

jobrufali

Estou a fazer um programa para a empresa e pretendia uma função que verificasse se o valor que se está a inserir ja existe na base de dados...

o codigo que tenho actualmente e este mas nao funciona:

Dim strSQL As String = "SELECT nome_documento FROM empresa WHERE nome_documento = " & nome_doc.Text

	Dim conn As New OleDb.OleDbConnection()

conn.ConnectionString= " Provider=Microsoft.Jet.OLEDB.4.0;" & _
	                        " Data Source=C:\BaraScript\cei.mdb;"
	 Dim cmd As OleDb.OleDbCommand = conn.CreateCommand
	 cmd.Connection = conn

cmd.CommandText ="Insert into empresa (nome_documento, nome_ficheiro, url) values('"& nome_doc.Text & "','"& nome_fich.Text & "', '" & link.Text &"')"
     
     
   
     
     
     Try
	 	conn.open()
	 	'DR = Cmd.ExecuteReader

	 	  If (strSQL = nome_doc.Text) Then
                    MsgBox.show("Esse nome ja existe")

	 		else
	 	cmd.ExecuteNonQuery()
	 	messagebox.Show("registo inserido com sucesso)
	 	end if
	 	conn.Close()

	 Catch erro As Exception
	 	messagebox.Show("Erro" & vbCrlf & erro.tostring)
	 End Try

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmaster

Corrijam me se estiver errado.. mas tu estas a ver se a tua query é igual ao nome_doc..

If (strSQL =  nome_doc.Text) Then

Durante os teste alguma vez te apareceu a message box " MsgBox.show("Esse nome ja existe") " ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

nepia nunca apareceu...o problema e esse....ou tou a faxer a query a ver se o nome ke ta na caixa de texto ja existe na base de dados.....pk eu kero ke xe o nome ja existir ele avise e nao o insira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmaster

Não testei mas experimenta assim:

                 Try
                        conn.open()
                        DR = Cmd.ExecuteReader
                       
                          If (DR("nome_documento").tostring = nome_doc.Text) Then
                                 MsgBox.show("Esse nome ja existe")
                       
                           else
                                 cmd.ExecuteNonQuery()
                                 messagebox.Show("registo inserido com sucesso")
                           end if
                           conn.Close()
       
                 Catch erro As Exception
                        messagebox.Show("Erro" & vbCrlf & erro.tostring)
                 End Try

Assim recolhes o valor que te retorna a query e comparas com a tua textbox nome_doc

Vê se ja ficou a funcionar

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

ja tentei e nao da dame erro :S

nem seker me da pa executar o programa :S

nem seker me deixa declarar o DR como string e nao faz a conversao do valor para string

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

esta-me a dar um erro por causa do if. Esta a dizer:

erro

System.indexOutOfRangeException: nome_documento

at System.data.oledb.oledbdatareader.getordinal(string name)

at System.data.oledb.oledbdatareader.get_item(string name)

nao faço ideia do que ta a faltar aqui.....

:S

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmaster

Penso que será por não ter feito o read ao DR..

Tenta assim:

Try
                        conn.open()
                        DR = Cmd.ExecuteReader
                       while DR.read
                           If (DR("nome_documento").tostring = nome_doc.Text) Then
                                 MsgBox.show("Esse nome ja existe")
                       
                           else
                                 cmd.ExecuteNonQuery()
                                 messagebox.Show("registo inserido com sucesso")
                           end if
                       end while 
                        
                           conn.Close()
       
                 Catch erro As Exception
                        messagebox.Show("Erro" & vbCrlf & erro.tostring)
End Try

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmaster

Então faz degub Só assim podes ver o que se está a passar.. Ou coloca uma message box a que o que ele te passa no if.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

ja fiz messagebox em tudo o ke podia e inda nao consegui descobrir onde esta o erro disto :S

nao me consegues ajudar? :X

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

if dr.hasrows = true

msg("ja existe")

Se queres apenas saber se há algo igual põe assim......tanta confusão para nada ...:thumbsup:  xD

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

fds ja tou a entrar em tilt com isto lol

agora tame a dixer ke ja existe um datareader associado a este comando e tem de ser fechado 1°

:S

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

isso eu sei.....mas sei la o ke e......tive a procurar na net e isto e por causa de ter 1 comando pa inserir e outro pa faxer select :X

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

é mais simples que o que tu pensas...põe ai o código que eu corrijo...(não sei se explicava bem...:thumbsup: )

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Que filme que para aí vai..

Basta algo semelhante:

Try
            ' Connexão com a Base de dados;
            Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & My.Application.Info.DirectoryPath & "\BD.mdb';Persist Security Info=True;"
            ' Criação da query para seleccionar os dados provenientes das tabelas;
            Dim query As String = "SELECT dado1 FROM tabela WHERE [dado1] = @dado1"
            ' Cria a connexão;
            Dim connection As New OleDbConnection(myConnectionString)
            ' Define os parametros a serem mostrados;
            Dim command As New OleDbCommand(query, connection)
            command.Parameters.Add("@dado1", OleDbType.VarChar).Value = TextBox1.Text
            ' Abre a connexão;
            connection.Open()

            ' Caso obtenha um número, então:
            If command.ExecuteScalar > 0 Then
                ' Fazes o UPDATE
            Else
                ' Fazes o INSERT
            End If
            ' Fecha a connexão e limpa as variáveis;
            connection.Close()
            connection = Nothing
            command = Nothing
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try

Nota: O código é para a base de dados access, troca o que achares necessário.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

Também é valido... :thumbsup:

Mas pegando no código dele, eu faria assim....

Dim strSQL As String = "SELECT nome_documento FROM empresa WHERE nome_documento = " &  nome_doc.Text
Dim conn As New OleDb.OleDbConnection()

conn.ConnectionString= " Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                        " Data Source=C:\BaraScript\cei.mdb;"
                 Dim cmd As OleDb.OleDbCommand = conn.CreateCommand
                 cmd.Connection = conn
             Try
                        conn.open()
                        DR = Cmd.ExecuteReader
                       
                          If DR.hasrows = True Then
                    MsgBox.show("Esse nome ja existe")
                       
                                else
   cmd.CommandText ="Insert into empresa (nome_documento, nome_ficheiro, url) values('"& nome_doc.Text & "','"& nome_fich.Text & "', '" & link.Text &"')"
                        cmd.ExecuteNonQuery()
                        messagebox.Show("registo inserido com sucesso")
                        end if
                        conn.Close()
       
                 Catch erro As Exception
                        messagebox.Show("Erro" & vbCrlf & erro.tostring)
                 End Try
    

algo assim....não testei! mas se pusesses aqui o código todo, era melhor!

CUMPS


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

O codigo todo eu ja o postei. O problema e que eu ja testei isto de toda a menira e feitio e ele da-me sempre erro.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

bioshock tambem não funciona. Já testei. O código resultante é o seguinte:

Try

            ' Connexão com a Base de dados;

            Dim myConnectionString As String = " Provider=Microsoft.Jet.OLEDB.4.0;" & _

                        " Data Source=C:\BaraScript\cei.mdb;"

            ' Criação da query para seleccionar os dados provenientes das tabelas;

            Dim query As String = "SELECT nome_documento FROM cei WHERE nome_documento = " & nome_doc.Text

            ' Cria a connexão;

            Dim connection As New OleDbConnection(myConnectionString)

            ' Define os parametros a serem mostrados;

            Dim command As New OleDbCommand(query, connection)

            command.Parameters.Add("nome_documento", OleDbType.VarChar).Value = nome_doc.Text

            ' Abre a connexão;

            connection.Open()

            ' Caso obtenha um número, então:

            If command.ExecuteScalar > 0 Then

                messagebox.Show("Já existe")

            Else

              Dim cmd As OleDb.OleDbCommand = connection.CreateCommand

              cmd.CommandText = "Insert into cei (nome_documento, nome_ficheiro, url) values('"& nome_doc.Text & "','"& nome_fich.Text & "', '" & link.Text &"')"

            End If

            ' Fecha a connexão e limpa as variáveis;

            connection.Close()

            connection = Nothing

            command = Nothing

        Catch ex As Exception

            MessageBox.Show(ex.ToString)

        End Try

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jobrufali

conversion to string "" to type double is not valid

e depois a linha do erro diz que e na mesma linha em que esta o if

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.