SELECT PROX NÊMERO LIVRE
Boa noite!
Tenho uma tabela onde são gravados os clientes, a coluna código do cliente não é auto incrementada, o usuário é quem cria o código do cliente, o que preciso é saber qual o próximo código livre, lembrando que quero aproveitar todos os códigos por exemplo:
Código Nome
1 Zé
2 João
3 Augusto
5 Maria
6 Tião
7 Ana
9 Beatriz
10 Júlia
11 Joana
O select dele mostrar o último código disponÃvel mas não somente select max, ele deve avaliar o disponÃvel seguindo a sequência ou seja o prox seria o 4, depois 8 e depois 12. Será que consegui ser claro rsrs
Abraços
Tenho uma tabela onde são gravados os clientes, a coluna código do cliente não é auto incrementada, o usuário é quem cria o código do cliente, o que preciso é saber qual o próximo código livre, lembrando que quero aproveitar todos os códigos por exemplo:
Código Nome
1 Zé
2 João
3 Augusto
5 Maria
6 Tião
7 Ana
9 Beatriz
10 Júlia
11 Joana
O select dele mostrar o último código disponÃvel mas não somente select max, ele deve avaliar o disponÃvel seguindo a sequência ou seja o prox seria o 4, depois 8 e depois 12. Será que consegui ser claro rsrs
Abraços
Qual é o seu db?
Oops me desculpe, é MS SQL.
Alguem pode pode me ajudar???
Olá Rogério.
Desculpa a pergunta, mais por qual motivo você quer fazer isto?
Só para entender, suponhamos que existe o cliente com o código 2, e você exclui o mesmo do seu banco de dados, você quer utilizar a mesmo numeração depois?
Desculpa a pergunta, mais por qual motivo você quer fazer isto?
Só para entender, suponhamos que existe o cliente com o código 2, e você exclui o mesmo do seu banco de dados, você quer utilizar a mesmo numeração depois?
Citação:GUIMORAES123
Citação:você quer utilizar a mesmo numeração depois?
Eu entendi que sim.
O Que pode ser um grande problema, é claro que digo sem conhecer o sistema, mas a principio isso
é inadmissÃvel, por causa de estatÃsticas principalmente.
Olá amigo, tente colocar isso no evento gotfocus.
Dim TAUX As Recordset, ProxCod As Long, ValorCampo As Long, i As Long, Filtro As String
Filtro = [Ô]Select [Código do Cliente] from Clientes[Ô]
Set TAUX = vgDb.OpenRecordSet(Filtro, dbOpenDynaset)
If TAUX.RecordCount > 0 Then
TAUX.MoveLast: TAUX.MoveFirst
ProxCod = 0
For i = 1 To TAUX.RecordCount
ValorCampo = CLng(TAUX![Código do Cliente])
If ProxCod < ValorCampo And (ProxCod + 1) <> ValorCampo Then
ProxCod = ProxCod + 1
Exit For
Else
ProxCod = ValorCampo
End If
TAUX.MoveNext
Next i
If ProxCod = ValorCampo Then ProxCod = ProxCod + 1
Else
ProxCod = 1 [ô]se não tem registros na tabela é o primeiro passa 1
End If
txtCodigoCliente.Text = ProxCod
Dim TAUX As Recordset, ProxCod As Long, ValorCampo As Long, i As Long, Filtro As String
Filtro = [Ô]Select [Código do Cliente] from Clientes[Ô]
Set TAUX = vgDb.OpenRecordSet(Filtro, dbOpenDynaset)
If TAUX.RecordCount > 0 Then
TAUX.MoveLast: TAUX.MoveFirst
ProxCod = 0
For i = 1 To TAUX.RecordCount
ValorCampo = CLng(TAUX![Código do Cliente])
If ProxCod < ValorCampo And (ProxCod + 1) <> ValorCampo Then
ProxCod = ProxCod + 1
Exit For
Else
ProxCod = ValorCampo
End If
TAUX.MoveNext
Next i
If ProxCod = ValorCampo Then ProxCod = ProxCod + 1
Else
ProxCod = 1 [ô]se não tem registros na tabela é o primeiro passa 1
End If
txtCodigoCliente.Text = ProxCod
Ele não parou para pensar naquilo que está querendo.
Já pensou se ele tem uma tabela com 10,20 mil registros e o registro de número 8865 for deletado, como o usuário vai ficar
sabendo deste registro vago. Como fazer uma consulta para saber o valor deste registro. Diga se que não é o usuário que escolhe.
Já teve participante do fórum com a mesma ideia.
Huber Fábio, você não leu a mensagem de forma correta na qual ele propos.
Já pensou se ele tem uma tabela com 10,20 mil registros e o registro de número 8865 for deletado, como o usuário vai ficar
sabendo deste registro vago. Como fazer uma consulta para saber o valor deste registro. Diga se que não é o usuário que escolhe.
Já teve participante do fórum com a mesma ideia.
Huber Fábio, você não leu a mensagem de forma correta na qual ele propos.
Citação:NILSONTRES
Eu também entendi isto, mais custei a acreditar.
Não consigo imaginar o tamanho problema que ele irá enfrentar ao fazer isto, basicamente isto não se faz.
Assim como o OMAR2011 disse, imagine fazer o mesmo processo em uma base de dados com 10, 20 mil registros, se torna inviável.
Olá,
Embora pareça se uma coisa realmente estranha, é isso mesmo que eu quero.
O Software em questão, é um sistema de monitoramento de alarmes, e existe um Software ERP que trabalha em conjunto com o mesmo. Esse ERP que faz exatamente o que eu citei acima, ou seja, caso eu crie um novo cliente através do software ERP, ele automaticamente pega o próximo número disponÃvel. Na tabela de clientes existe um alto incremento, que é o código do cliente, esse outro número tem o nome [Ô]conta[Ô] e é criado manualmente.
Para manter um ordenação crescente nessa coluna o ERP pesquisa essa tabela de clientes e mostra o próximo número disponÃvel, O fato é que pode ser necessário a criação de uma nova conta sem o uso do ERP, quando isso ocorre, para pegar o proximo número na sequencia, eu faço um select simples e jogo no excel hehe. Se o ERP faz, acredito ser possÃvel fazer esse select para colocar em uma aplicação que eu tenho mostrando sempre o ultimo número de conta disponÃvel.
Desculpe se não fui claro o suficiente antes. Abraços.
Embora pareça se uma coisa realmente estranha, é isso mesmo que eu quero.
O Software em questão, é um sistema de monitoramento de alarmes, e existe um Software ERP que trabalha em conjunto com o mesmo. Esse ERP que faz exatamente o que eu citei acima, ou seja, caso eu crie um novo cliente através do software ERP, ele automaticamente pega o próximo número disponÃvel. Na tabela de clientes existe um alto incremento, que é o código do cliente, esse outro número tem o nome [Ô]conta[Ô] e é criado manualmente.
Para manter um ordenação crescente nessa coluna o ERP pesquisa essa tabela de clientes e mostra o próximo número disponÃvel, O fato é que pode ser necessário a criação de uma nova conta sem o uso do ERP, quando isso ocorre, para pegar o proximo número na sequencia, eu faço um select simples e jogo no excel hehe. Se o ERP faz, acredito ser possÃvel fazer esse select para colocar em uma aplicação que eu tenho mostrando sempre o ultimo número de conta disponÃvel.
Desculpe se não fui claro o suficiente antes. Abraços.
Bom dia Rogério,
Segue exemplo de como fazer isso em SQL, vc pode pegar o script abaixo e montar uma função para trazer o número para você.
Uma sugestão para o pessoal do fórum:
Não estou querendo causar discussão no fórum, mas acredito que o fórum seja para tirar dúvidas e não para ficarem questionando se os processos dos outros estão certos ou não. Lógico que há processos que não são viáveis ao NOSSO VER, mas não estamos aqui para ficar corrigindo os processos dos outros, além do mais, nem sabemos como funciona o sistema do nosso amigo ai. Acho que no máximo podemos dar umas dicas do que seria viável ou não e assim ELE tomará a decisão de mudar ou não as rotinas do sistema dele. Se não souberem a resposta, não fiquem questionando se o processo está certo ou não.
Esse é o meu ponto de vista.
Abraço à todos.
Segue exemplo de como fazer isso em SQL, vc pode pegar o script abaixo e montar uma função para trazer o número para você.
/*
CREATE TABLE ##TESTE
(
ID INT NOT NULL
)
INSERT INTO ##TESTE VALUES (1)
INSERT INTO ##TESTE VALUES (2)
INSERT INTO ##TESTE VALUES (4)
INSERT INTO ##TESTE VALUES (6)
INSERT INTO ##TESTE VALUES (7)
*/
DECLARE @ID INT
DECLARE @SEQ INT
DECLARE @EXIT BIT
SET @SEQ = 0
SET @EXIT = 0
DECLARE CUR_PROCESSO CURSOR FOR
SELECT ID FROM ##TESTE ORDER BY ID
OPEN CUR_PROCESSO
FETCH NEXT FROM CUR_PROCESSO INTO @ID
WHILE @@FETCH_STATUS = 0 AND @EXIT = 0
BEGIN
SET @SEQ = @SEQ + 1
IF(@ID <> @SEQ)
BEGIN
SET @EXIT = 1
END
FETCH NEXT FROM CUR_PROCESSO INTO @ID
END
CLOSE CUR_PROCESSO;
DEALLOCATE CUR_PROCESSO;
PRINT [ô]O PROXIMO REGISTRO E O NUMERO: [ô] + CONVERT(VARCHAR,@SEQ)
Uma sugestão para o pessoal do fórum:
Não estou querendo causar discussão no fórum, mas acredito que o fórum seja para tirar dúvidas e não para ficarem questionando se os processos dos outros estão certos ou não. Lógico que há processos que não são viáveis ao NOSSO VER, mas não estamos aqui para ficar corrigindo os processos dos outros, além do mais, nem sabemos como funciona o sistema do nosso amigo ai. Acho que no máximo podemos dar umas dicas do que seria viável ou não e assim ELE tomará a decisão de mudar ou não as rotinas do sistema dele. Se não souberem a resposta, não fiquem questionando se o processo está certo ou não.
Esse é o meu ponto de vista.
Abraço à todos.
Tópico encerrado , respostas não são mais permitidas