CONVERTER STRING PARA NUMERO
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?????
-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?????
val(codigoBarra)
o comando val antes da string a converte para numerico
o comando val antes da string a converte para numerico
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
se form MDB, vc pode criar um campo tipo numero e tamanho do campo como inteiro longo ou duplo, que irá funcionar
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
Eu estou usando access...
porque tomar cuidado com afunção VAL?
porque tomar cuidado com afunção VAL?
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
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
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:
Caso você passe um [Ô]número com vÃrgula[Ô], ele vai lhe retornar somente a parte inteira dele.
Caso você passe um [Ô]número com ponto[Ô], ela lhe retornará esse número em formato decimal.
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.
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[Ô].
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[Ô].
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
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
Só completando... eu me referi a função VAL do Visual Basic.
Tentou duplo
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!
Com esta função eu consegui pegar o ultimo registro da tabela e incrementar.
Obrigada pela força!
Valeu!
Tópico encerrado , respostas não são mais permitidas