VIRGULA OU PONTO
Boa Noite a todos!
Tem um erro em um programa que estou finalizando que está me tirando o sono. O programa armazena e consulta preços
Montei no meu notebook e deu tudo certo. Quando fui coloca-lo na minha maquina de trabalho, percebi que a meu note tem Windows em inglês e a minha maquina, destino do programa, está em português.
Na versão em português do Windows o divisor de numero decimal é a [Ô],[Ô] e com e no meu note é o [Ô].[Ô]
Após instalado, quando tento gravar um preço ele gera um erro : [Ô]Numero de valores de consulta e campos de destino não coincidem[Ô] run-time 2147217900 (80040e14)
Ja tentei replicar a vÃrgula por ponto na String de gravação mas ainda sim não deu certo.
No access o campo que esta sendo gravado os valores estão em Text
Desde já agradeço
segue código:
Private Sub Gravardados()
Dim cnnComando As New ADODB.Command
Dim vSQL As String
Dim vConfMsg As Integer
...
[ô]Se aconteceu um erro de digitação sai da sub sem gravar
If vErro = True Then GoTo pula
[ô]Constroi o comando SQL para gravação
vSQL = [Ô]INSERT INTO Preco (CodPreco, NomePreco, NomeUsual, Grupo, SubGrupo, Unidade, ValorPreco, ValorMaterial, ValorMdo, ValorServico, ValorAluguel, ValorBdi, ValorImposto, ValorTransporte, Bdi, Transporte, Imposto, Status, Origem, Observacao, Base, Regiao, CodSubGrupo, Nivel)[Ô] & _
[Ô]Values([ô][Ô] & vNum & [Ô][ô], [ô][Ô] & txtNomePreco.Text & [Ô][ô],[ô][Ô] & _
txtNomeUsual.Text & [Ô][ô],[ô][Ô] & lblNomeGrupo.Caption & [Ô][ô],[ô][Ô] & _
lblNomeSubGrupo & [Ô][ô], [ô][Ô] & vUnidade & [Ô][ô], [Ô] & _
vPrecoTotal & [Ô], [ô][Ô] & Replace(vPrecoMat, [Ô],[Ô], [Ô].[Ô]) & [Ô][ô], [ô][Ô] & _
Replace(vPrecoMdo, [Ô],[Ô], [Ô].[Ô]) & [Ô][ô], [Ô] & Replace(vPrecoServ, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoAlug, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & _
Replace(vPrecoBdi, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoImposto, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoTransporte, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & _
Replace(vPrecoComBdi, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoComTransporte, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & _
Replace(vPrecoComImposto, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & vStatus & [Ô], [Ô] & vOrigem & [Ô], [ô][Ô] & txtObservacoes.Text & [Ô][ô], [ô][Ô] & DB & [Ô][ô], [ô][Ô] & vRegiao & [Ô][ô], [ô][Ô] & vCodSubGrupo & [Ô][ô], [Ô] & Lucky & [Ô])[Ô]
[ô]Executa o comando de Gravação
With cnnComando
.ActiveConnection = cnnBanco
.CommandType = adCmdText
.CommandText = vSQL
.Execute
End With
MsgBox [Ô]Gravação concluida com sucesso! [Ô], vbInformation + vbOKOnly, [Ô]Gravação OK[Ô]
[ô]Chama a sub q limpa a os dados do formulário
LimparTela
txtCodPreco.Text = Empty
txtCodPreco.Enabled = True
vErro = False
pula:
Exit Sub
saida:
[ô]Elimina o comando recordset da memoria
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
[ô]Caso haja erro o programa executa os comandos abaixo
errRegistro:
With Err
If .Number <> 0 Then
MsgBox [Ô]Erro durante a gravação do registro![Ô] & vbCrLf & [Ô] A operaçao não foi completada[Ô], _
vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Operação cancelada[Ô]
.Number = 0
GoTo saida
End If
End With
End Sub
Tem um erro em um programa que estou finalizando que está me tirando o sono. O programa armazena e consulta preços
Montei no meu notebook e deu tudo certo. Quando fui coloca-lo na minha maquina de trabalho, percebi que a meu note tem Windows em inglês e a minha maquina, destino do programa, está em português.
Na versão em português do Windows o divisor de numero decimal é a [Ô],[Ô] e com e no meu note é o [Ô].[Ô]
Após instalado, quando tento gravar um preço ele gera um erro : [Ô]Numero de valores de consulta e campos de destino não coincidem[Ô] run-time 2147217900 (80040e14)
Ja tentei replicar a vÃrgula por ponto na String de gravação mas ainda sim não deu certo.
No access o campo que esta sendo gravado os valores estão em Text
Desde já agradeço
segue código:
Private Sub Gravardados()
Dim cnnComando As New ADODB.Command
Dim vSQL As String
Dim vConfMsg As Integer
...
[ô]Se aconteceu um erro de digitação sai da sub sem gravar
If vErro = True Then GoTo pula
[ô]Constroi o comando SQL para gravação
vSQL = [Ô]INSERT INTO Preco (CodPreco, NomePreco, NomeUsual, Grupo, SubGrupo, Unidade, ValorPreco, ValorMaterial, ValorMdo, ValorServico, ValorAluguel, ValorBdi, ValorImposto, ValorTransporte, Bdi, Transporte, Imposto, Status, Origem, Observacao, Base, Regiao, CodSubGrupo, Nivel)[Ô] & _
[Ô]Values([ô][Ô] & vNum & [Ô][ô], [ô][Ô] & txtNomePreco.Text & [Ô][ô],[ô][Ô] & _
txtNomeUsual.Text & [Ô][ô],[ô][Ô] & lblNomeGrupo.Caption & [Ô][ô],[ô][Ô] & _
lblNomeSubGrupo & [Ô][ô], [ô][Ô] & vUnidade & [Ô][ô], [Ô] & _
vPrecoTotal & [Ô], [ô][Ô] & Replace(vPrecoMat, [Ô],[Ô], [Ô].[Ô]) & [Ô][ô], [ô][Ô] & _
Replace(vPrecoMdo, [Ô],[Ô], [Ô].[Ô]) & [Ô][ô], [Ô] & Replace(vPrecoServ, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoAlug, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & _
Replace(vPrecoBdi, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoImposto, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoTransporte, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & _
Replace(vPrecoComBdi, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & Replace(vPrecoComTransporte, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & _
Replace(vPrecoComImposto, [Ô],[Ô], [Ô].[Ô]) & [Ô], [Ô] & vStatus & [Ô], [Ô] & vOrigem & [Ô], [ô][Ô] & txtObservacoes.Text & [Ô][ô], [ô][Ô] & DB & [Ô][ô], [ô][Ô] & vRegiao & [Ô][ô], [ô][Ô] & vCodSubGrupo & [Ô][ô], [Ô] & Lucky & [Ô])[Ô]
[ô]Executa o comando de Gravação
With cnnComando
.ActiveConnection = cnnBanco
.CommandType = adCmdText
.CommandText = vSQL
.Execute
End With
MsgBox [Ô]Gravação concluida com sucesso! [Ô], vbInformation + vbOKOnly, [Ô]Gravação OK[Ô]
[ô]Chama a sub q limpa a os dados do formulário
LimparTela
txtCodPreco.Text = Empty
txtCodPreco.Enabled = True
vErro = False
pula:
Exit Sub
saida:
[ô]Elimina o comando recordset da memoria
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
[ô]Caso haja erro o programa executa os comandos abaixo
errRegistro:
With Err
If .Number <> 0 Then
MsgBox [Ô]Erro durante a gravação do registro![Ô] & vbCrLf & [Ô] A operaçao não foi completada[Ô], _
vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Operação cancelada[Ô]
.Number = 0
GoTo saida
End If
End With
End Sub
esta parecendo que seu not esta com as configuraçoes de idimas incorretas..
tipo moeda...
tipo moeda...
CLAYTONDIAS.
Para gravar em um banco de dados utilizamos a VÃRGULA para separar os valores ou nomes de campo.
Para gravar números decimais, devemos utilizar o PONTO DECIMAL para que o comando SQL não [Ô]divida[Ô] o número em duas partes e não coincidindo a quantidade de campos com a quantidade de valores.
Se você alterar os números com o REPLACE obterá o resultado esperado. Se o campo a ser gravada a informação é TEXT, então os valores devem estar entre ASPAS SIMPLES.
Verifique qual o valor está na sua variável VSQL antes de executar a gravação para localizar a parte do comando com o erro.
Para gravar em um banco de dados utilizamos a VÃRGULA para separar os valores ou nomes de campo.
Para gravar números decimais, devemos utilizar o PONTO DECIMAL para que o comando SQL não [Ô]divida[Ô] o número em duas partes e não coincidindo a quantidade de campos com a quantidade de valores.
Se você alterar os números com o REPLACE obterá o resultado esperado. Se o campo a ser gravada a informação é TEXT, então os valores devem estar entre ASPAS SIMPLES.
Verifique qual o valor está na sua variável VSQL antes de executar a gravação para localizar a parte do comando com o erro.
Tópico encerrado , respostas não são mais permitidas