GRAVAR DADOS

NEREU1301 16/06/2010 09:09:10
#344953
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
MARCELO.TREZE 16/06/2010 09:22:38
#344955
vc tem de fazer uma consulta antes colega

poste como vc faz suas consultas
MADMAX 16/06/2010 09:22:50
#344956
Resposta escolhida
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
NEREU1301 16/06/2010 09:39:44
#344958
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
MARCELO.TREZE 16/06/2010 09:55:57
#344962
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
NEREU1301 16/06/2010 10:44:15
#344968
Marcelo

Retorna erro BOF e EOF sao verdadeiros ou regkistro não existe

Já no primeiro registro
MADMAX 16/06/2010 10:57:00
#344971
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.
MARCELO.TREZE 16/06/2010 11:45:22
#344981
Mandou bem MAX
NEREU1301 16/06/2010 14:37:49
#345009
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

NEREU1301 16/06/2010 15:49:47
#345018
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

MADMAX 16/06/2010 16:26:57
#345020
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
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas