PROBLEMAS COM CODIGO SEQUENCIAL
Boa noite amigos do vbmania, sou novata aqui no forum, eu gostaria de fazer uma perguntinha simples, se alguem puder me dar uma forcinha ficarei muito grata, vejam só, eu importo um arquivo txt para minha tabela no mysql, minhas tabelas todas tem relacionamentos uma com a outra, entao tenho uma tabela de clientes por exemplo que tenho o codigo cliente , até entao utilizava como VARCHAR(10), nao sei pq fiz isso afff.. e tenho a tabela endereco do cliente que tem o campo codigocliente, ou seja, sao duas tabelas com codigos em comun, so que queria gerar meu codigo do cliente sequencial so que nao to conseguindo, acho que pelo fato de o campo estar como varchar, eu tentei colocar como INTEGER, mas mesmo assim ele nao gera codigo sequencial, achei a função abaixo do nosso amigo msjudas, mas para o tipo integer ele nao gera corretamente, eu gostaria de saber o seguinte, tem como eu converter a coluna varchar para integer e fazer o sistema gerar um codigo sequencial para mim? se sim, como farei? desde ja agradeço muito a atençao e um grande beijo para todos.
Public Function ProximoCodigo(vTabela As String, vCampo As String, vCondicao As String)
Dim RsProximo As New ADODB.Recordset
SQL = [Ô]SELECT MAX([Ô] & Trim(vCampo) & [Ô]) AS CODIGO FROM [Ô] & Trim(vTabela) & [Ô][Ô] & vCondicao & [Ô][Ô]
RsProximo.Open SQL, Conexao, adOpenKeyset, adLockReadOnly
If IsNull(RsProximo([Ô]CODIGO[Ô])) = True Then
ProximoCodigo = 1
Else
ProximoCodigo = RsProximo([Ô]CODIGO[Ô]) + 1
End If
RsProximo.Close: Set RsProximo = Nothing
End Function
If tbcliente.RecordCount = 0 Then
TomCaixa1.Text = 1
Else
tbcliente.MoveLast
TomCaixa1.Text = tbcliente!Codigo + 1
End If
seria isso ?
TomCaixa1.Text = 1
Else
tbcliente.MoveLast
TomCaixa1.Text = tbcliente!Codigo + 1
End If
seria isso ?
Obrigado pela resposta charleston, mas creio eu que nao seria tão facil assim não, na minha tabela ja tem clientes cadastrados com numeros nao sequenciais, tipo.
012343
087834
978865
543456
ou seja, esses codigos nos é fornecido pela softhouse que trabalhamos, é um sequencial deles la.. que nao é sequencial para mim, entao o que acontece, se coloco o seu codigo funcionarl, ele me gera no meu controle texto um numero padrao.. tipo 100000, e o proximo ele nao joga como 100001, 100002, e assim por diante.. ele nao ta somando o +1, lembrando que .. meu banco de dados é mysql.
012343
087834
978865
543456
ou seja, esses codigos nos é fornecido pela softhouse que trabalhamos, é um sequencial deles la.. que nao é sequencial para mim, entao o que acontece, se coloco o seu codigo funcionarl, ele me gera no meu controle texto um numero padrao.. tipo 100000, e o proximo ele nao joga como 100001, 100002, e assim por diante.. ele nao ta somando o +1, lembrando que .. meu banco de dados é mysql.
Entendo, mas qual é a lógica da sequencia?
A logica seria simples, se fosse fazer da forma que vc esta falando, eu teria que ordenar o recordset por codigo, e adicionar +1, exemplo
012343
087834
978865
543456
entao ordenado ficaria
012343
087834
543456
978865
entao o codigo sequencial seria 978865 + 1 ou seja, 978866
012343
087834
978865
543456
entao ordenado ficaria
012343
087834
543456
978865
entao o codigo sequencial seria 978865 + 1 ou seja, 978866
Você já tentou converter o VARCHAR para numérico e reverter para VARCHAR?
Wprox = cdbl(ULTIMO CODIGO)
Wprox = Wprox + 1
ULTIMOCODIGO = right([Ô]000000[Ô] & Wprox,6)
Wprox = cdbl(ULTIMO CODIGO)
Wprox = Wprox + 1
ULTIMOCODIGO = right([Ô]000000[Ô] & Wprox,6)
Citação:bom dia, obrigado pela resposta, mas aqui, em cima do seu codigo eu teria que mover para o ultimo registro e adicionar +1 correto ?:
Você já tentou converter o VARCHAR para numérico e reverter para VARCHAR?
Wprox = cdbl(ULTIMO CODIGO)
Wprox = Wprox + 1
ULTIMOCODIGO = right([Ô]000000[Ô] & Wprox,6)
Obtenha o último código com MAX() e some 1
Depois insira o novo registro com o ultimo maior código somado de um.
Dim RsProximo As New ADODB.Recordset
SQL = [Ô]SELECT MAX(campo) AS CODIGO FROM tabela[Ô]
RsProximo.Open SQL, Conexao, adOpenKeyset, adLockReadOnly
If IsNull(RsProximo([Ô]CODIGO[Ô])) = True Then
Proximo = 1
Else
Proximo = RsProximo([Ô]CODIGO[Ô]) + 1
End If
RsProximo.Close
SQL = [Ô]INSERT INTO tabela(campo1,campo2,campo3,...) VALUES([ô][Ô] & FORMAT(proximo,[Ô]000000[Ô]) & [Ô][ô],[ô][ô],[ô][ô],[ô][ô],...)
Conexao.execute SQL
Depois insira o novo registro com o ultimo maior código somado de um.
Dim RsProximo As New ADODB.Recordset
SQL = [Ô]SELECT MAX(campo) AS CODIGO FROM tabela[Ô]
RsProximo.Open SQL, Conexao, adOpenKeyset, adLockReadOnly
If IsNull(RsProximo([Ô]CODIGO[Ô])) = True Then
Proximo = 1
Else
Proximo = RsProximo([Ô]CODIGO[Ô]) + 1
End If
RsProximo.Close
SQL = [Ô]INSERT INTO tabela(campo1,campo2,campo3,...) VALUES([ô][Ô] & FORMAT(proximo,[Ô]000000[Ô]) & [Ô][ô],[ô][ô],[ô][ô],[ô][ô],...)
Conexao.execute SQL
Ta bom lindos, mas qual o tipo do campo tem que estar no mysql? varchar ? ou INT?
Tipo INT seria o ideal
eu uso varchar e não dá problema...
Tópico encerrado , respostas não são mais permitidas