VIRGULA OU PONTO

CLAYTONDIAS 16/04/2010 18:36:14
#339637
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
NILTON.VIANNA 16/04/2010 18:47:03
#339639
esta parecendo que seu not esta com as configuraçoes de idimas incorretas..
tipo moeda...
EDERMIR 16/04/2010 19:15:11
#339642
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.
Tópico encerrado , respostas não são mais permitidas