Gabriel Cabral Postado Julho 31, 2008 Denunciar Share Postado Julho 31, 2008 Olá pessoal...como faço pra inserir no banco um campo vazio???pois no formulario aqui, tenho DBEdit's que não precisam ser preenchidas obrigatoriamente...mas quando vou gravar, dá erro falando que ' ' não é um valor válido... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 1, 2008 Denunciar Share Postado Agosto 1, 2008 como faço pra inserir no banco um campo vazio???pois no formulario aqui, tenho DBEdit's que não precisam ser preenchidas obrigatoriamente...mas quando vou gravar, dá erro falando que ' ' não é um valor válido...Esta mensagem não informa qual o campo em questão está "inválido"?Observe que este tipo de mensagem indica que há a tentativa de gravar um valor inadequado num determinado campo. Isto não tem relação o fato de você tentar gravar um campo vazio.Seria melhor você colocar a mensagem original. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gabriel Cabral Postado Agosto 1, 2008 Autor Denunciar Share Postado Agosto 1, 2008 Então...eu acho que o erro se dá quando um campo fica vazio, porque fiz um teste prenchendo todos os campos e inseriu tudo sem erro...Aí fiz um outro teste, preenchendo todos com os mesmos valores anteriores, exceto um que deixei vazio...então deu o erro:Project winsuperm.exe raised exception class EConvertError with message ''' is not a valid floating point value.'Quando deixo vazio um campo do tipo data, dá o erro:Project winsuperm.exe raised exception class EConvertError with message '' / / ' is not a valid date.'A inserção eu faço com instrução SQL.....dm.Query1.Close; dm.Query1.SQL.Clear; dm.Query1.SQL.Add('INSERT INTO ESTAPRO(ESTAPRO.PROCOD,ESTAPRO.PROTIP,'); dm.Query1.SQL.Add('ESTAPRO.PROCAD,ESTAPRO.PRODES,ESTAPRO.PROQTD,'); dm.Query1.SQL.Add('ESTAPRO.PROUND,ESTAPRO.PROICM,ESTAPRO.PROMIN,'); dm.Query1.SQL.Add('ESTAPRO.PROMAX,ESTAPRO.PROCUS,ESTAPRO.PROLUC,ESTAPRO.PROPRE,'); dm.Query1.SQL.Add('ESTAPRO.PROFOR,ESTAPRO.PROFO2,ESTAPRO.PROFO3,ESTAPRO.PROFO4,'); dm.Query1.SQL.Add('ESTAPRO.PROFRA,ESTAPRO.PROUNC,ESTAPRO.PROLOC,ESTAPRO.PROORI,'); dm.Query1.SQL.Add('ESTAPRO.PRODVL,ESTAPRO.PROPOF,ESTAPRO.PROIOF,ESTAPRO.PRODOF,'); dm.Query1.SQL.Add('ESTAPRO.PROEPR,ESTAPRO.PROPRT,ESTAPRO.PROCOM,ESTAPRO.PROVEN,'); dm.Query1.SQL.Add('ESTAPRO.PRODTC,ESTAPRO.PROFOC,ESTAPRO.PROQDC,ESTAPRO.PROPRC,'); dm.Query1.SQL.Add('ESTAPRO.PROENT,ESTAPRO.PROQTE,ESTAPRO.PROSAI,ESTAPRO.PROQTS)'); dm.Query1.SQL.Add('VALUES (:codpro,:secao,:datacad,:desc,:estoque,:undvenda,'); dm.Query1.SQL.Add(':icms,:estmin,:estmax,:precus,:vml,:preven,'); dm.Query1.SQL.Add(':codforn1,:codforn2,:codforn3,:codforn4,'); dm.Query1.SQL.Add(':fracao,:undcompra,:local,:codorigem,:diasval,:preofe,'); dm.Query1.SQL.Add(':datainiofe,:datafinofe,:estoqprat,:qtdeminprat,:totalcomp,:totalvend,'); dm.Query1.SQL.Add(':datault,:fornult,:qtdeult,:preult,:dataent,:qtdeent,:datasai,:qtdesai)'); dm.Query1.ParamByName('codpro') .value := txtCadPro_CodPro.Text; dm.Query1.ParamByName('secao') .value := txtCadPro_Secao.Text; dm.Query1.ParamByName('datacad') .value := StrToDate(txtCadPro_DataCad.Text); dm.Query1.ParamByName('desc') .value := txtCadPro_Desc.Text; dm.Query1.ParamByName('estoque') .value := StrToFloat(txtCadPro_Estoque.Text); dm.Query1.ParamByName('undvenda') .value := txtCadPro_UndVen.Text; dm.Query1.ParamByName('icms') .value := StrToFloat(txtCadPro_Icms.Text); dm.Query1.ParamByName('estmin') .value := StrToFloat(txtCadPro_EstMin.Text); dm.Query1.ParamByName('estmax') .value := StrToFloat(txtCadPro_EstMax.Text); dm.Query1.ParamByName('precus') .value := StrToFloat(txtCadPro_PreCus.Text); dm.Query1.ParamByName('vml') .value := StrToFloat(txtCadPro_Vml.Text); dm.Query1.ParamByName('preven') .value := StrToFloat(txtCadPro_PreVen.Text); dm.Query1.ParamByName('codforn1') .value := txtCadPro_CodForn1.Text; dm.Query1.ParamByName('codforn2') .value := txtCadPro_CodForn2.Text; dm.Query1.ParamByName('codforn3') .value := txtCadPro_CodForn3.Text; dm.Query1.ParamByName('codforn4') .value := txtCadPro_CodForn4.Text; dm.Query1.ParamByName('fracao') .value := StrToFloat(txtCadPro_Fracao.Text); dm.Query1.ParamByName('undcompra') .value := txtCadPro_UndCompra.Text; dm.Query1.ParamByName('local') .value := txtCadPro_Local.Text; dm.Query1.ParamByName('codorigem') .value := txtCadPro_CodOrigem.Text; dm.Query1.ParamByName('diasval') .value := StrToFloat(txtCadPro_DiasVal.Text); dm.Query1.ParamByName('preofe') .value := StrToFloat(txtCadPro_PreOfe.Text); dm.Query1.ParamByName('datainiofe') .value := StrToDate(txtCadPro_DataIniOfe.Text); dm.Query1.ParamByName('datafinofe') .value := StrToDate(txtCadPro_DataFinOfe.Text); dm.Query1.ParamByName('estoqprat') .value := StrToFloat(txtCadPro_EstoqPrat.Text); dm.Query1.ParamByName('qtdeminprat') .value := StrToFloat(txtCadPro_QtdeMinPrat.Text); dm.Query1.ParamByName('totalcomp') .value := StrToFloat(txtCadPro_TotalComp.Text); dm.Query1.ParamByName('totalvend') .value := StrToFloat(txtCadPro_TotalVend.Text); dm.Query1.ParamByName('datault') .value := StrToDate(txtCadPro_DataUlt.Text); dm.Query1.ParamByName('fornult') .value := txtCadPro_FornUlt.Text; dm.Query1.ParamByName('qtdeult') .value := StrToFloat(txtCadPro_QtdeUlt.Text); dm.Query1.ParamByName('preult') .value := StrToFloat(txtCadPro_PreUlt.Text); dm.Query1.ParamByName('dataent') .value := StrToDate(txtCadPro_DataEnt.Text); dm.Query1.ParamByName('qtdeent') .value := StrToFloat(txtCadPro_QtdeEnt.Text); dm.Query1.ParamByName('datasai') .value := StrToDate(txtCadPro_DataSai.Text); dm.Query1.ParamByName('qtdesai') .value := StrToFloat(txtCadPro_QtdeSai.Text); dm.Query1.ExecSQL; dm.tblCadPro.Close;Isso estaria ajudando no erro??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 1, 2008 Denunciar Share Postado Agosto 1, 2008 Isso estaria ajudando no erro???Gabriel Cabral, muitíssimo!!!Já estava mais ou menos imaginando que você estivesse movendo os campos na mão, mas vendo como você está implementando, e com a mensagem de erro original, fica mais fácil - dá para sair do campo da suposição. ;)Este método que você está utilizando é pedreira mesmo - tem que estar bastante atento para as características das atribuições e também aos valores passados às funções. No caso citado, os erros estão ocorrendo nas funções de conversão de tipos - nem chegou à execução da query.Quando você usa um TMaskEdit (com alguma máscara setada), ao deixá-lo em brando você estárá lendo em Text a própria máscara como neste caso você deve ter usado a máscara similar a '99/99/99;1;_', a string retornada por Text será mesmo ' / / ' e que não poderá ser convertida pela função StrToDate sem gerar erro.Do mesmo modo, tentar converter uma string nula, retornada pela propriedade Text de um TEdit, utilizando a função StrToFloat irá gerar erro. Uma string inválida, como 2.540,50 também irá gerar erro, porque para executar a função com sucesso, o número deveria ter apenas o ponto decimal como separador de dezenas: 2540.50.Você deverá de algum modo se preocupar com a validação dos campos antes de tentar passar eles para a função. Dê uma olhada em alguns posts relacionados a estes assuntos:Erro de conversão em função, EConvertError with message (veja a função ENumero que o colega robinhocne implementou - pode lhe servir)Como faço para testar se um campo string é decimal?Problema Com Formato De Número, ajuda!!!Verificando conteúdo, Verificando data digitada no maskeditDuvida Em Máscara Para R$ E Tel:tem muitos outros...Dica: Poupe os dedos ao criar suas instruções SQL. Use o recurso de Alias (apelido) ou, quando não for necessário, não informe o nome da tabela junto ao campo. Por ex., neste trecho:dm.Query1.SQL.Add('INSERT INTO ESTAPRO(ESTAPRO.PROCOD,ESTAPRO.PROTIP,');dm.Query1.SQL.Add('ESTAPRO.PROCAD,ESTAPRO.PRODES,ESTAPRO.PROQTD,');dm.Query1.SQL.Add('ESTAPRO.PROUND,ESTAPRO.PROICM,ESTAPRO.PROMIN,');você pode omitir o nome da tabela junto ao campo, porque seu SQL trata exclusivamente de uma única tabeladm.Query1.SQL.Add('INSERT INTO ESTAPRO(PROCOD, PROTIP,');dm.Query1.SQL.Add('PROCAD, PRODES, PROQTD,');dm.Query1.SQL.Add('PROUND, PROICM, PROMIN,');e quando houvessem mais tabelas envolvidas, poderia usar o alias como em:dm.Query1.SQL.Add('INSERT INTO ESTAPRO E (E.PROCOD, E.PROTIP,');dm.Query1.SQL.Add('E .PROCAD, E.PRODES, E.PROQTD,');dm.Query1.SQL.Add('E.PROUND, E.PROICM, E.PROMIN,');Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Gabriel Cabral
Olá pessoal...
como faço pra inserir no banco um campo vazio???
pois no formulario aqui, tenho DBEdit's que não precisam ser preenchidas obrigatoriamente...
mas quando vou gravar, dá erro falando que ' ' não é um valor válido...
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.