Esta a executar o último IF

rubenmsoares

Power Member
Boas,

Pessoal ajudem-me a resolver esta situação, pois não sei que procedimento tomar.

Este código, na fase inicial manda seleccionar o o valor introduzido na textbox.tex,

No primeiro If esta a perguntar se existir valores então vai seleccionar os dados em outra tabela e coloca os dados pretendidos nas textbox.text indicadas.

Se não existir os valor no primeiro select então ele diz na label8.tex que os valores não existem.

Acontecem que ele esta a executar logo o final, sabendo eu que o valor a procurar existe, o que eu estou a fazer mal?

strConnection = ConnectionStrings("GESCOMERCIALConnectionString").ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()


strSQL = "SELECT fidnif, fidsfid FROM sfid_nif WHERE fidnif=@fidnif AND fidsfid=@fidsfid "
dCmd = New SqlCommand(strSQL, dbConn)
dCmd.Parameters.Add(New SqlParameter("fidnif", pesquisanifbox.Text))
dCmd.Parameters.Add(New SqlParameter("fidsfid", Label8.Text))
'dCmd = New SqlCommand(strSQL, dbConn)
Dim rs As SqlDataReader = dCmd.ExecuteReader


If rs.Read() Then
'existem valores??


strConnection = ConnectionStrings("GESCOMERCIALConnectionString").ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()
strSQL = "SELECT nif, nome FROM cliente WHERE nif=@nif AND nome=@nome "
dCmd = New SqlCommand(strSQL, dbConn)
Dim rs1 As SqlDataReader = dCmd.ExecuteReader
If rs1.Read() Then
nifbox.Text = rs1("nif")
nomebox.Text = rs1("nome")
End If
dbConn.Close()


Else
'não existem valores
Label8.Text = "Não existe o Nif indicado"
pesquisanifbox.Text = ""
End If
dbConn.Close()
 
Hum, isso ta um bocado confuso!
Não precisas de abrires 2 conexoes a sql, se ja tens uma aberta, nao precisas abrir outra.

Coloca um breakpoint no codigo e tenta ver onde ele esta a percorrer e o valor associado a cada variavel e mesmo a query.
 
Hum, isso ta um bocado confuso!
Não precisas de abrires 2 conexoes a sql, se ja tens uma aberta, nao precisas abrir outra.

Coloca um breakpoint no codigo e tenta ver onde ele esta a percorrer e o valor associado a cada variavel e mesmo a query.

Obrigado pela resposta,

Indicas então que a onde tenho:
strConnection = ConnectionStrings("GESCOMERCIALConnectionString"). ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()


strSQL = "SELECT fidnif, fidsfid FROM sfid_nif WHERE fidnif=@fidnif AND fidsfid=@fidsfid "
devo também colocar:
strSQL = "SELECT nif, nome FROM cliente WHERE nif=@nif AND nome=@nome "
?
 
Não testei sequer, mas assim de cabeça:

' Inicias a ligação a tua connectionstring
strConnection = ConnectionStrings("GESCOMERCIALConnectionString"). ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()
' tens a ligacao aberta, executas as querys

strSQL = "SELECT fidnif, fidsfid FROM sfid_nif WHERE fidnif=@fidnif AND fidsfid=@fidsfid "
dCmd = New SqlCommand(strSQL, dbConn)
dCmd.Parameters.Add(New SqlParameter("fidnif", pesquisanifbox.Text))
dCmd.Parameters.Add(New SqlParameter("fidsfid", Label8.Text))

Dim rs As SqlDataReader = dCmd.ExecuteReader

If rs.Read() Then
'existem valores??

strSQL = "SELECT nif, nome FROM cliente WHERE nif=@nif AND nome=@nome "
dCmd = New SqlCommand(strSQL, dbConn)
Dim rs1 As SqlDataReader = dCmd.ExecuteReader
If rs1.Read() Then
nifbox.Text = rs1("nif")
nomebox.Text = rs1("nome")
End If

Else

'não existem valores
Label8.Text = "Não existe o Nif indicado"
pesquisanifbox.Text = ""
End If
dbConn.Close()

Agora eu nao percebo o que estas a tentar fazer!

Se é para listar o cliente com aquele nif porque nao fazes logo a pesquisa na tabela clientes por nif?
 
Não testei sequer, mas assim de cabeça:

' Inicias a ligação a tua connectionstring
strConnection = ConnectionStrings("GESCOMERCIALConnectionString"). ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()
' tens a ligacao aberta, executas as querys

strSQL = "SELECT fidnif, fidsfid FROM sfid_nif WHERE fidnif=@fidnif AND fidsfid=@fidsfid "
dCmd = New SqlCommand(strSQL, dbConn)
dCmd.Parameters.Add(New SqlParameter("fidnif", pesquisanifbox.Text))
dCmd.Parameters.Add(New SqlParameter("fidsfid", Label8.Text))

Dim rs As SqlDataReader = dCmd.ExecuteReader

If rs.Read() Then
'existem valores??

strSQL = "SELECT nif, nome FROM cliente WHERE nif=@nif AND nome=@nome "
dCmd = New SqlCommand(strSQL, dbConn)
Dim rs1 As SqlDataReader = dCmd.ExecuteReader
If rs1.Read() Then
nifbox.Text = rs1("nif")
nomebox.Text = rs1("nome")
End If

Else

'não existem valores
Label8.Text = "Não existe o Nif indicado"
pesquisanifbox.Text = ""
End If
dbConn.Close()

Agora eu nao percebo o que estas a tentar fazer!

Se é para listar o cliente com aquele nif porque nao fazes logo a pesquisa na tabela clientes por nif?

Viva,

Só não coloco logo a pesquisa na tabela cliente, porque a primeira selecção vai validar se o nif existe na base dados e associado ao sfid que é o código do utilizador de sessão. Esta validação é realizada através da tabela sfid_nif.

Caso exista então executa-se o acesso a tabela de clientes para ir buscar os dados do cliente e colocar nas textbox correctas.

Tudo isto porque vai existir mais que um utilizador e cada um terá a sua lista de clientes
 
Entretanto consegui resolver o problema com este código.
strConnection = ConnectionStrings("GESCOMERCIALConnectionString").ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()


strSQL = "SELECT * FROM sfid_nif,cliente WHERE fidnif=@fidnif AND fidsfid=@fidsfid AND nif=@nif"


dCmd = New SqlCommand(strSQL, dbConn)
dCmd.Parameters.Add(New SqlParameter("fidnif", pesquisanifbox.Text))
dCmd.Parameters.Add(New SqlParameter("fidsfid", Label1.Text))
dCmd.Parameters.Add(New SqlParameter("nif", pesquisanifbox.Text))

Dim rs As SqlDataReader = dCmd.ExecuteReader


If rs.Read() Then
'existem valores??
Label8.Text = rs("fidnif")
nifbox.Text = rs("nif")
nomebox.Text = rs("nome")
moradabox.Text = rs("morada")
localidadebox.Text = rs("localidade")


Else
'não existem valores
Label8.Text = "Não existe o Nif indicado"
pesquisanifbox.Text = ""
End If
dbConn.Close()

Contudo agora estou em outro dilema.

Caso volte a pesquisar outro nif depois de ter digitado o anterior e ter devolvido a informação e na eventualidade de esse nif não existir como devo limpar os registo anteriores?

Devo colocar



nomebox.Text = ("")
moradabox.Text = ("")
localidadebox.Text = ("")

depois de

Else
'não existem valores
 
Podes fazer assim
nomebox.Text = ""
moradabox.Text = ""
localidadebox.Text = ""

strConnection = ConnectionStrings("GESCOMERCIALConnectionString"). ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()


strSQL = "SELECT * FROM sfid_nif,cliente WHERE fidnif=@fidnif AND fidsfid=@fidsfid AND nif=@nif"


dCmd = New SqlCommand(strSQL, dbConn)
dCmd.Parameters.Add(New SqlParameter("fidnif", pesquisanifbox.Text))
dCmd.Parameters.Add(New SqlParameter("fidsfid", Label1.Text))
dCmd.Parameters.Add(New SqlParameter("nif", pesquisanifbox.Text))

Dim rs As SqlDataReader = dCmd.ExecuteReader


If rs.Read() Then
'existem valores??
Label8.Text = rs("fidnif")
nifbox.Text = rs("nif")
nomebox.Text = rs("nome")
moradabox.Text = rs("morada")
localidadebox.Text = rs("localidade")


Else
'não existem valores
Label8.Text = "Não existe o Nif indicado"
pesquisanifbox.Text = ""
End If
dbConn.Close()
 
Podes fazer assim
nomebox.Text = ""
moradabox.Text = ""
localidadebox.Text = ""

strConnection = ConnectionStrings("GESCOMERCIALConnectionString"). ConnectionString
dbConn = New SqlClient.SqlConnection(strConnection)
dbConn.Open()


strSQL = "SELECT * FROM sfid_nif,cliente WHERE fidnif=@fidnif AND fidsfid=@fidsfid AND nif=@nif"


dCmd = New SqlCommand(strSQL, dbConn)
dCmd.Parameters.Add(New SqlParameter("fidnif", pesquisanifbox.Text))
dCmd.Parameters.Add(New SqlParameter("fidsfid", Label1.Text))
dCmd.Parameters.Add(New SqlParameter("nif", pesquisanifbox.Text))

Dim rs As SqlDataReader = dCmd.ExecuteReader


If rs.Read() Then
'existem valores??
Label8.Text = rs("fidnif")
nifbox.Text = rs("nif")
nomebox.Text = rs("nome")
moradabox.Text = rs("morada")
localidadebox.Text = rs("localidade")


Else
'não existem valores
Label8.Text = "Não existe o Nif indicado"
pesquisanifbox.Text = ""
End If
dbConn.Close()

Obrigado
 
Back
Topo