Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou importando um txt para fdb usando dbexpress e clientdataset, uso o código
procedure TfrmPrincipal.BitBtn1Click(Sender: TObject);
var
Txt: Textfile;
Terceiro, Ano, Mes, Dia: string;
begin
BitBtn1.Enabled:= false;
if OpenDialog1.Execute then
begin
dmImportar.cdsTerceiros.Open;
AssignFile(Txt,(OpenDialog1.FileName));//{ NOME do arquivo texto}
Animate1.Visible:= true;
Animate1.Active:= true;
Reset(Txt);
While not Eoln(Txt) do
begin
Readln(Txt,Terceiro);
dmImportar.cdsTerceiros.Insert;
dmImportar.cdsTerceiros.FieldByName('TIPO').Value:= Copy(Terceiro,1,3);
dmImportar.cdsTerceiros.FieldByName('ORDEM').Value:= Copy(Terceiro,4,5);
dmImportar.cdsTerceiros.FieldByName('FILLER1').Value:= Copy(Terceiro,09,2);
dmImportar.cdsTerceiros.FieldByName('PERSONALIDADE').Value:= StrToInt(Copy(Terceiro,11,1));
dmImportar.cdsTerceiros.FieldByName('CNPJCPF').Value:= Copy(Terceiro,12,14);
dmImportar.cdsTerceiros.FieldByName('RAZAOSOCIAL').Value:= Copy(Terceiro,26,60);
dmImportar.cdsTerceiros.FieldByName('APELIDO').Value:= Copy(Terceiro,86,20);
dmImportar.cdsTerceiros.FieldByName('ENDERECO_TIPO').Value:= Copy(Terceiro,106,10);
dmImportar.cdsTerceiros.FieldByName('ENDERECO_LOGRADOURO').Value:= Copy(Terceiro,116,60);
dmImportar.cdsTerceiros.FieldByName('NUMERO').Value:= Copy(Terceiro,176,10);
dmImportar.cdsTerceiros.FieldByName('CEP').Value:= Copy(Terceiro,206,09);
dmImportar.cdsTerceiros.FieldByName('BAIRRO').Value:= Copy(Terceiro,215,30);
dmImportar.cdsTerceiros.FieldByName('MUNICIPIO').Value:= Copy(Terceiro,245,30);
dmImportar.cdsTerceiros.FieldByName('UF').Value:= Copy(Terceiro,275,2);
Ano := Copy(Terceiro,277,4);
Mes := Copy(Terceiro,281,2);
Dia := Copy(Terceiro,283,2);
dmImportar.cdsTerceiros.FieldByName('DATAINICIOATIVIDADES').Value:= dia+'/'+mes+'/'+ano;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_DDD').Value:= Copy(Terceiro,285,5);
dmImportar.cdsTerceiros.FieldByName('TELEFONE_NUMERO').Value:= Copy(Terceiro,290,10);
dmImportar.cdsTerceiros.FieldByName('TELEFAX_DDD').Value:= Copy(Terceiro,300,5);
dmImportar.cdsTerceiros.FieldByName('TELEFAX_NUMERO').Value:= Copy(Terceiro,305,10);
dmImportar.cdsTerceiros.FieldByName('EMAIL').Value:= Copy(Terceiro,315,50);
dmImportar.cdsTerceiros.FieldByName('HOMEPAGE').Value:= Copy(Terceiro,365,60);
dmImportar.cdsTerceiros.FieldByName('INSCEST').Value:= Copy(Terceiro,425,20);
dmImportar.cdsTerceiros.FieldByName('INSCMUN').Value:= Copy(Terceiro,445,20);
dmImportar.cdsTerceiros.FieldByName('CNAE').Value:= Copy(Terceiro,465,10);
dmImportar.cdsTerceiros.FieldByName('RG_NUMERO').Value:= Copy(Terceiro,475,18);
dmImportar.cdsTerceiros.FieldByName('RG_ORGAO').Value:= Copy(Terceiro,493,5);
dmImportar.cdsTerceiros.FieldByName('RG_ESTADO').Value:= Copy(Terceiro,498,2);
Ano := Copy(Terceiro,500,4);
Mes := Copy(Terceiro,504,2);
Dia := Copy(Terceiro,506,2);
dmImportar.cdsTerceiros.FieldByName('RG_DT_EMISSAO').Value:= dia+'/'+mes+'/'+ano;
dmImportar.cdsTerceiros.FieldByName('SEXO').Value:= StrToInt(Copy(Terceiro,508,1));
dmImportar.cdsTerceiros.FieldByName('CODIGO_PAIS').Value:= Copy(Terceiro,509,4);
dmImportar.cdsTerceiros.FieldByName('CODIGO_IBGE').Value:= Copy(Terceiro,513,5);
dmImportar.cdsTerceiros.FieldByName('FILLER2').Value:= Copy(Terceiro,518,86);
dmImportar.cdsTerceiros.FieldByName('CODIGO_MUN_EST').Value:= Copy(Terceiro,604,10);
dmImportar.cdsTerceiros.Post;
lblProcessando.Caption:= 'Importando, aguarde... '+ IntToStr(dmImportar.cdsTerceiros.RecordCount);
if dmImportar.cdsTerceiros.ApplyUpdates(0) <> 0 then
dmImportar.cdsTerceiros.CancelUpdates;
end;
CloseFile(Txt);
lblProcessando.Caption:= 'Importação realizado com sucesso...';
BitBtn1.Enabled:= true;
BitBtn2.Visible := True;
BitBtn2.Kind:= bkClose;
Animate1.Visible:= true;
Animate1.Active:= False;
lblProcessando.Caption := 'Foi Importado um total de '+ IntToStr(dmImportar.cdsTerceiros.RecordCount)+' registros com sucesso';
end;
end;
Como criar e usar algo que faça uma verificação na tabela e se no arquivo de importação constar CPF/CNPF que já exista na tabela o sistema informar que já existe e não fazer a importação desta linha, mas continua com o processo. outra coisa é verificar no arquivo texto se tem mais de um CPF/CNPJ e importar só o primeiro encontrado, ignorando e informando ao ususário os repetidos.
Lembrando que o CPF/CNPJ seria a chave primária.
Obrigado.
>
Quando se importa registros em massa como está tentando fazer, o ideal é que antes de dar um insert ou update você monte uma rotina que verifique se o dado já existe ou não no banco... o modo mais simples de testar é dar um select na base pelos campos chaves e ver se retorna valor... ser não retornar, põe os comandos que farão o insert... se retornar, os que fazem update, se for o caso.
Pelo que eu vejo no seu caso, talvez o melhor fosse jogar os dados do txt em variáveis, testar e depois gravar/atualizar os valores que estão nestas variáveis dentro do seu while.
[]'s
entendi a lógica. mas não sei se vou conseguir colocar na prática.
Exemplo: Faço um select na tabela pelo CNPJFPF se existir algum que já exista no arquivo eu faço um update ou ignoro, se não eu faço um insert. na prática complicou minha vida.rsrs.
É só bolar uma function que pegue o retorno de um count por exemplo... algo do tipo:
function Tform1.TestaExistenciaRegistro(cpf : string) : boolean;
begin
Query.Close;
Query.Sql.Clear;
Query.Sql.Add('Select count(*) as total from tabela where cpf = ' + QuotedStr(cpf));
Query.Open;
if not Query.IsEmpty then
if Query.FieldByName('total').AsInteger > 0 then
result := true
else
result := false
else result := false;
end;If not TestaExistenciaRegistro(cpf) then
begin
insert...
end
else
begin
update...
end;>
É só bolar uma function que pegue o retorno de um count por exemplo... algo do tipo:
function Tform1.TestaExistenciaRegistro(cpf : string) : boolean;
begin
Query.Close;
Query.Sql.Clear;
Query.Sql.Add('Select count(*) as total from tabela where cpf = ' + QuotedStr(cpf));
Query.Open;
if not Query.IsEmpty then
if Query.FieldByName('total').AsInteger > 0 then
result := true
else
result := false
else result := false;
end;If not TestaExistenciaRegistro(cpf) then
begin
insert...
end
else
begin
update...
end;Não consegui fazer o teste. Estou tentando.
unit ufrmPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, FileCtrl, FMTBcd, DB, SqlExpr;
type
TfrmPrincipal = class(TForm)
btnProcessar: TBitBtn;
OpenDialog1: TOpenDialog;
Animate1: TAnimate;
BitBtn2: TBitBtn;
lblProcessando: TLabel;
Label5: TLabel;
procedure Label5Click(Sender: TObject);
procedure btnProcessarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ExtraiValoresTxt();
function TestaExistenciaRegistro(CnpjCpf : string) : boolean;
end;
var
frmPrincipal: TfrmPrincipal;
implementation
uses udmImportar, DiretoImpressora;
{$R *.dfm}
procedure TfrmPrincipal.ExtraiValoresTxt();
var
Txt: Textfile;
Terceiro: string;
Tipo, Ordem, Filler1,
Personalidade, CnpjCpf, RazaoSocial, Apelido, EnderecoTipo,
EnderecoLogradouro, Numero, Cep, Bairro, Municipio, Uf,
DataInicioAtividades, TelefoneDDD, TelefoneNumero, TelefaxDDD,
TelefaxNumero, Email, HomePage, InscMun, InscEst, Cnae, RgNumero,
RgOrgao, RgUf, RgDataEmissao, Sexo, CodigoPais, CodigoIbge, Filler2,
CodigoMunEst: string;
begin
if OpenDialog1.Execute then
begin
AssignFile(Txt,(OpenDialog1.FileName));//{ NOME do arquivo texto}
Animate1.Visible:= true;
Animate1.Active:= true;
Reset(Txt);
While not Eoln(Txt) do
begin
Readln(Txt,Terceiro);
Tipo := Copy(Terceiro,1,3);
Ordem := Copy(Terceiro,4,5);
Filler1 := Copy(Terceiro,09,2);
Personalidade := Copy(Terceiro,11,1);
CnpjCpf := Copy(Terceiro,12,14);
RazaoSocial := Copy(Terceiro,26,60);
Apelido := Copy(Terceiro,86,20);
EnderecoTipo := Copy(Terceiro,106,10);
EnderecoLogradouro := Copy(Terceiro,116,60);
Numero := Copy(Terceiro,176,10);
Cep := Copy(Terceiro,206,09);
Bairro := Copy(Terceiro,215,30);
Municipio := Copy(Terceiro,245,30);
Uf := Copy(Terceiro,275,2);
DataInicioAtividades := Copy(Terceiro,277,8);
TelefoneDDD := Copy(Terceiro,285,5);
TelefoneNumero := Copy(Terceiro,290,10);
TelefaxDDD := Copy(Terceiro,300,5);
TelefaxNumero := Copy(Terceiro,305,10);
Email := Copy(Terceiro,315,50);
HomePage := Copy(Terceiro,365,60);
InscEst := Copy(Terceiro,425,20);
InscMun := Copy(Terceiro,445,20);
Cnae := Copy(Terceiro,465,10);
RgNumero := Copy(Terceiro,475,18);
RgOrgao := Copy(Terceiro,493,5);
RgUf := Copy(Terceiro,498,2);
RgDataEmissao := Copy(Terceiro,500,8);
Sexo := Copy(Terceiro,508,1);
CodigoPais := Copy(Terceiro,509,4);
CodigoIbge := Copy(Terceiro,513,5);
Filler2 := Copy(Terceiro,518,86);
CodigoMunEst := Copy(Terceiro,604,10);
end;
CloseFile(Txt);
end;
end;
procedure TfrmPrincipal.Label5Click(Sender: TObject);
begin
frmDiretoImpressora.Showmodal;
end;
function TfrmPrincipal.TestaExistenciaRegistro(CnpjCpf: string): boolean;
begin
dmImportar.qryTestaExiste.Close;
dmImportar.qryTestaExiste.Sql.Clear;
dmImportar.qryTestaExiste.Sql.Add('Select count(*) as total from CLIFOR where CNPJCPF = ' + QuotedStr(CnpjCpf));
dmImportar.qryTestaExiste.Open;
if not dmImportar.qryTestaExiste.IsEmpty then
if dmImportar.qryTestaExiste.FieldByName('total').AsInteger > 0 then
result := true
else
result := false
else result := false;
end;
procedure TfrmPrincipal.btnProcessarClick(Sender: TObject);
begin
ExtraiValoresTxt();
If not TestaExistenciaRegistro(CnpjCpf) then
begin
dmImportar.cdsTerceiros.Insert;
dmImportar.cdsTerceiros.FieldByName('TIPO').Value := Tipo;
dmImportar.cdsTerceiros.FieldByName('ORDEM').Value := Ordem;
dmImportar.cdsTerceiros.FieldByName('FILLER1').Value := Filler1;
dmImportar.cdsTerceiros.FieldByName('PERSONALIDADE').Value := StrToInt(Personalidade);
dmImportar.cdsTerceiros.FieldByName('CNPJCPF').Value := CnpjCpf;
dmImportar.cdsTerceiros.FieldByName('RAZAOSOCIAL').Value := RazaoSocial;
dmImportar.cdsTerceiros.FieldByName('APELIDO').Value:= Copy(Terceiro,86,20);
dmImportar.cdsTerceiros.FieldByName('ENDERECO_TIPO').Value:= Copy(Terceiro,106,10);
dmImportar.cdsTerceiros.FieldByName('ENDERECO_LOGRADOURO').Value:= Copy(Terceiro,116,60);
dmImportar.cdsTerceiros.FieldByName('NUMERO').Value:= Copy(Terceiro,176,10);
dmImportar.cdsTerceiros.FieldByName('CEP').Value:= Copy(Terceiro,206,09);
dmImportar.cdsTerceiros.FieldByName('BAIRRO').Value:= Copy(Terceiro,215,30);
dmImportar.cdsTerceiros.FieldByName('MUNICIPIO').Value:= Copy(Terceiro,245,30);
dmImportar.cdsTerceiros.FieldByName('UF').Value:= Copy(Terceiro,275,2);
Ano := Copy(Terceiro,277,4);
Mes := Copy(Terceiro,281,2);
Dia := Copy(Terceiro,283,2);
dmImportar.cdsTerceiros.FieldByName('DATAINICIOATIVIDADES').Value:= dia+'/'+mes+'/'+ano;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_DDD').Value:= Copy(Terceiro,285,5);
dmImportar.cdsTerceiros.FieldByName('TELEFONE_NUMERO').Value:= Copy(Terceiro,290,10);
dmImportar.cdsTerceiros.FieldByName('TELEFAX_DDD').Value:= Copy(Terceiro,300,5);
dmImportar.cdsTerceiros.FieldByName('TELEFAX_NUMERO').Value:= Copy(Terceiro,305,10);
dmImportar.cdsTerceiros.FieldByName('EMAIL').Value:= Copy(Terceiro,315,50);
dmImportar.cdsTerceiros.FieldByName('HOMEPAGE').Value:= Copy(Terceiro,365,60);
dmImportar.cdsTerceiros.FieldByName('INSCEST').Value:= Copy(Terceiro,425,20);
dmImportar.cdsTerceiros.FieldByName('INSCMUN').Value:= Copy(Terceiro,445,20);
dmImportar.cdsTerceiros.FieldByName('CNAE').Value:= Copy(Terceiro,465,10);
dmImportar.cdsTerceiros.FieldByName('RG_NUMERO').Value:= Copy(Terceiro,475,18);
dmImportar.cdsTerceiros.FieldByName('RG_ORGAO').Value:= Copy(Terceiro,493,5);
dmImportar.cdsTerceiros.FieldByName('RG_ESTADO').Value:= Copy(Terceiro,498,2);
Ano := Copy(Terceiro,500,4);
Mes := Copy(Terceiro,504,2);
Dia := Copy(Terceiro,506,2);
dmImportar.cdsTerceiros.FieldByName('RG_DT_EMISSAO').Value:= dia+'/'+mes+'/'+ano;
dmImportar.cdsTerceiros.FieldByName('SEXO').Value:= StrToInt(Copy(Terceiro,508,1));
dmImportar.cdsTerceiros.FieldByName('CODIGO_PAIS').Value:= Copy(Terceiro,509,4);
dmImportar.cdsTerceiros.FieldByName('CODIGO_IBGE').Value:= Copy(Terceiro,513,5);
dmImportar.cdsTerceiros.FieldByName('FILLER2').Value:= Copy(Terceiro,518,86);
dmImportar.cdsTerceiros.FieldByName('CODIGO_MUN_EST').Value:= Copy(Terceiro,604,10);
dmImportar.cdsTerceiros.Post;
lblProcessando.Caption:= 'Importando, aguarde... '+ IntToStr(dmImportar.cdsTerceiros.RecordCount);
if dmImportar.cdsTerceiros.ApplyUpdates(0) <> 0 then
dmImportar.cdsTerceiros.CancelUpdates;
end
else
begin
// update...
end;
end;
lblProcessando.Caption:= 'Importação realizado com sucesso...';
BitBtn1.Enabled:= true;
BitBtn2.Visible := True;
BitBtn2.Kind:= bkClose;
Animate1.Visible:= true;
Animate1.Active:= False;
lblProcessando.Caption := 'Foi Importado um total de '+ IntToStr(dmImportar.cdsTerceiros.RecordCount)+' registros com sucesso';
end;
end;
end.
Assim esta incluindo apenas a ultimo linha do arquivo.
o novo código.
faz a verificação, mas importa apenas a ultima linha do arquivo.
unit ufrmPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, FileCtrl, FMTBcd, DB, SqlExpr;
type
TfrmPrincipal = class(TForm)
btnProcessar: TBitBtn;
OpenDialog1: TOpenDialog;
Animate1: TAnimate;
BitBtn2: TBitBtn;
lblProcessando: TLabel;
Label5: TLabel;
procedure Label5Click(Sender: TObject);
procedure btnProcessarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ExtraiValoresTxt();
function TestaExistenciaRegistro(CnpjCpf : string) : boolean;
end;
var
frmPrincipal: TfrmPrincipal;
implementation
uses udmImportar, DiretoImpressora;
{$R *.dfm}
procedure TfrmPrincipal.ExtraiValoresTxt();
var
Txt: Textfile;
Terceiro: string;
Tipo, Ordem, Filler1,
Personalidade, CnpjCpf, RazaoSocial, Apelido, EnderecoTipo,
EnderecoLogradouro, Numero, Cep, Bairro, Municipio, Uf,
DataInicioAtividades, TelefoneDDD, TelefoneNumero, TelefaxDDD,
TelefaxNumero, Email, HomePage, InscMun, InscEst, Cnae, RgNumero,
RgOrgao, RgUf, RgDataEmissao, Sexo, CodigoPais, CodigoIbge, Filler2,
CodigoMunEst: string;
begin
if OpenDialog1.Execute then
begin
dmImportar.cdsTerceiros.Open;
AssignFile(Txt,(OpenDialog1.FileName));//{ NOME do arquivo texto}
Animate1.Visible:= true;
Animate1.Active:= true;
Reset(Txt);
While not Eoln(Txt) do
begin
Readln(Txt,Terceiro);
Tipo := Copy(Terceiro,1,3);
Ordem := Copy(Terceiro,4,5);
Filler1 := Copy(Terceiro,09,2);
Personalidade := Copy(Terceiro,11,1);
CnpjCpf := Copy(Terceiro,12,14);
RazaoSocial := Copy(Terceiro,26,60);
Apelido := Copy(Terceiro,86,20);
EnderecoTipo := Copy(Terceiro,106,10);
EnderecoLogradouro := Copy(Terceiro,116,60);
Numero := Copy(Terceiro,176,10);
Cep := Copy(Terceiro,206,09);
Bairro := Copy(Terceiro,215,30);
Municipio := Copy(Terceiro,245,30);
Uf := Copy(Terceiro,275,2);
DataInicioAtividades := Copy(Terceiro,277,8);
TelefoneDDD := Copy(Terceiro,285,5);
TelefoneNumero := Copy(Terceiro,290,10);
TelefaxDDD := Copy(Terceiro,300,5);
TelefaxNumero := Copy(Terceiro,305,10);
Email := Copy(Terceiro,315,50);
HomePage := Copy(Terceiro,365,60);
InscEst := Copy(Terceiro,425,20);
InscMun := Copy(Terceiro,445,20);
Cnae := Copy(Terceiro,465,10);
RgNumero := Copy(Terceiro,475,18);
RgOrgao := Copy(Terceiro,493,5);
RgUf := Copy(Terceiro,498,2);
RgDataEmissao := Copy(Terceiro,500,8);
Sexo := Copy(Terceiro,508,1);
CodigoPais := Copy(Terceiro,509,4);
CodigoIbge := Copy(Terceiro,513,5);
Filler2 := Copy(Terceiro,518,86);
CodigoMunEst := Copy(Terceiro,604,10);
end;
CloseFile(Txt);
If not TestaExistenciaRegistro(CnpjCpf) then
begin
dmImportar.cdsTerceiros.Insert;
dmImportar.cdsTerceiros.FieldByName('TIPO').Value := Tipo;
dmImportar.cdsTerceiros.FieldByName('ORDEM').Value := Ordem;
dmImportar.cdsTerceiros.FieldByName('FILLER1').Value := Filler1;
dmImportar.cdsTerceiros.FieldByName('PERSONALIDADE').Value := StrToInt(Personalidade);
dmImportar.cdsTerceiros.FieldByName('CNPJCPF').Value := CnpjCpf;
dmImportar.cdsTerceiros.FieldByName('RAZAOSOCIAL').Value := RazaoSocial;
dmImportar.cdsTerceiros.FieldByName('APELIDO').Value := Apelido;
dmImportar.cdsTerceiros.FieldByName('ENDERECO_TIPO').Value := EnderecoTipo;
dmImportar.cdsTerceiros.FieldByName('ENDERECO_LOGRADOURO').Value := EnderecoLogradouro;
dmImportar.cdsTerceiros.FieldByName('NUMERO').Value := Numero;
dmImportar.cdsTerceiros.FieldByName('CEP').Value := Cep;
dmImportar.cdsTerceiros.FieldByName('BAIRRO').Value := Bairro;
dmImportar.cdsTerceiros.FieldByName('MUNICIPIO').Value := Municipio;
dmImportar.cdsTerceiros.FieldByName('UF').Value := Uf;
//Ano := Copy(Terceiro,277,4);
//Mes := Copy(Terceiro,281,2);
//Dia := Copy(Terceiro,283,2);
//dmImportar.cdsTerceiros.FieldByName('DATAINICIOATIVIDADES').Value := DataInicioAtividades;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_DDD').Value := TelefoneDDD;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_NUMERO').Value := TelefoneNumero;
dmImportar.cdsTerceiros.FieldByName('TELEFAX_DDD').Value := TelefaxDDD;
dmImportar.cdsTerceiros.FieldByName('TELEFAX_NUMERO').Value := TelefaxNumero;
dmImportar.cdsTerceiros.FieldByName('EMAIL').Value := Email;
dmImportar.cdsTerceiros.FieldByName('HOMEPAGE').Value := HomePage;
dmImportar.cdsTerceiros.FieldByName('INSCEST').Value := InscEst;
dmImportar.cdsTerceiros.FieldByName('INSCMUN').Value := InscMun;
dmImportar.cdsTerceiros.FieldByName('CNAE').Value := Cnae;
dmImportar.cdsTerceiros.FieldByName('RG_NUMERO').Value := RgNumero;
dmImportar.cdsTerceiros.FieldByName('RG_ORGAO').Value := RgOrgao;
dmImportar.cdsTerceiros.FieldByName('RG_ESTADO').Value := RgUf;
//Ano := Copy(Terceiro,500,4);
//Mes := Copy(Terceiro,504,2);
//Dia := Copy(Terceiro,506,2);
//dmImportar.cdsTerceiros.FieldByName('RG_DT_EMISSAO').Value := RgDataEmissao;
dmImportar.cdsTerceiros.FieldByName('SEXO').Value := StrToInt(Sexo);
dmImportar.cdsTerceiros.FieldByName('CODIGO_PAIS').Value := CodigoPais;
dmImportar.cdsTerceiros.FieldByName('CODIGO_IBGE').Value := CodigoIbge;
dmImportar.cdsTerceiros.FieldByName('FILLER2').Value := Filler2;
dmImportar.cdsTerceiros.FieldByName('CODIGO_MUN_EST').Value := CodigoMunEst;
dmImportar.cdsTerceiros.Post;
lblProcessando.Caption:= 'Importando, aguarde... '+ IntToStr(dmImportar.cdsTerceiros.RecordCount);
if dmImportar.cdsTerceiros.ApplyUpdates(0) <> 0 then
dmImportar.cdsTerceiros.CancelUpdates;
end
else
begin
// update...
ShowMessage('Registro existente!');
end;
end;
end;
function TfrmPrincipal.TestaExistenciaRegistro(CnpjCpf: string): boolean;
begin
dmImportar.qryTestaExiste.Close;
dmImportar.qryTestaExiste.Sql.Clear;
dmImportar.qryTestaExiste.Sql.Add('Select count(*) as total from CLIFOR where CNPJCPF = ' + QuotedStr(CnpjCpf));
dmImportar.qryTestaExiste.Open;
if not dmImportar.qryTestaExiste.IsEmpty then
if dmImportar.qryTestaExiste.FieldByName('total').AsInteger > 0 then
result := true
else
result := false
else result := false;
end;
procedure TfrmPrincipal.btnProcessarClick(Sender: TObject);
begin
ExtraiValoresTxt();
lblProcessando.Caption:= 'Importação realizado com sucesso...';
btnProcessar.Enabled:= true;
BitBtn2.Visible := True;
BitBtn2.Kind:= bkClose;
Animate1.Visible:= true;
Animate1.Active:= False;
lblProcessando.Caption := 'Foi Importado um total de '+ IntToStr(dmImportar.cdsTerceiros.RecordCount)+' registros com sucesso';
end;
end.
Isso não ocorre porque você testa só depois de executar o seu while todo?
[]'s
>
Isso não ocorre porque você testa só depois de executar o seu while todo?
[]'s
fiz confusão no meu código. eu consigo importar se não verificar se já existe um registro na tabela.
se verificar tem como eu mostrar em um grid o que foi feito somente o update.
Teste assim a sua rotina de gravação:
procedure TfrmPrincipal.ExtraiValoresTxt();
var
Txt: Textfile;
Terceiro: string;
//Contadores
TotalImportado,
TotalAtualizado : Integer;
Tipo, Ordem, Filler1,
Personalidade, CnpjCpf, RazaoSocial, Apelido, EnderecoTipo,
EnderecoLogradouro, Numero, Cep, Bairro, Municipio, Uf,
DataInicioAtividades, TelefoneDDD, TelefoneNumero, TelefaxDDD,
TelefaxNumero, Email, HomePage, InscMun, InscEst, Cnae, RgNumero,
RgOrgao, RgUf, RgDataEmissao, Sexo, CodigoPais, CodigoIbge, Filler2,
CodigoMunEst: string; TotalImportado := 0;
TotalAtualizado := 0;
if OpenDialog1.Execute then
begin
dmImportar.cdsTerceiros.Open;
AssignFile(Txt,(OpenDialog1.FileName));//{ NOME do arquivo texto}
Animate1.Visible:= true;
Animate1.Active:= true;
Reset(Txt);
While not Eoln(Txt) do
begin
Readln(Txt,Terceiro);
Tipo := Copy(Terceiro,1,3);
Ordem := Copy(Terceiro,4,5);
Filler1 := Copy(Terceiro,09,2);
Personalidade := Copy(Terceiro,11,1);
CnpjCpf := Copy(Terceiro,12,14);
RazaoSocial := Copy(Terceiro,26,60);
Apelido := Copy(Terceiro,86,20);
EnderecoTipo := Copy(Terceiro,106,10);
EnderecoLogradouro := Copy(Terceiro,116,60);
Numero := Copy(Terceiro,176,10);
Cep := Copy(Terceiro,206,09);
Bairro := Copy(Terceiro,215,30);
Municipio := Copy(Terceiro,245,30);
Uf := Copy(Terceiro,275,2);
DataInicioAtividades := Copy(Terceiro,277,8);
TelefoneDDD := Copy(Terceiro,285,5);
TelefoneNumero := Copy(Terceiro,290,10);
TelefaxDDD := Copy(Terceiro,300,5);
TelefaxNumero := Copy(Terceiro,305,10);
Email := Copy(Terceiro,315,50);
HomePage := Copy(Terceiro,365,60);
InscEst := Copy(Terceiro,425,20);
InscMun := Copy(Terceiro,445,20);
Cnae := Copy(Terceiro,465,10);
RgNumero := Copy(Terceiro,475,18);
RgOrgao := Copy(Terceiro,493,5);
RgUf := Copy(Terceiro,498,2);
RgDataEmissao := Copy(Terceiro,500,8);
Sexo := Copy(Terceiro,508,1);
CodigoPais := Copy(Terceiro,509,4);
CodigoIbge := Copy(Terceiro,513,5);
Filler2 := Copy(Terceiro,518,86);
CodigoMunEst := Copy(Terceiro,604,10);
If not TestaExistenciaRegistro(CnpjCpf) then
begin
dmImportar.cdsTerceiros.Insert;
dmImportar.cdsTerceiros.FieldByName('TIPO').Value := Tipo;
dmImportar.cdsTerceiros.FieldByName('ORDEM').Value := Ordem;
dmImportar.cdsTerceiros.FieldByName('FILLER1').Value := Filler1;
dmImportar.cdsTerceiros.FieldByName('PERSONALIDADE').Value := StrToInt(Personalidade);
dmImportar.cdsTerceiros.FieldByName('CNPJCPF').Value := CnpjCpf;
dmImportar.cdsTerceiros.FieldByName('RAZAOSOCIAL').Value := RazaoSocial;
dmImportar.cdsTerceiros.FieldByName('APELIDO').Value := Apelido;
dmImportar.cdsTerceiros.FieldByName('ENDERECO_TIPO').Value := EnderecoTipo;
dmImportar.cdsTerceiros.FieldByName('ENDERECO_LOGRADOURO').Value := EnderecoLogradouro;
dmImportar.cdsTerceiros.FieldByName('NUMERO').Value := Numero;
dmImportar.cdsTerceiros.FieldByName('CEP').Value := Cep;
dmImportar.cdsTerceiros.FieldByName('BAIRRO').Value := Bairro;
dmImportar.cdsTerceiros.FieldByName('MUNICIPIO').Value := Municipio;
dmImportar.cdsTerceiros.FieldByName('UF').Value := Uf;
//Ano := Copy(Terceiro,277,4);
//Mes := Copy(Terceiro,281,2);
//Dia := Copy(Terceiro,283,2);
//dmImportar.cdsTerceiros.FieldByName('DATAINICIOATIVIDADES').Value := DataInicioAtividades;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_DDD').Value := TelefoneDDD;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_NUMERO').Value := TelefoneNumero;
dmImportar.cdsTerceiros.FieldByName('TELEFAX_DDD').Value := TelefaxDDD;
dmImportar.cdsTerceiros.FieldByName('TELEFAX_NUMERO').Value := TelefaxNumero;
dmImportar.cdsTerceiros.FieldByName('EMAIL').Value := Email;
dmImportar.cdsTerceiros.FieldByName('HOMEPAGE').Value := HomePage;
dmImportar.cdsTerceiros.FieldByName('INSCEST').Value := InscEst;
dmImportar.cdsTerceiros.FieldByName('INSCMUN').Value := InscMun;
dmImportar.cdsTerceiros.FieldByName('CNAE').Value := Cnae;
dmImportar.cdsTerceiros.FieldByName('RG_NUMERO').Value := RgNumero;
dmImportar.cdsTerceiros.FieldByName('RG_ORGAO').Value := RgOrgao;
dmImportar.cdsTerceiros.FieldByName('RG_ESTADO').Value := RgUf;
//Ano := Copy(Terceiro,500,4);
//Mes := Copy(Terceiro,504,2);
//Dia := Copy(Terceiro,506,2);
//dmImportar.cdsTerceiros.FieldByName('RG_DT_EMISSAO').Value := RgDataEmissao;
dmImportar.cdsTerceiros.FieldByName('SEXO').Value := StrToInt(Sexo);
dmImportar.cdsTerceiros.FieldByName('CODIGO_PAIS').Value := CodigoPais;
dmImportar.cdsTerceiros.FieldByName('CODIGO_IBGE').Value := CodigoIbge;
dmImportar.cdsTerceiros.FieldByName('FILLER2').Value := Filler2;
dmImportar.cdsTerceiros.FieldByName('CODIGO_MUN_EST').Value := CodigoMunEst;
dmImportar.cdsTerceiros.Post;
lblProcessando.Caption:= 'Importando, aguarde... '+ IntToStr(dmImportar.cdsTerceiros.RecordCount);
if dmImportar.cdsTerceiros.ApplyUpdates(0) <> 0 then
dmImportar.cdsTerceiros.CancelUpdates;
end
else
begin
// update...
ShowMessage('Registro existente!');
end;
end;
end;
CloseFile(Txt);
end;[]'s
>
Teste assim a sua rotina de gravação:
procedure TfrmPrincipal.ExtraiValoresTxt();
var
Txt: Textfile;
Terceiro: string;
//Contadores
TotalImportado,
TotalAtualizado : Integer;
Tipo, Ordem, Filler1,
Personalidade, CnpjCpf, RazaoSocial, Apelido, EnderecoTipo,
EnderecoLogradouro, Numero, Cep, Bairro, Municipio, Uf,
DataInicioAtividades, TelefoneDDD, TelefoneNumero, TelefaxDDD,
TelefaxNumero, Email, HomePage, InscMun, InscEst, Cnae, RgNumero,
RgOrgao, RgUf, RgDataEmissao, Sexo, CodigoPais, CodigoIbge, Filler2,
CodigoMunEst: string; TotalImportado := 0;
TotalAtualizado := 0;
if OpenDialog1.Execute then
begin
dmImportar.cdsTerceiros.Open;
AssignFile(Txt,(OpenDialog1.FileName));//{ NOME do arquivo texto}
Animate1.Visible:= true;
Animate1.Active:= true;
Reset(Txt);
While not Eoln(Txt) do
begin
Readln(Txt,Terceiro);
Tipo := Copy(Terceiro,1,3);
Ordem := Copy(Terceiro,4,5);
Filler1 := Copy(Terceiro,09,2);
Personalidade := Copy(Terceiro,11,1);
CnpjCpf := Copy(Terceiro,12,14);
RazaoSocial := Copy(Terceiro,26,60);
Apelido := Copy(Terceiro,86,20);
EnderecoTipo := Copy(Terceiro,106,10);
EnderecoLogradouro := Copy(Terceiro,116,60);
Numero := Copy(Terceiro,176,10);
Cep := Copy(Terceiro,206,09);
Bairro := Copy(Terceiro,215,30);
Municipio := Copy(Terceiro,245,30);
Uf := Copy(Terceiro,275,2);
DataInicioAtividades := Copy(Terceiro,277,8);
TelefoneDDD := Copy(Terceiro,285,5);
TelefoneNumero := Copy(Terceiro,290,10);
TelefaxDDD := Copy(Terceiro,300,5);
TelefaxNumero := Copy(Terceiro,305,10);
Email := Copy(Terceiro,315,50);
HomePage := Copy(Terceiro,365,60);
InscEst := Copy(Terceiro,425,20);
InscMun := Copy(Terceiro,445,20);
Cnae := Copy(Terceiro,465,10);
RgNumero := Copy(Terceiro,475,18);
RgOrgao := Copy(Terceiro,493,5);
RgUf := Copy(Terceiro,498,2);
RgDataEmissao := Copy(Terceiro,500,8);
Sexo := Copy(Terceiro,508,1);
CodigoPais := Copy(Terceiro,509,4);
CodigoIbge := Copy(Terceiro,513,5);
Filler2 := Copy(Terceiro,518,86);
CodigoMunEst := Copy(Terceiro,604,10);
If not TestaExistenciaRegistro(CnpjCpf) then
begin
dmImportar.cdsTerceiros.Insert;
dmImportar.cdsTerceiros.FieldByName('TIPO').Value := Tipo;
dmImportar.cdsTerceiros.FieldByName('ORDEM').Value := Ordem;
dmImportar.cdsTerceiros.FieldByName('FILLER1').Value := Filler1;
dmImportar.cdsTerceiros.FieldByName('PERSONALIDADE').Value := StrToInt(Personalidade);
dmImportar.cdsTerceiros.FieldByName('CNPJCPF').Value := CnpjCpf;
dmImportar.cdsTerceiros.FieldByName('RAZAOSOCIAL').Value := RazaoSocial;
dmImportar.cdsTerceiros.FieldByName('APELIDO').Value := Apelido;
dmImportar.cdsTerceiros.FieldByName('ENDERECO_TIPO').Value := EnderecoTipo;
dmImportar.cdsTerceiros.FieldByName('ENDERECO_LOGRADOURO').Value := EnderecoLogradouro;
dmImportar.cdsTerceiros.FieldByName('NUMERO').Value := Numero;
dmImportar.cdsTerceiros.FieldByName('CEP').Value := Cep;
dmImportar.cdsTerceiros.FieldByName('BAIRRO').Value := Bairro;
dmImportar.cdsTerceiros.FieldByName('MUNICIPIO').Value := Municipio;
dmImportar.cdsTerceiros.FieldByName('UF').Value := Uf;
//Ano := Copy(Terceiro,277,4);
//Mes := Copy(Terceiro,281,2);
//Dia := Copy(Terceiro,283,2);
//dmImportar.cdsTerceiros.FieldByName('DATAINICIOATIVIDADES').Value := DataInicioAtividades;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_DDD').Value := TelefoneDDD;
dmImportar.cdsTerceiros.FieldByName('TELEFONE_NUMERO').Value := TelefoneNumero;
dmImportar.cdsTerceiros.FieldByName('TELEFAX_DDD').Value := TelefaxDDD;
dmImportar.cdsTerceiros.FieldByName('TELEFAX_NUMERO').Value := TelefaxNumero;
dmImportar.cdsTerceiros.FieldByName('EMAIL').Value := Email;
dmImportar.cdsTerceiros.FieldByName('HOMEPAGE').Value := HomePage;
dmImportar.cdsTerceiros.FieldByName('INSCEST').Value := InscEst;
dmImportar.cdsTerceiros.FieldByName('INSCMUN').Value := InscMun;
dmImportar.cdsTerceiros.FieldByName('CNAE').Value := Cnae;
dmImportar.cdsTerceiros.FieldByName('RG_NUMERO').Value := RgNumero;
dmImportar.cdsTerceiros.FieldByName('RG_ORGAO').Value := RgOrgao;
dmImportar.cdsTerceiros.FieldByName('RG_ESTADO').Value := RgUf;
//Ano := Copy(Terceiro,500,4);
//Mes := Copy(Terceiro,504,2);
//Dia := Copy(Terceiro,506,2);
//dmImportar.cdsTerceiros.FieldByName('RG_DT_EMISSAO').Value := RgDataEmissao;
dmImportar.cdsTerceiros.FieldByName('SEXO').Value := StrToInt(Sexo);
dmImportar.cdsTerceiros.FieldByName('CODIGO_PAIS').Value := CodigoPais;
dmImportar.cdsTerceiros.FieldByName('CODIGO_IBGE').Value := CodigoIbge;
dmImportar.cdsTerceiros.FieldByName('FILLER2').Value := Filler2;
dmImportar.cdsTerceiros.FieldByName('CODIGO_MUN_EST').Value := CodigoMunEst;
dmImportar.cdsTerceiros.Post;
lblProcessando.Caption:= 'Importando, aguarde... '+ IntToStr(dmImportar.cdsTerceiros.RecordCount);
if dmImportar.cdsTerceiros.ApplyUpdates(0) <> 0 then
dmImportar.cdsTerceiros.CancelUpdates;
end
else
begin
// update...
ShowMessage('Registro existente!');
end;
end;
end;
CloseFile(Txt);
end;[]'s
então faço o uso das variaveis contadores para saber o que foi inserido e o que foi atualizado.
é posso usar query mesmo, estou usando dbexpress (unidirecional), mas aqui não tem loop na query, só no arquivo texto.
Você faz um loop no arquivo para ler linha a linha os registros, estou certo? Sendo assim, seu while vai ler um arquivo e jogar os dados da linha nas variáveis correto? Com base nisto, a cada linha lida o código que montei pra você chama sua rotina de teste se o registro já está gravado e, se não estiver, manda gravar o registro... mas não entendi o que você quis dizer com não ter loop na query....
Agora é com você adaptar seu código... eu coloquei duas variáveis do tipo integer para servir como seus contadores de quantos registros foram inseridos e quantos foram atualizados, só não programei isso por ser simples de fazer.
[]'s
>
Você faz um loop no arquivo para ler linha a linha os registros, estou certo? Sendo assim, seu while vai ler um arquivo e jogar os dados da linha nas variáveis correto? Com base nisto, a cada linha lida o código que montei pra você chama sua rotina de teste se o registro já está gravado e, se não estiver, manda gravar o registro... mas não entendi o que você quis dizer com não ter loop na query....
Agora é com você adaptar seu código... eu coloquei duas variáveis do tipo integer para servir como seus contadores de quantos registros foram inseridos e quantos foram atualizados, só não programei isso por ser simples de fazer.
[]'s
certo o loop é no arquivo.
tudo bem, eu quis dizer com não tem loop na query TSQLQuery da dbexpress, que é unidirecional, ai a necessidade de um clientdataset, mas neste caso, estamos indo só em uma diração.
Certo... mas não estou entendendo onde quer chegar com a sua colocação... pense um pouco: um arquivo possui 30 registros em 30 linhas... a única forma de você gravar os dados é usar o loop que lê o arquivo para isso correto? Não há como guardar os 30 registros do loop para inserir depois no modo que está usando seu código, a menos que você crie uma lista e jogue todos os registros nela, e depois varra a lista num loop e grava os registros que ainda não foram gravados... contudo, nesta hipótese, você faria 2 loops pra gravar quando no primeiro você já mata tudo. Se usar um TQuery para inserir, tudo o que precisa é montar a query em runtime com os valores atualizados (pode até usar uma query com parâmetros se facilitar pra você), e a cada loop você testa antes se o arquivo existe e se não existe fecha o TQuery, carrega a sql gerada com os registros que vai gravar e executa.
Não sei qual é a sua dificuldade no momento para fazer isso...
[]'s
>
Certo... mas não estou entendendo onde quer chegar com a sua colocação... pense um pouco: um arquivo possui 30 registros em 30 linhas... a única forma de você gravar os dados é usar o loop que lê o arquivo para isso correto?
[]'s
Quanto a isso tudo correto.
>
Não há como guardar os 30 registros do loop para inserir depois no modo que está usando seu código, a menos que você crie uma lista e jogue todos os registros nela, e depois varra a lista num loop e grava os registros que ainda não foram gravados... contudo, nesta hipótese, você faria 2 loops pra gravar quando no primeiro você já mata tudo.
[]'s
desta forma não quero fazer.
>
Se usar um TQuery para inserir, tudo o que precisa é montar a query em runtime com os valores atualizados (pode até usar uma query com parâmetros se facilitar pra você), e a cada loop você testa antes se o arquivo existe e se não existe fecha o TQuery, carrega a sql gerada com os registros que vai gravar e executa.
[]'s
não é desta forma que esta sendo feito? Só que usando ClientDataSet...
desculpa a dificuldade é que meu tempo ta pouco e quando montar este de importação tenho que montar o de exportação.
>
não é desta forma que esta sendo feito? Só que usando ClientDataSet...
desculpa a dificuldade é que meu tempo ta pouco e quando montar este de importação tenho que montar o de exportação.
Até onde sei é isto... mas não estou conseguindo ver no que você tá empacado ai pra poder lhe ajudar... saca? Usando o código que já montamos, o que está acontecendo? Está dando erro, não está inserindo os registros... o que está acontecendo ai? Acho que você concorda comigo que não tem como eu adivinhar o que você pensa e o que está acontecendo ai na sua máquina amigo...
Seja um pouco mais claro e coloque exemplos do que ocorre se possível.
[]'s
>
>
não é desta forma que esta sendo feito? Só que usando ClientDataSet...
desculpa a dificuldade é que meu tempo ta pouco e quando montar este de importação tenho que montar o de exportação.
Até onde sei é isto... mas não estou conseguindo ver no que você tá empacado ai pra poder lhe ajudar... saca? Usando o código que já montamos, o que está acontecendo? Está dando erro, não está inserindo os registros... o que está acontecendo ai? Acho que você concorda comigo que não tem como eu adivinhar o que você pensa e o que está acontecendo ai na sua máquina amigo...
Seja um pouco mais claro e coloque exemplos do que ocorre se possível.
[]'s
Claro concordo com você. Vou passar uma posição de como esta aqui.
Esta importando todos registros sem erros. Os duplicados eu não estou fazendo nada com eles, só não deixo ir para o banco e emito o showmessage. O interessante era criar um checkbox ou radiobox para o cliente informar se faz o upgrade ou não importa os repetidos. ai vem outra dificuldade é fazer o upgrade utilizando a linha do arquivo.
Isso é até simples de resolver... use o MessageDialog para questionar o cliente quanto ao que ele quer fazer (no lugar que está o showmessage do Registro Existente) ... ai dependendo da resposta dele você faz ou não o update.
//Se confirmar, atualiza, senão não faz nada
if MessageDlg('Deseja atualizar o registro do cliente ' + RazaoSocial + '?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
begin
<comandos para atualizar>
end;>
Isso é até simples de resolver... use o MessageDialog para questionar o cliente quanto ao que ele quer fazer (no lugar que está o showmessage do Registro Existente) ... ai dependendo da resposta dele você faz ou não o update.
//Se confirmar, atualiza, senão não faz nada
if MessageDlg('Deseja atualizar o registro do cliente ' + RazaoSocial + '?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
begin
<comandos para atualizar>
end;tudo bem. eu pensei em criar um GrupoBox com RadioButtons ao invés do MessagDialog, com as opções: Grava somente arquivos novos; Atualiza Arquivos existentes; até ai tudo bem, mas o <comandos para atualizar> é que não consigo montar.
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
>
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;[]'s
vou tirar meu clientdataset e deixar a SqlQuery da DBExpress.
>
>
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;[]'s
vou tirar meu clientdataset e deixar a SqlQuery da DBExpress.
não seria FieldByName ao invés de ParamByName?
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;>
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;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?
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
>
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.
Quando se importa registros em massa como está tentando fazer, o ideal é que antes de dar um insert ou update você monte uma rotina que verifique se o dado já existe ou não no banco... o modo mais simples de testar é dar um select na base pelos campos chaves e ver se retorna valor... ser não retornar, põe os comandos que farão o insert... se retornar, os que fazem update, se for o caso.
Pelo que eu vejo no seu caso, talvez o melhor fosse jogar os dados do txt em variáveis, testar e depois gravar/atualizar os valores que estão nestas variáveis dentro do seu while.
[]'s