Jump to content
  • 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

Recommended Posts

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

Share this post


Link to post
Share on other 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") " ?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
duduml

já experimentas-te da minha maneira??

já tentas-te DR.item ou algo do genero?

CUMPS


"use windows, você merece!"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.