Welder 0 Denunciar post Postado Maio 6, 2009 Por isso eu sugeri usar uma query... numa query você só montaria o comando update de acordo com a sua tabela em runtime... seria algo do tipo: Query.Close; Query.SQL.Clear; Query.SQL.ADD('Update tabela set campo = :valor, campo2 =:valor2 where campoX = :campoX'); Query.Params.ParamByName('valor').AsString := valor; Query.Params.ParamByName('valor2').AsString := valor2; Query.Params.ParamByName('campoX').AsString := valorX; Query.Execute; Ps.: O código acima montei de cabeça, mas não testei se a sintaxe está correta (teria que montar de acordo com o componente escolhido mesmo. []'s vou tirar meu clientdataset e deixar a SqlQuery da DBExpress. Compartilhar este post Link para o post Compartilhar em outros sites
Welder 0 Denunciar post Postado Maio 6, 2009 Por isso eu sugeri usar uma query... numa query você só montaria o comando update de acordo com a sua tabela em runtime... seria algo do tipo: Query.Close; Query.SQL.Clear; Query.SQL.ADD('Update tabela set campo = :valor, campo2 =:valor2 where campoX = :campoX'); Query.Params.ParamByName('valor').AsString := valor; Query.Params.ParamByName('valor2').AsString := valor2; Query.Params.ParamByName('campoX').AsString := valorX; Query.Execute; Ps.: O código acima montei de cabeça, mas não testei se a sintaxe está correta (teria que montar de acordo com o componente escolhido mesmo. []'s vou tirar meu clientdataset e deixar a SqlQuery da DBExpress. não seria FieldByName ao invés de ParamByName? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Maio 6, 2009 ParamByName: chamado para setar ou usar os valores de um parâmetro específico baseado no seu nome. FieldByName: chame este comando para recuperar a informação de um campo quando apenas o seu nome é conhecido. Ps.: fiz uma tradução rápida do help do delphi. Ps2: Exemplo usando um TADOQuery: begin dm.q_clientes.Close; dm.q_clientes.Sql.Clear; dm.q_clientes.Sql.Add('Select * from tbl_clientes where fim_contrato Between :dataini and :datafim'); dm.q_clientes.Parameters.ParamByName('dataini').Value := StrToDate(MaskEdit1.text); dm.q_clientes.Parameters.ParamByName('datafim').Value := StrToDate(MaskEdit2.text); dm.q_clientes.Open; end; []'s Compartilhar este post Link para o post Compartilhar em outros sites
Welder 0 Denunciar post Postado Maio 7, 2009 ParamByName: chamado para setar ou usar os valores de um parâmetro específico baseado no seu nome. FieldByName: chame este comando para recuperar a informação de um campo quando apenas o seu nome é conhecido. Ps.: fiz uma tradução rápida do help do delphi. Ps2: Exemplo usando um TADOQuery: begin dm.q_clientes.Close; dm.q_clientes.Sql.Clear; dm.q_clientes.Sql.Add('Select * from tbl_clientes where fim_contrato Between :dataini and :datafim'); dm.q_clientes.Parameters.ParamByName('dataini').Value := StrToDate(MaskEdit1.text); dm.q_clientes.Parameters.ParamByName('datafim').Value := StrToDate(MaskEdit2.text); dm.q_clientes.Open; end; []'s ok. estou fazendo insert e update. agora gostaria de mais ajuda nos campos data. No meu banco existem campos do timpo timestamp e como no arquivo texto tudo é string e ainda no formato 'yyyymmdd' como converter para strtodate e para o formato ddmmyyyy? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Maio 7, 2009 Você pode criar uma função que recebe a data neste formato string e retorna como uma data válida... pra isso terá que usar o copy para separar o dia do mês e do ano e depois organizar os dados pra montar a data válida e ai converter e retornar. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Welder 0 Denunciar post Postado Maio 12, 2009 Você pode criar uma função que recebe a data neste formato string e retorna como uma data válida... pra isso terá que usar o copy para separar o dia do mês e do ano e depois organizar os dados pra montar a data válida e ai converter e retornar. []'s estou usando assim: Ano := Copy(Terceiro,277,4); Mes := Copy(Terceiro,281,2); Dia := Copy(Terceiro,283,2); if (Dia+Mes+Ano) = ' ' then DataInicioAtividades := '' else DataInicioAtividades := Dia+'.'+Mes+'.'+Ano; dmImportar.qryTerceiros.Params.ParamByName('DataInicioAtividades').AsDate := StrToDate(DataInicioAtividades); mas ocorre um erro, pois o firebird diz que a data (exemplo: 01/01/1990 ou 01.01.1990) não é válida e quando a posição no arquivo estiver em branco ele não aceita vazio. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Maio 12, 2009 Ai entra a questão de você tratar os possíveis erros do seu programa amigo... a primeira coisa é saber se o seu campo data deve permitir campos nulos ou não... se não pode existir datas nulas, você tem que bloquear antes de inserir ou atualizar o cadastro do registro sempre que a data vier em branco... se pode haver data nula, então antes de montar seu insert dinamicamente você pode testar quais datas são válidas e quais não são, e com base nisto montar o insert usando apenas estas datas válidas. De resto, recomendo você testar se a conversão da data que sua rotina está devolvendo é válida mesmo para o delphi... eu particularmente sempre usei '/' como separador de datas em meus programas, não o '.'. Põe um showmessage (DateToStr(DataInicioAtividades)) e veja se dá erro nele... se der, é porque sua montagem de datas está inválida. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Welder 0 Denunciar post Postado Maio 13, 2009 Ai entra a questão de você tratar os possíveis erros do seu programa amigo... a primeira coisa é saber se o seu campo data deve permitir campos nulos ou não... se não pode existir datas nulas, você tem que bloquear antes de inserir ou atualizar o cadastro do registro sempre que a data vier em branco... se pode haver data nula, então antes de montar seu insert dinamicamente você pode testar quais datas são válidas e quais não são, e com base nisto montar o insert usando apenas estas datas válidas. De resto, recomendo você testar se a conversão da data que sua rotina está devolvendo é válida mesmo para o delphi... eu particularmente sempre usei '/' como separador de datas em meus programas, não o '.'. Põe um showmessage (DateToStr(DataInicioAtividades)) e veja se dá erro nele... se der, é porque sua montagem de datas está inválida. []'s agora ta ficando beleza. estou verificando e tratanto a variável e depois o parâmetro. desta forma: AnoDataInicioAtividades := Copy(Terceiro,277,4); MesDataInicioAtividades := Copy(Terceiro,281,2); DiaDataInicioAtividades := Copy(Terceiro,283,2); if (DiaDataInicioAtividades+MesDataInicioAtividades+AnoDataInicioAtividades) = ' ' then begin Showmessage('A linha do CNPJ/CPF '+(CNPJCPF)+ #13 + 'está com Data de início das atividades em branco'); VerificaDataInicioAtividade := 1; end else begin DataInicioAtividades := StrToDate(DiaDataInicioAtividades+'/'+MesDataInicioAtividades+'/'+AnoDataInicioAtividades); end; . . . . . . if VerificaDataInicioAtividade = 1 then begin dmImportar.qryTerceiros.Params.ParamByName('DataInicioAtividades').DataType := ftDate; dmImportar.qryTerceiros.Params.ParamByName('DataInicioAtividades').Value := null; end else begin dmImportar.qryTerceiros.Params.ParamByName('DataInicioAtividades').AsDate := DataInicioAtividades; end; bão né?rs..só mais uma coisinha.. teria como alimentar todas as showmessage que estou mostrando para o usuário e ao inves de um showmessage eu mostrar as informações em um memo ou grid, ou combolist?? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Maio 14, 2009 Você poderia criar uma lista que guardasse as informações que quer exibir e, no fim, jogar ela em algum componente visual de sua escolha (como uma treeview por exemplo)... ai você podia montar um form para mostrar os erros capturados nesta lista ou usar um painel oculto e montar sua estrutura para exibir estes dados dentro dele, só mostrando o painel quando fosse do seu interesse com os dados capturados. Se pensar um pouco, vai ver que tem N formas de se fazer o que quer... mas acho que uma das melhores formas de guardar e navegar pelos registros é usando a lista, depois a forma de exibí-los vai de acordo com a sua preferência. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Welder 0 Denunciar post Postado Maio 18, 2009 Você poderia criar uma lista que guardasse as informações que quer exibir e, no fim, jogar ela em algum componente visual de sua escolha (como uma treeview por exemplo)... ai você podia montar um form para mostrar os erros capturados nesta lista ou usar um painel oculto e montar sua estrutura para exibir estes dados dentro dele, só mostrando o painel quando fosse do seu interesse com os dados capturados. Se pensar um pouco, vai ver que tem N formas de se fazer o que quer... mas acho que uma das melhores formas de guardar e navegar pelos registros é usando a lista, depois a forma de exibí-los vai de acordo com a sua preferência. []'s concordo que exista n formas só não consigo colocar em prática ainda, no final de semana dei uma pesquisada mas não obtive sucesso. mas já ta bom, estou conseguindo importar e exportar dados, só falta, interagir mais com o usuário, dizer o que esta faltando ou com erro no arquivo texto, dizer o que foi importado com sucesso, esse tipo de coisas. Compartilhar este post Link para o post Compartilhar em outros sites