RUN-TIME ERROR 3021
[ô]Boas...
[ô]Estou há algum tempo [ô]brigando[ô] com uma rotina de salvar dados num pequeno project que
[ô]construi em VB6, para controlar meus filmes em DVD...
[ô]O que ocorre é o seguinte: após clicar no botão <Novo>, uma msgbox pergunta se confirma
[ô]salvar o registro. Clicando em <Sim>, outra msgbox informa que o registro foi salvo com
[ô]sucesso. Nesse momento, os campos <Titulo> e <Diretor> são apagados do form, e uma msg
[ô]de erro <Run-time error [ô]3021[ô] - No current record> é exibida. A seguir, o aplicativo é descar-
[ô]regado... Todavia, o novo registro não se perdeu. Ou seja, foi gravado com sucesso, mas um
[ô]erro foi reportado, fazendo com que o programa seja encerrado...
[ô]Abaixo, o código do botão <Novo>, onde poderão observar como funciona no caso de um novo
[ô]registro:
Private Sub cmdGravarNovo_Click()
If MsgBox([Ô]Confirma gravar o novo registro? [Ô], vbQuestion + vbYesNo, [Ô]Gravar novo registro[Ô]) = vbNo Then
Call LimpaTudo
Call Invisible
If lstAtores.Visible = True Then lstAtores.Visible = False
If cmdGravarNovo.Visible = True Then
MsgBox [Ô]Novo registro cancelado.[Ô]
End If
cmdGravarNovo.Visible = False
cmdEditaReg.Visible = False
cmdCancelaTudo.Visible = False
mnuAcessar.Enabled = True
mnuUtilitarios.Enabled = True
mnuSair.Enabled = True
mnuDica.Enabled = True
Exit Sub
Else
Dim P As String, S As String
TabelaFilmes.AddNew
AtualizaCampos
TabelaFilmes.Update
cmdLimpa.Visible = False
cmdCancela.Visible = False
mnuAcessar.Enabled = True
mnuUtilitarios.Enabled = True
mnuDica.Enabled = True
P = txtNumero
S = txtNome
Call LimpaTudo
lblDef.Caption = [Ô][Ô] [ô]Novo campo (Define)
frameSinopse.Enabled = False
frameDados.Visible = False
frameAtores.Visible = False
frameDemaisAtores.Visible = False
frameSinopse.Visible = False
If lstAtores.Visible = True Then lstAtores.Visible = False
TabelaFilmes.MoveLast
cmdGravarNovo.Visible = False
cmdCancelaTudo.Visible = False
MsgBox [Ô]O filme nº < [Ô] & P & [Ô] > foi[Ô] & vbNewLine & _
[Ô]gravado com sucesso...[Ô], vbInformation, [Ô]Filme: <[Ô] & S & [Ô]>[Ô]
TabelaAlterada = True [ô]Ajusta o sistema para o backup no evento <Unload>...
End If
End Sub
[ô]A função <LimpaTudo> varre todas as textboxes e combos, zerando seu conteúdo. E <Invisible> oculta todos
[ô]os frames (containers) que contêm as texts e combos de entrada de dados...
[ô]Não consigo enxergar onde é que a rotina de gravação tenta encontrar algum registro inexistente, gerando o
[ô]erro citado... Onde é que estou cometendo alguma gafe?
[ô](Obs.: o VB6 roda no Win7 64 bits. Todas as bibliotecas/ocx/dll[ô]s estão funcionando corretamente nessa
[ô]plataforma..).
[ô]Estou há algum tempo [ô]brigando[ô] com uma rotina de salvar dados num pequeno project que
[ô]construi em VB6, para controlar meus filmes em DVD...
[ô]O que ocorre é o seguinte: após clicar no botão <Novo>, uma msgbox pergunta se confirma
[ô]salvar o registro. Clicando em <Sim>, outra msgbox informa que o registro foi salvo com
[ô]sucesso. Nesse momento, os campos <Titulo> e <Diretor> são apagados do form, e uma msg
[ô]de erro <Run-time error [ô]3021[ô] - No current record> é exibida. A seguir, o aplicativo é descar-
[ô]regado... Todavia, o novo registro não se perdeu. Ou seja, foi gravado com sucesso, mas um
[ô]erro foi reportado, fazendo com que o programa seja encerrado...
[ô]Abaixo, o código do botão <Novo>, onde poderão observar como funciona no caso de um novo
[ô]registro:
Private Sub cmdGravarNovo_Click()
If MsgBox([Ô]Confirma gravar o novo registro? [Ô], vbQuestion + vbYesNo, [Ô]Gravar novo registro[Ô]) = vbNo Then
Call LimpaTudo
Call Invisible
If lstAtores.Visible = True Then lstAtores.Visible = False
If cmdGravarNovo.Visible = True Then
MsgBox [Ô]Novo registro cancelado.[Ô]
End If
cmdGravarNovo.Visible = False
cmdEditaReg.Visible = False
cmdCancelaTudo.Visible = False
mnuAcessar.Enabled = True
mnuUtilitarios.Enabled = True
mnuSair.Enabled = True
mnuDica.Enabled = True
Exit Sub
Else
Dim P As String, S As String
TabelaFilmes.AddNew
AtualizaCampos
TabelaFilmes.Update
cmdLimpa.Visible = False
cmdCancela.Visible = False
mnuAcessar.Enabled = True
mnuUtilitarios.Enabled = True
mnuDica.Enabled = True
P = txtNumero
S = txtNome
Call LimpaTudo
lblDef.Caption = [Ô][Ô] [ô]Novo campo (Define)
frameSinopse.Enabled = False
frameDados.Visible = False
frameAtores.Visible = False
frameDemaisAtores.Visible = False
frameSinopse.Visible = False
If lstAtores.Visible = True Then lstAtores.Visible = False
TabelaFilmes.MoveLast
cmdGravarNovo.Visible = False
cmdCancelaTudo.Visible = False
MsgBox [Ô]O filme nº < [Ô] & P & [Ô] > foi[Ô] & vbNewLine & _
[Ô]gravado com sucesso...[Ô], vbInformation, [Ô]Filme: <[Ô] & S & [Ô]>[Ô]
TabelaAlterada = True [ô]Ajusta o sistema para o backup no evento <Unload>...
End If
End Sub
[ô]A função <LimpaTudo> varre todas as textboxes e combos, zerando seu conteúdo. E <Invisible> oculta todos
[ô]os frames (containers) que contêm as texts e combos de entrada de dados...
[ô]Não consigo enxergar onde é que a rotina de gravação tenta encontrar algum registro inexistente, gerando o
[ô]erro citado... Onde é que estou cometendo alguma gafe?
[ô](Obs.: o VB6 roda no Win7 64 bits. Todas as bibliotecas/ocx/dll[ô]s estão funcionando corretamente nessa
[ô]plataforma..).
esse erro ocorre quando o record set nao retorna nada, ou seja verifique a ( AtualizaCampos ) ou outra funcao que esta sendo executada junto a esta rotina, click no TabelaFilmes.Update e precione F9 e manda executar, para conferir se é mesmo no AtualizaCampos
qualquer duvida post novamente.
qualquer duvida post novamente.
Valeu Robson...
Vou dar uma revisada geral no sistema, Ã cata do erro.
Obrigado pela colaboração.
Vou dar uma revisada geral no sistema, Ã cata do erro.
Obrigado pela colaboração.
Tópico encerrado , respostas não são mais permitidas