FUNCTION PARA GERAR CODIGO

ABDON 10/09/2009 15:45:08
#322515
boa tarde,
preciso criar um função para gerar código automático para cadastro,
sei gerar o código, porem quero criar um função em módulo para gerar o código ao invés de
fazer a mesma rotina para todos os formulários.
se alguem puder me ajudar!!!!

vlw[ô]s
ABDON 10/09/2009 15:54:22
#322517
Altem alguma idéia de como se faz!?!!??????????????????
LEANDRO 10/09/2009 15:55:35
#322518
Cara nao precisa gerar codigo automatica, se você tiver uma Chave Primaria na sua tabela ira fazer isso automaticamente
RICK 10/09/2009 15:57:03
#322519
ABDON, BOA TARDE.

SE ESTE CÓDIGO FOR SEQUENCIAL E ESTIVER GRAVADO EM UM BANCO BASTA UTILIZAR ESTE CÓDIGO:

[txt-size=2][ô]Visualização do código
lblCodigo.Text = GeraCodigo

[ô]Função
Function GeraCodigo() As Long
Dim sql As String
[ô]Função que retorna o próximo codigo de da tabela

sql = [Ô]SELECT MAX(Codigo) [Ô]
sql = sql & [Ô] AS codigo [Ô]
sql = sql & [Ô] FROM tabela[Ô]

If Not rs.EOF Then

GeraCodigo = CLng(rs!Codigo) + 1

End If


[ô]Depois é só inserir[/txt-size]


ATT.

RICK

TECLA 10/09/2009 16:03:57
#322522
Citação:

...sei gerar o código, porem quero criar um função em módulo para gerar o código ao invés de
fazer a mesma rotina para todos os formulários.



Como está gerando o código?
A aplicação rodando em ambiente de rede, a forma como está gerando é segura quanto à anti-duplicidade?
ABDON 10/09/2009 16:14:47
#322523
If TTurmas.Recordset.RecordCount = 0 Then
Num = 1
Else
TTurmas.RecordSource = [Ô]SELECT * FROM Turmas ORDER BY Codigo[Ô]
TTurmas.Refresh

TTurmas.Recordset.MoveLast
Num = TTurmas.Recordset([Ô]Codigo[Ô]) + 1
End If

Dessa forma não é totalmente eficas à duplicidade de código, uso esse código porque
permito o usuário decidir se vai reaproveitar código ou não.
ABDON 10/09/2009 16:16:56
#322524
if TTurmas.Recordset.RecordCount = 0 Then
Num = 1
Else
TTurmas.RecordSource = [Ô]SELECT MAX(Codigo) as XCodigo FROM Turmas ORDER BY Codigo[Ô]
TTurmas.Refresh

Num = TTurmas.Recordset([Ô]XCodigo[Ô]) + 1
End If

Poderia usar assim também.
ABDON 10/09/2009 16:18:17
#322525
Alias nem precisa do SELECT poderia ser assim:

If TTurmas.Recordset.RecordCount = 0 Then
Num = 1
Else
Num = TTurmas.Recordset.RecordCount + 1
End If
TECLA 10/09/2009 16:30:41
#322526
Citação:

Dessa forma não é totalmente eficas à duplicidade de código, uso esse código porque
permito o usuário decidir se vai reaproveitar código ou não.



Partindo deste princípio, tente assim:

Public Function GerarCod() As Double
if TTurmas.Recordset.RecordCount = 0 Then
GerarCod = 1
Else
TTurmas.RecordSource = [Ô]SELECT MAX(Codigo) as XCodigo FROM Turmas ORDER BY Codigo[Ô]
TTurmas.Refresh
GerarCod = CDbl(TTurmas.Recordset([Ô]XCodigo[Ô])) + 1
End If
End Function


Para chamar...
Text1 = GerarCod


Funciona desde que o RECORDSET esteja acessível no escopo da função.
ABDON 10/09/2009 16:40:20
#322528
mas com SELECT MAX e com o RECORDCOUNT + 1 vai dar erro tava analisando aqui, por exemplo tenho os seguintes registro:

Código | Nome
1 A
2 B
3 C

deleto o segundo registro,

Código | Nome
1 A
3 C

quando for add mais um vai dar duplicidade de código, o geito que fasso é mais correto

Código | Nome
1 A
3 C quantidade de resgistros = 2 + 1 = 3 , código é chave primaria, não funciona.
3 D








MARCELO.TREZE 10/09/2009 21:55:55
#322563
Pergunta basica está usando o controle DataControl, é isto?

Página 1 de 2 [19 registro(s)]
Tópico encerrado , respostas não são mais permitidas