Ir para conteúdo
Fórum Script Brasil
  • 0

Access Em Rede Com Vb6


ventrue_rj

Pergunta

fala galera...

bom, como é um tópico, vou explicar meu projeto...

tenho um banco de dados em Access num Servidor que está compartilhado p/ 50 máquinas + ou - numa determinada unidade "K:\TESTE" (onde TESTE é a pasta do servidor) e o arquivo já está pronto em back-end e os forms estão feitos no VB6.

O sistema tem um controle de usuários, eles devem se logar e o sistema registra o setor em que o usuário trabalha.

quando eles incluem um registro no banco *processos(ele possui um campo autonumérico, PK), o sistema cadastra sem problemas e não existe nenhum erro...(testado e finalizado)... o problema é quando precisamos cadastrar documentos... o bco *documentos possui um campo(autonumérico,PK) e eu preciso que o sistema crie um nº de registro p/ o referido documento e imprima na tela(isso ele já está fazendo)... esse nº de registro é um número ordenado/ano do registro e quando o ano mudar, o contador tem q ser zerado... (feito por código e funcionando), está funcionando perfeitamente, mas somente qd 1 usuário inclui o registro, se várias pessoas registram ao mesmo tempo, ele gera o mesmo nº p/ todos! mad.gif

ex: se 4 pessoas incluírem um registro ao mesmo tempo, e o último registro for o 12/2005, todos os registros retornam o nº 13/2005, para os respectivos usuários!

vejam o código e me ajudem a solucionar o problema! rs

Private Sub Salvar_Click()
Dim aux1 As String
Dim aux2 As String
Dim aux3 As String
Dim aux4 As String
Dim anoo As String
Dim numm As String
Dim codd As Integer
Dim espaco As String
Dim c As String
espaco = "/"
aux1 = Val(Mid(aux9, 7, 1))      'recebe o 1º dígito do ano que está em aux9 (no evento Load do form)
aux2 = Val(Mid(aux9, 8, 1))      'recebe o 2º dígito do ano que está em aux9
aux3 = Val(Mid(aux9, 9, 1))      'recebe o 3º dígito do ano que está em aux9
aux4 = Val(Mid(aux9, 10, 1))    'recebe o 4º dígito do ano que está em aux9
anoo = aux1 + AUX2 + aux3 + aux4      'var que recebe o ano atual
If Data1.Recordset.RecordCount <> 0 Then
 Data1.Recordset.MoveLast
 c = Data1.Recordset("ano")      'recebe o ano do último registro cadastrado
 If c = anoo Then        'se ano atual = ano do último registro
  codd = Val(Data1.Recordset("cod_doc")) + 1     'add 1 ao codigo do último registro
 Else
  codd = Str$(1)       'senão zera o contador p/ o ano novo do registro
 End If
Else
 codd = Str$(1)     'se não existir nenhum registro, ele recebe 1
End If
numm = LTrim(Str$(codd)) + espaco + anoo     'var q recebe o código no formato q vai ser mostrado ao usuário modo (XXXX/200X)
Label11.Caption = numm
Label9.Caption = codd
Label10.Caption = anoo
 If Data1.Recordset.RecordCount <> 0 Then      'inclusão do registro
    Data1.Refresh
 End If
 Data1.Recordset.AddNew
 Data1.Recordset("ano") = Label10.Caption
 Data1.Recordset("cod_format") = Label11.Caption
 Data1.Recordset("tipo") = DBCombo1
 Data1.Recordset("descricao") = Text4
 Data1.Recordset("anexado") = MaskEdBox1
 Data1.Recordset("dt_ent") = Label12
 Data1.Recordset("hr_ent") = Label8
 Data1.Recordset("cod_doc") = Label9.Caption
 Data1.Recordset.Update
 Form16.Label3.Caption = numm
 DBCombo1.Enabled = False
 Call Desabilitar(Me)
 Cancelar.Enabled = False
 Adicionar.Enabled = True
 Salvar.Enabled = False
 Call Limpar_Campos(Me)
 Label14.Caption = ""
 DBCombo1.Text = ""
 Form16.Show
 Unload Me
End Sub

alguma sugestão????

fico no aguardo...

abraços

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

O problema no caso é que ao pegar o último código da tabela, ele permanece como último e somente depois que o registro é inserido é que ele passa a não ser mais o último (já que o inserido é que é o último agora). Por exemplo, o último código é 12, aí o primeiro usuário pega ele na tela de inclusão e em sua tela aparece o 13, porém um segundo usuário também abre a tela de inclusão antes que o primeiro finalize o registro. Então, qual é o último registro? O 12 ainda, já que o carinha do 13 ainda não finalizou. Por isso esse segundo também fica com o 13 (12+1).

Se você quer mesmo fazer esse controle manual, você pode optar por inserir o registro no momento em que o código é gerado, mesmo que os demais campos fiquem em branco (o que pode ser um problema). Daí, se o cara pegou o 13 (12+1), então será gerado um registro com o campo código com 13. Se outro vier em seguida, será gerado para ele o código 14 (já que o 13 está lá) e assim por diante.

Outra solução para isso, e que é a que eu particularmente utilizo, é criar uma tabela de códigos, onde existe apenas um registro e onde é feito esse incremento (também no mesmo momento do exemplo acima). Daí, haveria uma tabela chamada Códigos com um campo chamado Cod_Doc. Quando o primeiro usuário fosse incluir algo, pegar-se-ia o valor em Cod_Doc da tabela Códigos, somar-se-ia +1 a ele e armazenar-se-ia ele sobre o valor anterior (13 viraria 14). Qualquer usuário que vier depois vai pegar o 14 e guardar lá o 15 (para o próximo vir pegá-lo e este armazenar o 16 e assim por diante).

Sacou? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...