CONVERTER STRING PARA NUMERO

FABIANAMELLO 26/08/2009 10:05:41
#320988
Estou precisando de ajuda... a situação é a seguinte:

-Tenho um campo que precisa ser do tipo string
- Este campo pode ser cadastrado pelo usuario pois se trata de um código de barra ou ser gerado automaticamente pelo sistema, funciona assim: se tem código de barra o usuario cadastra, se não tem o usuario gera o código através de uma função.
-A função pega o ultimo numero da tabela e faz o auto incremento, mas acontece que este numero é do tipo string... então a função de auto incremento está gerando repetição.

Dim MyDB As DAO.Database
Dim MyTB As DAO.Recordset
Set MyDB = CurrentDb()
Set MyTB = MyDB.OpenRecordset([Ô]Select Max(CodigoBarra) as Cod From TabelaFuncionarios[Ô])
If MyTB.RecordCount > 0 Then
CodigoBarra = Int(MyTB!Cod) + 1
Else
CodigoBarra = 1
End If
End Sub

Eu ja tentei mudar na tabela o campo de string para numero, fazendo isso a função funcionou direitinho, mas na hora de cadastrar o código de barra ele não aceita pois é um numero grande (com 12 caracteres). Pensei em fazer algum tipo de conversão...Será que alguém pode me ajudar?????






WALOREY 26/08/2009 10:20:28
#320990
val(codigoBarra)

o comando val antes da string a converte para numerico
MARCELO.TREZE 26/08/2009 10:22:53
#320991
Qual é o banco de daod que está utilizando.

se form MDB, vc pode criar um campo tipo numero e tamanho do campo como inteiro longo ou duplo, que irá funcionar
ASHKATCHUP 26/08/2009 10:23:44
#320992
Citação:

WALOREY escreveu:
val(codigoBarra)

o comando val antes da string a converte para numerico



Muito cuidado com a função [Ô]VAL[Ô].


?val([Ô]10,4[Ô])
10
FABIANAMELLO 26/08/2009 10:31:29
#320995
Eu estou usando access...
porque tomar cuidado com afunção VAL?
MARCELO.TREZE 26/08/2009 10:44:37
#320997
Fez o teste que sugeri, ou seja colocou o campo como numero e o tipo do numero como inteiro longo ou duplo.

ele diz tomar cuidado com o val porque o val ela vai pegar apenas os primeiros numeros da cadeia de caracteres

como no exemplo citado: Val(10,2)

ele irá retornar 10 pois encontrou a virgula

se fosse

Val([Ô]12453A43[Ô])

iria retornar 1245

ASHKATCHUP 26/08/2009 10:53:04
#320999
Na verdade, o que eu quis dizer é que a função Val possui o formato americano. Ou seja, um ponto vale como uma virgula, e vice versa.
Além disso, a função Val [Ô]tenta[Ô] retornar algum número da string passada.
Exemplos:


?val([Ô]3,2[Ô])
3


Caso você passe um [Ô]número com vírgula[Ô], ele vai lhe retornar somente a parte inteira dele.


?val([Ô]3.2[Ô])
3,2


Caso você passe um [Ô]número com ponto[Ô], ela lhe retornará esse número em formato decimal.



?val([Ô]123AshKatchup[Ô])
123


A função funciona por caracter. Ela pega o primeiro caracter, analisa se é um numero. Se for, passa para o próximo. Quando ela encontrar um que não seja número, ela retorna o que conseguiu até aquela posição.


?val([Ô]100.300,50[Ô])
100,3


Se você mandar um número formatado, também pode enfrentar problemas. No exemplo acima, enviei [Ô]cem mil e trezentos reais e cinquenta centavos[Ô], porém ela me retornou [Ô]cem reais e trinta centavos[Ô].
FABIANAMELLO 26/08/2009 10:53:36
#321000
Eu coloquei o campo como numero do tipo inteiro longo... a função de auto incremento funcionou mas na hora de cadastrar um código de barra com 12 caracteres ele não aceita só aceita com 8.

Eu também testei a função VAl.... deu certo

Eu coloquei assim na função:

Dim MyDB As DAO.Database
Dim MyTB As DAO.Recordset
Set MyDB = CurrentDb()
Set MyTB = MyDB.OpenRecordset([Ô]Select Max(Val(CodigoBarra)) as Cod From TabelaFuncionarios[Ô])
If MyTB.RecordCount > 0 Then
CodigoBarra = Int(MyTB!Cod) + 1
Else
CodigoBarra = 1
End If
End Sub
ASHKATCHUP 26/08/2009 10:56:02
#321001
Só completando... eu me referi a função VAL do Visual Basic.
MARCELO.TREZE 26/08/2009 11:02:19
#321002
Tentou duplo
FABIANAMELLO 26/08/2009 11:09:19
#321003
A função Val deu certo!
Com esta função eu consegui pegar o ultimo registro da tabela e incrementar.

Obrigada pela força!
Valeu!
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas