Vírgula que quot;agarraquot; no banco de dados
Tenho recebido a mensagem ´Couldn´t perform the edit because another user changed the record´ quando digito uma vírgula em uma DbEdit ligada a um campo do tipo float. É mole? Alguém já viu isso?
Valeu,
Mr.Net
Valeu,
Mr.Net
Mrnet
Curtidas 0
Respostas
Yankleber
03/09/2003
Olá,
Algo parecido acontece se você tentar passar um valor com vírgula através de um statement SQL, pois a vírgula causa um erro de sintaxe no SQL.
Já no DBEdit, Provavelmente o Delphi deve utilizar o caractere vírgula internamente para passar parametros quando você valida a entrada/alteração, e o interpreta não como separador decimal, mas sim como separador de comando/parametro; o que, neste caso, também causará um erro de sintaxe (só que neste caso, internamente) - nada a ver com outro usuário acessando.
Isso acontece, porque o componente deve prever separação decimal apenas com ponto ao invés de vírgula.
Para resolver isso, o melhor seria, ao invés de utilizar o DBEdit ligado ao campo, usar um campo edit comum, capturar o seu conteúdo, criticar o conteúdo convertendo a vírgula para ponto e então salvando o valor do campo para a tabela através de um comando SQL. Na realidade, os componentes que funcionam ´ligados´ a campos da tabela (que chamamos Databound) não são uma solução muito profissional, justamente porque causam uma série de problemas como esse, muitas vezes, não contornáveis.
Algo parecido acontece se você tentar passar um valor com vírgula através de um statement SQL, pois a vírgula causa um erro de sintaxe no SQL.
Já no DBEdit, Provavelmente o Delphi deve utilizar o caractere vírgula internamente para passar parametros quando você valida a entrada/alteração, e o interpreta não como separador decimal, mas sim como separador de comando/parametro; o que, neste caso, também causará um erro de sintaxe (só que neste caso, internamente) - nada a ver com outro usuário acessando.
Isso acontece, porque o componente deve prever separação decimal apenas com ponto ao invés de vírgula.
Para resolver isso, o melhor seria, ao invés de utilizar o DBEdit ligado ao campo, usar um campo edit comum, capturar o seu conteúdo, criticar o conteúdo convertendo a vírgula para ponto e então salvando o valor do campo para a tabela através de um comando SQL. Na realidade, os componentes que funcionam ´ligados´ a campos da tabela (que chamamos Databound) não são uma solução muito profissional, justamente porque causam uma série de problemas como esse, muitas vezes, não contornáveis.
GOSTEI 0
Yankleber
03/09/2003
Tente uma coisa, não sei se vai dar certo.
Existe uma variável pública do tipo char encontrada na unit SysUtil, chamada [b:90a1a8c680]DecimalSeparator[/b:90a1a8c680]. Simplesmente, na criação do seu form (FormCreate) faça:
Não testei, mas pode ser um caminho...
Existe uma variável pública do tipo char encontrada na unit SysUtil, chamada [b:90a1a8c680]DecimalSeparator[/b:90a1a8c680]. Simplesmente, na criação do seu form (FormCreate) faça:
DecimalSeparator := ´,´;
Não testei, mas pode ser um caminho...
GOSTEI 0