EXECUTAR COMANDO FORA DE INTERVALO [Ô]FOR-NEXT[Ô]

LUART 18/04/2016 12:30:35
#461075
Boa tarde,

Estou com um problema em um projeto que estou desenvolvendo.

o Código é este abaixo:
   
Friend Class FormVac
Dim i As Integer = 0
Dim len As Integer

Private Sub FormVac_Load(sender As Object, e As EventArgs) Handles MyBase.Load
COnnect()
ID()
End Sub

Private Sub COnnect()
cnnStr = New OleDb.OleDbConnection([Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Ô] & My.Application.Info.DirectoryPath & [Ô]\bd.accdb[Ô])
Dc = New OleDb.OleDbCommand([Ô]Select * from vacina order by nome[Ô])
cnnStr.Open()
Dc.Connection = cnnStr
da = New OleDb.OleDbDataAdapter([Ô]Select * from vacina order by nome[Ô], cnnStr)
ds = New DataSet([Ô]vacina[Ô])
len = da.Fill(ds, [Ô]vacina[Ô])
cnnStr.Close()
EnableNavigation() [ô]A importância é que se haver apenas um registro desabilita todos os botões de navegação
End Sub


Sub ID()
Dim no As Integer
For no = 0 To len - 1
If ds.Tables([Ô]vacina[Ô]).Rows(no).Item([Ô]nome[Ô]).ToString.ToLower.Trim = Form1.TxtNome.Text.ToString.ToLower.Trim Then
i = no
Nav()
End If
Next
AddHandler btnNovo.Click, AddressOf btnNovo_Click
End Sub


A ação deste código é procurar se uma pessoa cadastrada (nome mostrado em Form1.TxtNome.Text) tem vacinas no sistema (na tabela vacina se o nome contido em algum registro do campo nome for igual ao da tela inicial que é form1.txtnome.text então é porque tem cadastro). Caso o intervalo for/next for vazio (a pessoa cadastrada não tem cadastro de vacina) e então peço para executar o conteúdo do botão (btnNovo_Click) para exibir um cadastro em branco para preenchimento. Caso o intervalo for/next não for vazio (tiver ocorrência) é porque a pessoa cadastrada já tem cadastro de vacinas, frente à isto, adicionalmente peço para mostrar os dados vacinais do cliente pela função Nav().

O fato é que estou com dificuldades nesta parte: [Ô]Caso o intervalo for/next for vazio (a pessoa cadastrada não tem cadastro de vacina) e então peço para executar o conteúdo do botão (btnNovo_Click) para exibir um cadastro em branco para preenchimento.[Ô]

Como fazer que quando não há ocorrência de registro na tabela vacina, há execução do código AddHandler btnNovo.Click, AddressOf btnNovo_Click ? No que estou errando?

Grato desde já

PERCIFILHO 18/04/2016 12:53:18
#461077
Você quer sair do For...Next, é isso? Não sei se entendi direito.
Tente utilizar o Exit For.
Mais ou menos assim:

        For no = 0 To len - 1
If ds.Tables([Ô]vacina[Ô]).Rows(no).Item([Ô]nome[Ô]).ToString.ToLower.Trim = Form1.TxtNome.Text.ToString.ToLower.Trim Then
i = no
Nav()
Else
Exit For
End If
Next


Isso faz com que sai do laço For...Next e executa o comando logo após o Next.
JABA 18/04/2016 13:09:19
#461078
Resposta escolhida
Sub ID()
Dim no As Integer
[txt-color=#e80000]Dim b As Boolean = False[/txt-color]

For no = 0 To len - 1
If ds.Tables([Ô]vacina[Ô]).Rows(no).Item([Ô]nome[Ô]).ToString.ToLower.Trim = Form1.TxtNome.Text.ToString.ToLower.Trim Then
i = no
Nav()
[txt-color=#e80000]b = True[/txt-color]
End If
Next

[txt-color=#e80000]If (b=False) then[/txt-color] AddHandler btnNovo.Click, AddressOf btnNovo_Click

End Sub

LUART 18/04/2016 16:46:13
#461096
Jaba, a sua lógica resolveu o problema.

Obrigado à todos.
Codigo final:
  Private Sub FormVac_Load(sender As Object, e As EventArgs) Handles MyBase.Load
COnnect()
Dim no As Integer
Dim b As Boolean = False
For no = 0 To len - 1
MsgBox(Form1.TxtNome.Text.ToString.ToLower.Trim)
If ds.Tables([Ô]vacina[Ô]).Rows(no).Item([Ô]nome[Ô]).ToString.ToLower.Trim = Form1.TxtNome.Text.ToString.ToLower.Trim Then
i = no
Nav()
TravaForm()
CountNow()
RefreshData(True)
b = True
End If
Next
If (b = False) Then Call btnNovo_Click(sender, e)
End Sub
Tópico encerrado , respostas não são mais permitidas