GARANTIR DESCONTO

Fórum inserir casa decimal delphi x oracle #418290

11/06/2012

0

Bom dia!
Estou tentando fazer um insert com dados de uma dbgrid no meu banco porem é informado o erro: 01722: invalid number...
O campo valor do pedido esta na grid com virgula (736,73). Porem o oracle nao esta reconhecendo inserir essa virgula e no caso so reconhece com .. Eis o comando:
querynumpedido.SQL.Add(insert into pcpedido(VLTOTAL);
querynumpedido.SQL.Add(values(+QuotedStr(DBGrid3.fields[6].Text)+);
essa forma nao funciona
+QuotedStr( StringReplace(DBGrid3.fields[6].AsString, .,,,[]))+;
mesmo erro dessa forma.
Tentei inserir no AFTER CONNECT do sqlconnection o seguinte comando
conexaobd.Execute(alter session set NLS_NUMERIC_CHARACTERS = .,, nil,nil);
nao deu certo tambem...
utilizo o SQLCONNECTION, DBEXPRESS, DATASETPROVIDER, CLIENTDATASET, DATASOURCE.
Segui o topico abaixo , porem sem sucesso tambem.
https://www.devmedia.com.br/forum/delphi7-x-dbexpress-x-mysql5-problema-com-casas-decimais/349533

Se alguem tiver alguma dica me ajudem por favor. Vlw
Marcos Souza

Marcos Souza

Responder

Posts

12/06/2012

Eliel Martins

Olá Foia.

Eu tenho essa função abaixo, sempre que faço um insert no banco de dados e o valor tem casa decimal utilizo ela, verifique se vai te atender.
function Replica(Text, Busca, Troca: string): string;
var
  n: integer;
begin
  for n := 1 to length(Text) do
    if Copy(Text, n, Length(Busca)) = Busca then
    begin
      Delete(Text, n, Length(Busca));
      Insert(Troca, Text, n);
    end;
  Result := Text;
end;


Um exemplo de como utilizar a função :
  Replica(FormatFloat(#0.000, StrToFloat(edPerc.Text)),,,.));


Espero ter ajudado.

Atenciosamente,

Eliel Gonçalves Martins
Responder

Gostei + 0

12/06/2012

Marcos Souza

Obrigado pelo contato!
Ficou da seguinte forma a linha:
´+Replica(FormatFloat(´#0.000´, StrToFloat(DBGrid3.fields[6].Text)),´.´,´,´,)+´
Ocorreu o erro: 00913: too many values.
Alguma sugestão?
Responder

Gostei + 0

12/06/2012

Deivison Melo

No caso de inserções no oracle, vc deverá utilizar o . (ponto) ao invés da , (virgula) para separar as casas decimais...

Qualquer coisa estou à disposição!


Responder

Gostei + 0

12/06/2012

Marcos Souza

Oracle entende como virgula mesmo. Tinha uma solução nao apropriada no qual trocamos em opçoes regionais do windows o campo decimal para utilizar como ., porem nao achei viavel, podendo prejudicar algum outro sistema. Consegui navegando por foruns o seguinte comando:
ThousandSeparator := ,;
DecimalSeparator := .;
O comando deve ser inserido no evento ONCREATE do form.
Sendo assim meu codigo ficou da seguinte forma:
+QuotedStr(DBGrid3.fields[6].Text)+
Dessa forma consegui inserir com a virgula no B.D
Muito obrigado pelas dicas, pois a sua função é interessantissima para poder utilizar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar