Ir para conteúdo

Arquivado

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

Welder

importação txt para firebird

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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;

E ai é só chamar isso num teste no código....

 

If not TestaExistenciaRegistro(cpf) then
begin
	insert...
end
else
begin
	update...
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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;

E ai é só chamar isso num teste no código....

 

If not TestaExistenciaRegistro(cpf) then
begin
	insert...
end
else
begin
	update...
end;

[]'s

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não ocorre porque você testa só depois de executar o seu while todo?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
begin
   //Contadores
   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;

Apesar de que eu usaria uma Query em vez de um dataset pra fazer os inserts... em todo caso, seria algo assim que precisa pro seu teste.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
begin
   //Contadores
   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;

Apesar de que eu usaria uma Query em vez de um dataset pra fazer os inserts... em todo caso, seria algo assim que precisa pro seu teste.

 

[]'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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

[]'s

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.

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

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.