USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Gravar dados
Analista
CÁCERES
MT - BRASIL
Postada em 18/08/2006 13:12 hs            
Boa tarde..
Pessoal, tenho um sistema em uma empresa, onde está rodando em 3 micros, e está ocorrendo que, quando estão cadastrando em dois micros ao mesmo tempo, os dados se misturam:São gravados dados de um cliente no cadastro do oucliente que estava sendo feito pelo outro micro.
A instalação do sistema está assim: intalado em um micro que está mapeado nas demais, e nas outras duas coloquei as dlls necessárias e puxei um atalho do sistema para elas.
Já olhei a função onde grava os dados, e não encontro nada de anormal.
Será que alguém sabe o que está acontecendo?
 
Desde já agradeço..
 
Luciano
     
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
Postada em 18/08/2006 13:20 hs            
vc está usando DAO ou ADO?? Qual o processo vc faz para gravar os registros??
     
Analista
CÁCERES
MT - BRASIL
Postada em 18/08/2006 13:42 hs            
Uso o DAO..
Para gravar tenho a seguinte função:
 
Private Function GravaDados()
TBCadBatismo![Registro] = Registro
TBCadBatismo![DtRegistro] = Date
TBCadBatismo![Nome] = Nome
TBCadBatismo![DtBatismo] = DtBatismo
TBCadBatismo![DtNascimento] = DtNascimento
TBCadBatismo![Pai] = Pai
TBCadBatismo![Mãe] = Mãe
TBCadBatismo![Padrinho] = Padrinho
TBCadBatismo![Madrinha] = Madrinha
TBCadBatismo![Padre] = Padre
TBCadBatismo![Livro] = Livro
TBCadBatismo![Folha] = Folha
TBCadBatismo![Termo] = Termo
TBCadBatismo![Paróquia] = Paróquia
TBCadBatismo![Usuário] = MenuPrincipal.StatusBar1.Panels(1)
End Function
E no botão gravar tenho os comandos:
 
Set BancodeDados = OpenDatabase(App.Path & "Dados.Mdb", False, False)
Set TBCadBatismo = BancodeDados.OpenRecordset("CadBatismo", dbOpenTable)
TBCadBatismo.Index = "IndRegistro"
If Nome = Empty Then
    MsgBox ("Informe o nome do batizando!!!")
    Nome.SetFocus
    Exit Sub
End If
If Pai = Empty Then
    MsgBox ("Informe o pai do batizando!!!")
    Pai.SetFocus
    Exit Sub
End If
If Mãe = Empty Then
    MsgBox ("Informe a mãe do batizando!!!")
    Mãe.SetFocus
    Exit Sub
End If
If Padrinho = Empty Then
    MsgBox ("Informe o padrinho do batizando!!!")
    Padrinho.SetFocus
    Exit Sub
End If
If Madrinha = Empty Then
    MsgBox ("Informe a madrinha do batizando!!!")
    Madrinha.SetFocus
    Exit Sub
End If
If Padre = Empty Then
    MsgBox ("Informe o padre celebrante!!!")
    Padre.SetFocus
    Exit Sub
End If
If Livro = Empty Then
    MsgBox ("Informe o livro de registro!!!")
    Livro.SetFocus
    Exit Sub
End If
If Folha = Empty Then
    MsgBox ("Informe a folha de registro!!!")
    Folha.SetFocus
    Exit Sub
End If
If Termo = Empty Then
    MsgBox ("Informe o termo de registro!!!")
    Termo.SetFocus
    Exit Sub
End If
If Paróquia = Empty Then
    MsgBox ("Informe a paróquia onde ocorreu o batizado!!!")
    Paróquia.SetFocus
    Exit Sub
End If
If Alterar = "Alterando" Then
    TBCadBatismo.Seek "=", Registro
    If TBCadBatismo.NoMatch = True Then
        Else
        TBCadBatismo.Edit
            GravaDados
        TBCadBatismo.Update
    End If
Else
    TBCadBatismo.AddNew
        GravaDados
    TBCadBatismo.Update
End If
BotoesGravar
LimpaCampos
DesabilitaCampos
 
     
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
Postada em 18/08/2006 14:07 hs            
Bom, tente fazer o seguinte:
 
1) Não precisa abrir o BD toda vez, abra somente uma vez ao carregar o sistema. Ou no evento load do form principal ou em uma Procedure dentro do módulo:
 
Sub Conecta()
 Set BancodeDados = OpenDatabase(App.Path & "Dados.Mdb", False, False)
End Sub
 
2) Uma funcão retorna valores então pra usar um código q não retornará nada use uma Procedure:
Sub GravaRegistro()
...
End Sub
 
3) Vamos aos conflitos... pelo q percebi vc grava o número do registro da pessoa. Provavelmente uma chave q identifica este registro certo? Bom Não sei como vc gera isto mas tente fazer assim: crie uma tabela => 'TB_RegBatismo'
Nesta tabela vc vai gravar um campo q será o registro da tabela TBCadBatismo.
Cada vez q for gravar vc vai ler este registro, vai incrementá-lo (somar + 1), vai gravar na tabela e jogar o valor numa variável. Assim:
 
Set RsTemp = BancodeDados.OpenRecordset("TBRegBatismo")
 
IF NOT RsTemp.EOF Then variavel = RsTemp(0) 'digamos q "variavel" seja igual a 5
 
variavel = variavel + 1
 
'Atualização do numero do registro incrementado na tabela TBRegBatismo. Sendo NumRegistro tipo numérico
BancodeDados.Execute "UPDATE TBRegBatismo SET NumRegistro = " & variavel
 
call GravarDados(variavel)
 
Sub GravarDados(byval NumeroReg as long)
TBCadBatismo.AddNew
  TBCadBatismo![Registro] = NumeroReg
...
TBCadBatismo.Update
End Sub
 
Ok??
 
Para controlar isso vc pode passar o seu sistema para ADO. Vc abre a tabela com um LockType tipo adLockOptimistic:
 
'Creio q seja assim:
SeuRecordsetADO.Open "Select * From Tabela",SuaConexao,adOpenKeySet,adLockOptimistic
 
Acho q não terá problemas.
 
qq dúvida é só postar
 
t+
TÓPICO EDITADO
   
Analista
CÁCERES
MT - BRASIL
Postada em 20/08/2006 10:54 hs            
Bom dia..
Em 1º lugar obrigado pelas dicas.
Como vc percebeu, gero um código de registro sim.. é gerado no início de tudo, no botão novo, abaixo está o código.
 
    Dim Anterior As Integer
    Dim Atual As Integer
    If TBCadBatismo.BOF = True Then
        Registro = 1
    Else
        Atual = TBCadBatismo("Registro")
        Anterior = 0
        While Not TBCadBatismo.EOF
            If Atual >= Anterior Then
                TBCadBatismo.MoveNext
                Anterior = Atual
                If TBCadBatismo.EOF = True Then
                    Registro = Atual + 1
                    Exit Sub
                Else
                    Atual = TBCadBatismo("Registro")
                End If
            Else
                Atual = Anterior
            End If
        Wend
        TBCadBatismo.MovePrevious
        Registro = Atual
    End If
Mas obrigado, vou ver o que consigo fazer com suas dicas, tenha um bom final de semana.
 
Luciano
     
Página(s): 1/1    

CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página