SQL GERANDO ID

IRENKO 25/02/2011 10:49:16
#366562
Com o codigo abaixo gero numero sequencial corretamente, agora tenho uma dúvida:

tenho um campo (MES) onde quardo o seguinte texto;

JANEIRO/2011 com o numero de Id (Controle) 0001

na sql abaixo como faço a pequisa se igual a JANEIRO/2011 eu somo + 1, se diferente, ou seja, FEVEREIRO/2011 eu começo de 0001? Nõ sei se fui claro!

Private Sub GeraID()
[ô]Gerando codigos sequenciais de acordo com o ultimo reg
Set RstID = New ADODB.Recordset

If RstID.State = 1 Then _
RstID.Close

RstID.Open [Ô]SELECT DISTINCT MAX(Controle) AS Controle FROM Dados[Ô], _
ConexaoCartao, adOpenForwardOnly, adLockReadOnly
With RstID
If .EOF = True And .BOF = True Then
N_ID = [Ô]1[Ô]
Else
.MoveLast
N_ID = Val(.Fields([Ô]Controle[Ô])) + 1
End If
Txt_ID.Text = Format(N_ID, [Ô]0000[Ô])
End With
RstID.Close
Set RstID = Nothing
End Sub
IRENKO 25/02/2011 11:33:27
#366566
Veja bem, na hora que gero o codigo tenho que verificar o texto campo (MES) no caso JANEIRO/2011 existe na tabela com o ID de 0001 ai somo + 1, ficaria:

JANEIRO/2011 ID 0001
JANEIRO/2011 ID 0002.......... e assim por diante

agora na hora da pesquisa eu verificar que o texto FEVEREIRO/2011 não existe então eu gravo:

FEVEREIRO/2011 ID 0001
RPMARQUES 25/02/2011 11:36:36
#366568
ñ entendi muito bem...mas se tu quer fazer automatico a numeração do ID
tu pode faze usando o recordcount

depois de conectado faz iso
if tabela.recordcount<1 then
variavel =1
else
variavel = val(tabela!CAMPO) + 1
endif


ñ é isso???
ñ entedi muito bem o q tu quiz dizer..
MARCELO.TREZE 25/02/2011 11:39:02
#366569
tenta isto, tire o movelast de seu código
pois query ja pega o ultimo ID, e também tirei o distinct

If RstID.State = 1 Then  RstID.Close

RstID.Open [Ô]SELECT MAX(Controle) AS Controle FROM Dados[Ô], _
ConexaoCartao, adOpenForwardOnly, adLockReadOnly
With RstID
If .EOF = True And .BOF = True Then
N_ID = [Ô]1[Ô]
Else
N_ID = Val(.Fields([Ô]Controle[Ô])) + 1
End If
Txt_ID.Text = Format(N_ID, [Ô]0000[Ô])
End With
RstID.Close
Set RstID = Nothing


veja se funciona
IRENKO 25/02/2011 11:51:06
#366574
Vamo lá, no campo (Mes) tenho gravado:

Campo Mes Campo Controle
JANEIRO/2011 0001
JANEIRO/2011 0002
JANEIRO/2011 0003
JANEIRO/2011 0004
JANEIRO/2011 0005

aqui eu gero o proximo em uma rotina normal:

RstID.Open [Ô]SELECT DISTINCT MAX(Controle) AS Controle FROM Dados[Ô],

Preciso que antes de gerar o codigo vejo a condição, se o campo Mes é igual JANEIRO/2011 então somo mais 1 no campo Controle, ficaria 0006, agora se o texto q estou gravando seja outro, ou seja, FEVEREIRO/2011 então comeco com 0001, Seria o paramentro para gerar o ID, como adaptar isso na query?

GREGO 25/02/2011 11:59:15
#366575
se o banco for sqlserver

faça assim

mes_referencia | ano_referencia | controle | outros campos ....

Faça uma PK composta usando os 3 campos

e faça o insert via procedure...

na procedure:

create procedure set_cadastro(p_Mes int, p_ano int, pOutrosCampos) [Ô]não lembro se é assimm mesmo que cria a proc[Ô]
as

declare vControle int

select max(controle) + 1 into vControle from tabela where mes_referencia = p_mes and ano_referencia = p_ano

depois da o insert




IRENKO 25/02/2011 12:01:13
#366576
O banco é Access.
MARCELO.TREZE 25/02/2011 12:53:14
#366582
seria assim

RstID.Open [Ô]SELECT MAX(Controle) AS Controle FROM Dados WHERE mes = [ô][Ô] & txtmesano.Text & [Ô][ô][Ô]
IRENKO 25/02/2011 13:23:06
#366585
Bom, coloquei o banco mudando um puco a logica.

Ao abrir vão verificar 03 campos, os 02 pra uso são:

Campo (Mes) e Campo (Controle). Como podem ver o campo(Mes) esta com o texto OUTUBRO/2008 e todos com o numero de controle 0001. Suponhamos uma variavel string onde vou quardar o nome do mes e usar como parametro de pesquisa, pois bem, antes de gerar o codigo verifico se o testo da variavel é igual ao do campo (Mes), se sim o controle continua sendo 0001 se não gero o controle 0002, então va ficar:

OUTUBRO/2008 0001
SETEMBRO/2008 0002
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas