CADASTRO DE CLIENTES VB.NET

MIYAVI 22/02/2014 01:40:14
#435138
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 =/
TECLA 22/02/2014 06:43:28
#435140
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:
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
MIYAVI 22/02/2014 16:49:31
#435154
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í
OMAR2011 22/02/2014 17:44:05
#435156
Coloque seu novo código.
Colocando de forma correta onde ele tem que ficar
acontece um erro.
MIYAVI 23/02/2014 14:31:36
#435168
Omar, não entendi o que vc disse
OMAR2011 23/02/2014 15:41:39
#435171
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.
MITSUEDA 24/02/2014 07:41:49
#435195
Eu trato no OledbException, definindo no banco de dados esse campo como chave primaria.

Mas eu utilizo bd Access.

Abraço
JCM0867 24/02/2014 10:48:24
#435204
se for possível colocar o CPF como chave, estará resolvido
cpf igual dará erro o qual pode ser tratado com Try Catch
JCM0867 24/02/2014 10:51:17
#435205
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
DAMASCENO.CESAR 24/02/2014 16:57:56
#435230
Resposta escolhida
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
MIYAVI 24/02/2014 17:26:56
#435232
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!!
Tópico encerrado , respostas não são mais permitidas