none
Uso do Replace para tirar virgulas RRS feed

  • Pergunta

  • Bom dia, estou passando da minha aplicação VB.NET para o SQL a seguinte string:

    <style type="text/css">.fctbNone{ color:#000000; } .fctbStyle0{ color:#a52a2a;font-style:oblique; } .fctbStyle0Style2{ color:#a52a2a;font-style:oblique; }</style>

    INSERT INTO TB_TP_ROMANEIOPEDIDOS (romaneio_id, pedido_id ,alteracao_id, acao_id, ult_alt, ult_user_id, status, user_id, peso_liquido, peso_bruto, volumes, volumes_m3) VALUES ("& ROMANEIO &","&  linha.cells("PEDIDO_ID").Value.ToString  &",0,1,GETDATE()," & CONTROLE.USUARIO_ID & " ,1," & CONTROLE.USUARIO_ID &","& linha.cells("PESO_LIQUIDO").value.ToString &","& linha.cells("PESO_BRUTO").Value.ToString &","& linha.cells("QTDE").Value &","& linha.cells("M3").Value.ToString &")

    Essa string esta me dando erro pois os campos PESO_LIQUIDO , PESO_BRUTO, QTDE E M3 estão mandando com vírgula e eu precisava substituir com o Replace.. porem nunca fiz isso. alguém ai pode me dar um help ?

    • Editado WICTOR MENKALHA quinta-feira, 12 de março de 2020 11:31 Erro na string
    quinta-feira, 12 de março de 2020 11:10

Respostas

  • Amigos agradeço o empenho de todos mas resolvi a situação desta forma:

    INSERT INTO TB_TP_ROMANEIOPEDIDOS (romaneio_id, pedido_id ,alteracao_id, acao_id, ult_alt, ult_user_id, status, user_id, peso_liquido, peso_bruto, volumes, volumes_m3) VALUES ("& Romaneio &","& linha.cells("PEDIDO_ID").Value.ToString  &",0,1,GETDATE()," & CONTROLE.USUARIO_ID & " ,1," & CONTROLE.USUARIO_ID &","& linha.cells("PESO_LIQUIDO").Value.ToString.replace(",",".")  &","& linha.cells("PESO_BRUTO").Value.ToString.replace(",",".")  &","& linha.cells("QTDE").Value.ToString.replace(",",".")  &","& linha.cells("M3").Value.ToString.replace(",",".")  &")

    • Marcado como Resposta WICTOR MENKALHA sexta-feira, 13 de março de 2020 12:08
    sexta-feira, 13 de março de 2020 12:08

Todas as Respostas

  • Bom Dia,

    Não sei se é entendi muito bem, mas você pode usar apenas o comando REPLACE, siga um exemplo:

    SELECT REPLACE ([ SuaColuna ], ',' , '' ) FROM SuaTabela ; 

     Irá substituir Vírgula (,) por vazio.
    • Editado Edvaldo A quinta-feira, 12 de março de 2020 11:27 correção no texto
    quinta-feira, 12 de março de 2020 11:26
  • Amigo obrigado pela resposta, tinha um erro na string que mandei como exemplo mas já editei, no seu exemplo vc usou um select, porem eu preciso MANDAR isso pro banco já substituindo as vírgulas por pontos.. ou seja, não seria um select e sim um insert
    quinta-feira, 12 de março de 2020 11:32
  • Deleted
    quinta-feira, 12 de março de 2020 11:54
  • Separador de parte fracionária pois se trata de peso
    quinta-feira, 12 de março de 2020 11:58
  • Bom dia,

    Wictor, acho que a melhor opção é utilizar parâmetros na instrução SQL para passar os valores pois dessa forma a questão do separador (decimal, separador e formato de data, etc) fica transparente e independente das configurações do banco de dados utilizado:

    https://docs.microsoft.com/pt-br/dotnet/api/system.data.sqlclient.sqlparametercollection.addwithvalue?view=netframework-4.8#System_Data_SqlClient_SqlParameterCollection_AddWithValue_System_String_System_Object_

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 12 de março de 2020 12:41
  • Chefe isso não se aplica a minha situação, obrigado !
    quinta-feira, 12 de março de 2020 13:58
  • Como você está executando esse Insert na sua aplicação em VB? 

    Você está utilizando um SQLCommand? Se não está, qual componente / classe você está utilizando?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 12 de março de 2020 14:18
  • Então vamos lá... tenho algumas perguntas...

    ROMANEIO está se referenciando a coluna romaneio_id essa coluna é de autonumeração? Se não for certifique-se de que o valor que está inserindo existe na tabela de referencia e faça isso para todos os outros campos pois há restrições nas bases de dados que ao inserir uma informação são verificadas.

    Em linha.cells("PEDIDO_ID").Value.ToString até onde eu sei é necessário utilizar o conversor de tipo como um procedimento ficando assim: linha.cells("PEDIDO_ID").Value.ToString() e isso serve para as demais propriedades.

    A variável CONTROLE.USUARIO_ID deve ser uma classe referenciada e inicializada e USUARIO_ID usa propriedade válida e preenchida com valores válidos para a coluna ult_user_id e user_id

    Embora você tenha um ambiente que "não seja possível" utilizar parâmetros através do SQL Parameter você deve utilizar variáveis para receber e tratar as informações antes de executar o insert command ou qualquer outro CRUD. Isso torna seu código mais legível para você mesmo e ainda permite ao debug e ponteiro mostrar os valores a essas variáveis antes de envia-las ao banco. Com variáveis, por exemplo, substituir linha.cells("PEDIDO_ID").Value.ToString() por uma variável do tipo string com nome strPEDIDOID que recebe linha.cells("PEDIDO_ID").Value.ToString() e então no código você veria " & strPEDIDOID & " e não " & linha.cells("PEDIDO_ID").Value.ToString() & " para a coluna pedido_id. No mais não tenho mais dicas que possa ser útil. Acho que o Edvaldo A, gapimex comentaram coisas que estão dentro do contexto.
    quinta-feira, 12 de março de 2020 14:56
  • Amigos agradeço o empenho de todos mas resolvi a situação desta forma:

    INSERT INTO TB_TP_ROMANEIOPEDIDOS (romaneio_id, pedido_id ,alteracao_id, acao_id, ult_alt, ult_user_id, status, user_id, peso_liquido, peso_bruto, volumes, volumes_m3) VALUES ("& Romaneio &","& linha.cells("PEDIDO_ID").Value.ToString  &",0,1,GETDATE()," & CONTROLE.USUARIO_ID & " ,1," & CONTROLE.USUARIO_ID &","& linha.cells("PESO_LIQUIDO").Value.ToString.replace(",",".")  &","& linha.cells("PESO_BRUTO").Value.ToString.replace(",",".")  &","& linha.cells("QTDE").Value.ToString.replace(",",".")  &","& linha.cells("M3").Value.ToString.replace(",",".")  &")

    • Marcado como Resposta WICTOR MENKALHA sexta-feira, 13 de março de 2020 12:08
    sexta-feira, 13 de março de 2020 12:08
  • Amigos agradeço o empenho de todos mas resolvi a situação desta forma:

    INSERT INTO TB_TP_ROMANEIOPEDIDOS (romaneio_id, pedido_id ,alteracao_id, acao_id, ult_alt, ult_user_id, status, user_id, peso_liquido, peso_bruto, volumes, volumes_m3) VALUES ("& Romaneio &","& linha.cells("PEDIDO_ID").Value.ToString  &",0,1,GETDATE()," & CONTROLE.USUARIO_ID & " ,1," & CONTROLE.USUARIO_ID &","& linha.cells("PESO_LIQUIDO").Value.ToString.replace(",",".")  &","& linha.cells("PESO_BRUTO").Value.ToString.replace(",",".")  &","& linha.cells("QTDE").Value.ToString.replace(",",".")  &","& linha.cells("M3").Value.ToString.replace(",",".")  &")

    Wictor,

    Ok, obrigado pelo retorno, na verdade você aplicou o tratamento diretamente na aplicação, mais especificamente através do próprio Visual Basic.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 13 de março de 2020 12:13
  • Exatamente, achei mais prático que ficar colocando variáveis !
    sexta-feira, 13 de março de 2020 12:14