Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Welder

importação txt para firebird

Recommended Posts

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.