GRAVAR DADOS
Bom dia
Uso vb6 e Access
na sub abaixo gravo os dados na tabela, mas gostaria que antes de gravar ela conferisse se a NF já existisse e caso existisse me avisasse.
Private Sub GravarDados() [ô]grava os dados na tabela Entrada
If vGravou = False Then
rsEntrada.AddNew
rsEntrada!id = txtID.Text
[txt-color=#e80000]rsEntrada!CodNota = txtNF.Text[/txt-color] rsEntrada!Fornecedor = cboFornec.Text
rsEntrada!Data = txtData.Text
rsEntrada.Update
Else
Exit Sub
End If
End Sub
Não to conseguindo resolver, então se alguem puder ajudar agradeço.
Nereu
Uso vb6 e Access
na sub abaixo gravo os dados na tabela, mas gostaria que antes de gravar ela conferisse se a NF já existisse e caso existisse me avisasse.
Private Sub GravarDados() [ô]grava os dados na tabela Entrada
If vGravou = False Then
rsEntrada.AddNew
rsEntrada!id = txtID.Text
[txt-color=#e80000]rsEntrada!CodNota = txtNF.Text[/txt-color] rsEntrada!Fornecedor = cboFornec.Text
rsEntrada!Data = txtData.Text
rsEntrada.Update
Else
Exit Sub
End If
End Sub
Não to conseguindo resolver, então se alguem puder ajudar agradeço.
Nereu
vc tem de fazer uma consulta antes colega
poste como vc faz suas consultas
poste como vc faz suas consultas
NEREU1301 apesar de eu não usar este tipo de metodo para inserir um registro, daria preferencia a usar (INSERT,UPDATE,DELETE,SELECT) , você pode usar [Ô]find[Ô] antes para ver se existe. acho que isso pode te ajudar http://www.vb-helper.com/howto_dao_find_records.html
Marcelo e Mad Max
eu consulto assim
Private Sub LocalizarRegistro()
Dim ProcuraCodigo As String
Dim rsTemp As ADODB.Recordset
On Error GoTo ErrLocalizacao:
cmdExcluirItem.Enabled = False
ProcuraCodigo = InputBox([Ô]Digite a NF a ser Consultada[Ô])
Set rsEntrada = New ADODB.Recordset
If StrPtr(ProcuraCodigo) = 0 Then [ô] identificando o cancelar
Exit Sub
End If
rsEntrada.Open [Ô]Select * from Entrada Where CodNota = [ô][Ô] & ProcuraCodigo & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
With rsEntrada
If .BOF = True And .EOF = True Then
.MovePrevious
End If
Mostrar
LocItens
End With
Toolbar1.Buttons(3).Enabled = True
txtData.SetFocus
ErrLocalizacao:
With Err
If .Number <> 0 Then
.Number = 0
End If
End With
End Sub
Mas oque eu quero é que conforme vou dando entrada dos produtos comprados, haja uma conferência se a NF já existe ou não automaticamente, isto é sem eu ter que conferir todas as notas antes de ir lançando.
Uma tentaviva foi colocar o GravarDados no LostFocus de um Txt logo no inÃcio do Form mas tá me dando problema.
Não sei se me expliquei direito.
Nereu
eu consulto assim
Private Sub LocalizarRegistro()
Dim ProcuraCodigo As String
Dim rsTemp As ADODB.Recordset
On Error GoTo ErrLocalizacao:
cmdExcluirItem.Enabled = False
ProcuraCodigo = InputBox([Ô]Digite a NF a ser Consultada[Ô])
Set rsEntrada = New ADODB.Recordset
If StrPtr(ProcuraCodigo) = 0 Then [ô] identificando o cancelar
Exit Sub
End If
rsEntrada.Open [Ô]Select * from Entrada Where CodNota = [ô][Ô] & ProcuraCodigo & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
With rsEntrada
If .BOF = True And .EOF = True Then
.MovePrevious
End If
Mostrar
LocItens
End With
Toolbar1.Buttons(3).Enabled = True
txtData.SetFocus
ErrLocalizacao:
With Err
If .Number <> 0 Then
.Number = 0
End If
End With
End Sub
Mas oque eu quero é que conforme vou dando entrada dos produtos comprados, haja uma conferência se a NF já existe ou não automaticamente, isto é sem eu ter que conferir todas as notas antes de ir lançando.
Uma tentaviva foi colocar o GravarDados no LostFocus de um Txt logo no inÃcio do Form mas tá me dando problema.
Não sei se me expliquei direito.
Nereu
tente assim
Private Sub GravarDados() [ô]grava os dados na tabela Entrada
If vGravou = False Then
Set rsEntrada = New ADODB.Recordset
rsEntrada.Open [Ô]Select * from Entrada Where id= [ô][Ô] & txtid.text & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
If Not (rsEntrada.BOF = True And rsEntrada.EOF = True) Then
rsEntrada.AddNew
rsEntrada!id = txtID.Text
rsEntrada!CodNota = txtNF.Text
rsEntrada!Fornecedor = cboFornec.Text
rsEntrada!Data = txtData.Text
rsEntrada.Update
End If
Else
Exit Sub
End If
End Sub
Marcelo
Retorna erro BOF e EOF sao verdadeiros ou regkistro não existe
Já no primeiro registro
Retorna erro BOF e EOF sao verdadeiros ou regkistro não existe
Já no primeiro registro
Sem querer atravessar o MARCELO-TREZE .. ai vai
Private Sub GravarDados() [ô]grava os dados na tabela Entrada
If vGravou = False Then
Set rsEntrada = New ADODB.Recordset
rsEntrada.Open [Ô]Select * from Entrada Where id= [ô][Ô] & txtid.text & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
if rsEntrada.eof then
[ô]Aqui esta inserindo um novo registro
cnnProgSer.execute(insert into Entrada (id,CodNota,Fornecedor,Data) values ( [Ô] & txtID.Text & [Ô],[Ô] & txtNF.Text & [Ô],[ô][Ô] & cboFornec.Text & [Ô][ô],[ô][Ô] & txtData.Text & [Ô][ô][Ô])
endif
Else
Exit Sub
End If
End Sub
So um porem na sua consulta acho que alen do ID deve ser verificado se a nota não existe pois acretido que não possa repetir né
talvez a query do select fique assim [Ô]Select * from Entrada Where codnota = [Ô]¨ & tNF.Text & [Ô] and id= [ô][Ô] & txtid.text & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
como não sei os tipos de campos de sua tabela , não pode esquecer que sempre tem [ô] quando usado o campo da tabela for tipo string.
Private Sub GravarDados() [ô]grava os dados na tabela Entrada
If vGravou = False Then
Set rsEntrada = New ADODB.Recordset
rsEntrada.Open [Ô]Select * from Entrada Where id= [ô][Ô] & txtid.text & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
if rsEntrada.eof then
[ô]Aqui esta inserindo um novo registro
cnnProgSer.execute(insert into Entrada (id,CodNota,Fornecedor,Data) values ( [Ô] & txtID.Text & [Ô],[Ô] & txtNF.Text & [Ô],[ô][Ô] & cboFornec.Text & [Ô][ô],[ô][Ô] & txtData.Text & [Ô][ô][Ô])
endif
Else
Exit Sub
End If
End Sub
So um porem na sua consulta acho que alen do ID deve ser verificado se a nota não existe pois acretido que não possa repetir né
talvez a query do select fique assim [Ô]Select * from Entrada Where codnota = [Ô]¨ & tNF.Text & [Ô] and id= [ô][Ô] & txtid.text & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
como não sei os tipos de campos de sua tabela , não pode esquecer que sempre tem [ô] quando usado o campo da tabela for tipo string.
Mandou bem MAX
Seguinte MadMax
Até deu certo mas acontece que depois de Update abro uma flex que lanço os produtos ref a NF e gera um Total que vai ser lançado na tabela Entrada e por isso o problema vai surgir na sub abaixo, que é um segundo Update.
Private Sub UpdateDados() [ô]atualiza a tabela Entrada
On Error GoTo errUpdateDados
rsEntrada!ValorTotal = Format(txtTotalNF.Text, [Ô]0.00[Ô])
rsEntrada.Update
errUpdateDados:
With Err
If .Number <> 0 Then
MsgBox [Ô]NF já lançada.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
Então vou ver como faço usando a sua idéia. Por enquanto obrigado.
Nereu
Até deu certo mas acontece que depois de Update abro uma flex que lanço os produtos ref a NF e gera um Total que vai ser lançado na tabela Entrada e por isso o problema vai surgir na sub abaixo, que é um segundo Update.
Private Sub UpdateDados() [ô]atualiza a tabela Entrada
On Error GoTo errUpdateDados
rsEntrada!ValorTotal = Format(txtTotalNF.Text, [Ô]0.00[Ô])
rsEntrada.Update
errUpdateDados:
With Err
If .Number <> 0 Then
MsgBox [Ô]NF já lançada.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
Então vou ver como faço usando a sua idéia. Por enquanto obrigado.
Nereu
Bem Amigos
Algumas coisas, em função da minha inexperiência, eu não consigo explicar.
Vejam:
Se eu deixar esta sub com tratamento de erro
Private Sub UpdateDados() [ô]atualiza a tabela Entrada
On Error GoTo errUpdateDados
rsEntrada!ValorTotal = Format(txtTotalNF.Text, [Ô]0.00[Ô])
rsEntrada.Update
errUpdateDados:
With Err
If .Number <> 0 Then
MsgBox [Ô]NF já lançada.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
a sub GravarDados me avisa que a NF já foi lançada, mas não cria novo ID e não consigo lançar nova NF
e assim o problema não ocorre;
Private Sub UpdateDados() [ô]atualiza a tabela Entrada
rsEntrada!ValorTotal = Format(txtTotalNF.Text, [Ô]0.00[Ô])
rsEntrada.Update
End Sub
Gostaria de entender oque ocorre mas vocês me desculpem não sei explicar.
Obrigado a todos.
nereu
Algumas coisas, em função da minha inexperiência, eu não consigo explicar.
Vejam:
Se eu deixar esta sub com tratamento de erro
Private Sub UpdateDados() [ô]atualiza a tabela Entrada
On Error GoTo errUpdateDados
rsEntrada!ValorTotal = Format(txtTotalNF.Text, [Ô]0.00[Ô])
rsEntrada.Update
errUpdateDados:
With Err
If .Number <> 0 Then
MsgBox [Ô]NF já lançada.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
a sub GravarDados me avisa que a NF já foi lançada, mas não cria novo ID e não consigo lançar nova NF
e assim o problema não ocorre;
Private Sub UpdateDados() [ô]atualiza a tabela Entrada
rsEntrada!ValorTotal = Format(txtTotalNF.Text, [Ô]0.00[Ô])
rsEntrada.Update
End Sub
Gostaria de entender oque ocorre mas vocês me desculpem não sei explicar.
Obrigado a todos.
nereu
NEREU1301 não como você esta fazendo , vamos tratar assim quando falar de inserir um registro novo vamos falar INSERT quando apenas quiser alterar um registro ja gravado use UPDATE, sendo assim
quando vocÊfor realizar o update faz assim
Private Sub UpdateDados() [ô]grava os dados na tabela Entrada
Set rsEntrada = New ADODB.Recordset
rsEntrada.Open [Ô]Select * from Entrada Where id= [ô][Ô] & txtid.text & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
if not rsEntrada.eof then
[ô]Aqui esta inserindo um novo registro
cnnProgSer.execute([Ô]update entrada set ValorTotal = [Ô] &txtTotalNF.Text & [Ô] Where id= [Ô] & txtid.text )
else
msgbox [Ô]registro não encontrado[Ô]
endif
End Sub
So para explicar o que faço primeiro dou o select para ver se o registro existe e ai caso exista então apenas atualizo o campo desejado , caso queira mais campos no UPDATE basta separa-los com virgula
quando vocÊfor realizar o update faz assim
Private Sub UpdateDados() [ô]grava os dados na tabela Entrada
Set rsEntrada = New ADODB.Recordset
rsEntrada.Open [Ô]Select * from Entrada Where id= [ô][Ô] & txtid.text & [Ô][ô][Ô], cnnProgServ, adOpenKeyset, adLockReadOnly
if not rsEntrada.eof then
[ô]Aqui esta inserindo um novo registro
cnnProgSer.execute([Ô]update entrada set ValorTotal = [Ô] &txtTotalNF.Text & [Ô] Where id= [Ô] & txtid.text )
else
msgbox [Ô]registro não encontrado[Ô]
endif
End Sub
So para explicar o que faço primeiro dou o select para ver se o registro existe e ai caso exista então apenas atualizo o campo desejado , caso queira mais campos no UPDATE basta separa-los com virgula
Tópico encerrado , respostas não são mais permitidas