CADASTRO DE CLIENTES VB.NET
Minha duvida é o seguinte: Eu cadastrei um cliente com certo numero de CPF, caso eu queira cadastrar um novo cliente com o mesmo CPF por exemplo, quero que seja feita uma consulta no banco de dados pra verificar se aquele CPF já esteja cadastrado, caso já esteja não será possÃvel cadastrar.
Eu tentei fazer mas, depois que crio o IF e Else e tento cadastrar qualquer novo cliente aparece um erro assim: [Ô]NÃO Hà LINHA NA POSIÇÃO 0.[Ô] tá aà meu código:
Public Sub Cadastrar()
Dim cn As New SqlConnection(conexao)
Dim comando As New SqlCommand
Dim query As String = [Ô][Ô]
query &= [Ô]Select * from Cadastrocliente where Codigo = [Ô] & txtcodigo.Text
Dim da As New SqlDataAdapter(query, cn)
Dim ds As New DataSet
da.Fill(ds)
If txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô]) Then
MsgBox([Ô]Já existe um cliente com este CPF cadastrado![Ô])
Else
query &= [Ô]insert into Cadastrocliente (Nome_Completo,CPF)[Ô]
query &= [Ô]values ( [ô][Ô] & txtnome.Text & [Ô][ô], [Ô][ô] & CPF.Text & [Ô][ô] )[Ô]
cn.Open()
comando.Connection = cn
comando.CommandText = query
comando.CommandType = CommandType.Text
comando.ExecuteNonQuery()
MsgBox([Ô]Inserido com sucesso![Ô])
Finally
cn.Close()
Ele estava cadastrando normal, mas depois que coloquei o IF/ELSE ele passou a dar o erro que mencionei acima =/
Eu tentei fazer mas, depois que crio o IF e Else e tento cadastrar qualquer novo cliente aparece um erro assim: [Ô]NÃO Hà LINHA NA POSIÇÃO 0.[Ô] tá aà meu código:
Public Sub Cadastrar()
Dim cn As New SqlConnection(conexao)
Dim comando As New SqlCommand
Dim query As String = [Ô][Ô]
query &= [Ô]Select * from Cadastrocliente where Codigo = [Ô] & txtcodigo.Text
Dim da As New SqlDataAdapter(query, cn)
Dim ds As New DataSet
da.Fill(ds)
If txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô]) Then
MsgBox([Ô]Já existe um cliente com este CPF cadastrado![Ô])
Else
query &= [Ô]insert into Cadastrocliente (Nome_Completo,CPF)[Ô]
query &= [Ô]values ( [ô][Ô] & txtnome.Text & [Ô][ô], [Ô][ô] & CPF.Text & [Ô][ô] )[Ô]
cn.Open()
comando.Connection = cn
comando.CommandText = query
comando.CommandType = CommandType.Text
comando.ExecuteNonQuery()
MsgBox([Ô]Inserido com sucesso![Ô])
Finally
cn.Close()
Ele estava cadastrando normal, mas depois que coloquei o IF/ELSE ele passou a dar o erro que mencionei acima =/
Tente o seguinte:
Antes da linha [txt-color=#e80000]If txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô]) Then[/txt-color], é necessário verificar se a consulta retornou algum registro para o objeto Dataset.
Experimente checar a quantidade de registros do Dataset, antes de comparar o CPF, conforme a linha que destaquei acima.
Exemplo:
Antes da linha [txt-color=#e80000]If txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô]) Then[/txt-color], é necessário verificar se a consulta retornou algum registro para o objeto Dataset.
Experimente checar a quantidade de registros do Dataset, antes de comparar o CPF, conforme a linha que destaquei acima.
Exemplo:
If ds.Tables(0).Rows.Count > 0 Then
[txt-color=#007100] [ô] O CPF informado já está cadastrado na base de dados, logo, não permitir o cadastro[/txt-color]
MsgBox [Ô]O CPF informado já está cadastrado na base de dados[Ô]
Return
End If
Fiz assim e ele continua cadastrando, eu acho que é porque ele sempre vai dar um SELECT e comparar com o novo código que foi gerado no auto-incremento, e como nesse novo codigo não tem CPF nenhum pra ele comparar, ele cadastra mesmo tendo um cpf igual
If ds.Tables(0).Rows.Count > 0 Then
if txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô])
MsgBox([Ô]Já existe um cliente com este CPF cadastrado![Ô], MsgBoxStyle.Information, [Ô]Cadastrar Clientes[Ô])
Só exemplo acima, por favor falar onde errei aÃ
If ds.Tables(0).Rows.Count > 0 Then
if txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô])
MsgBox([Ô]Já existe um cliente com este CPF cadastrado![Ô], MsgBoxStyle.Information, [Ô]Cadastrar Clientes[Ô])
Só exemplo acima, por favor falar onde errei aÃ
Coloque seu novo código.
Colocando de forma correta onde ele tem que ficar
acontece um erro.
Colocando de forma correta onde ele tem que ficar
acontece um erro.
Omar, não entendi o que vc disse
A sua consulta está errada.Pequise pelo CPF cadastrado e não pelo código.
Deste jeito qualquer registro vai ser possÃvel cadastrar e vários cpf iguais.
O que o Tecla respondeu.
[txt-color=#e80000]If txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô]). Then[/txt-color]
Não pode fazer este tipo de comparação.
Então poste seu novo com alteração na qual foi citada.
Deste jeito qualquer registro vai ser possÃvel cadastrar e vários cpf iguais.
O que o Tecla respondeu.
[txt-color=#e80000]If txtcpf.Text = ds.Tables(0).Rows(0).Item([Ô]CPF[Ô]). Then[/txt-color]
Não pode fazer este tipo de comparação.
Então poste seu novo com alteração na qual foi citada.
Eu trato no OledbException, definindo no banco de dados esse campo como chave primaria.
Mas eu utilizo bd Access.
Abraço
Mas eu utilizo bd Access.
Abraço
se for possÃvel colocar o CPF como chave, estará resolvido
cpf igual dará erro o qual pode ser tratado com Try Catch
cpf igual dará erro o qual pode ser tratado com Try Catch
se for possÃvel colocar o CPF como chave, estará resolvido
cpf igual dará erro o qual pode ser tratado com Try Catch
unico porém e que o CPF não poderá ser em branco ou nulo
cpf igual dará erro o qual pode ser tratado com Try Catch
unico porém e que o CPF não poderá ser em branco ou nulo
Cara, altera essa linha lá em cima no seu código:
query &= [Ô]Select * from Cadastrocliente where Codigo = [Ô] & txtcodigo.Text
para
query &=[Ô]SELECT * FROM Cadastrocliente WHERE CPF=[ô][Ô] & txtcpf.text & [Ô][ô][Ô]
OBS: lembrando que a aspa simples é para caso o campo na tabela seja texto
query &= [Ô]Select * from Cadastrocliente where Codigo = [Ô] & txtcodigo.Text
para
query &=[Ô]SELECT * FROM Cadastrocliente WHERE CPF=[ô][Ô] & txtcpf.text & [Ô][ô][Ô]
OBS: lembrando que a aspa simples é para caso o campo na tabela seja texto
Deu certo Damasceno! o erro estava na falta das aspas simples, o meu campo CPF está como maskedtextbox então não tinham apenas números, mas letras também (ex: pontos e traços de separação da mascara) então eu fiz assim:
Dim cn As New SqlConnection(conexao)
Dim comando As New SqlCommand
Dim query As String = [Ô][Ô]
query &= [Ô]SELECT * FROM Cadastrocliente WHERE CPF=[ô][Ô] & txtcpf.Text & [Ô][ô][Ô]
Dim da As New SqlDataAdapter(query, cn)
Dim ds As New DataSet
da.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
MsgBox([Ô]Já existe um cliente com este CPF cadastrado![Ô])
else etc....
Agradeço a todos que tentaram me ajudar ^^ Obrigado!!
Dim cn As New SqlConnection(conexao)
Dim comando As New SqlCommand
Dim query As String = [Ô][Ô]
query &= [Ô]SELECT * FROM Cadastrocliente WHERE CPF=[ô][Ô] & txtcpf.Text & [Ô][ô][Ô]
Dim da As New SqlDataAdapter(query, cn)
Dim ds As New DataSet
da.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
MsgBox([Ô]Já existe um cliente com este CPF cadastrado![Ô])
else etc....
Agradeço a todos que tentaram me ajudar ^^ Obrigado!!
Tópico encerrado , respostas não são mais permitidas