Fórum O que esta errado neste LOOP ? #367465

01/01/2009

0

Boa Tarde !!

Sou novato na area e estou apanhando pra fazer esta rotina, esto usando Delphi 7 + Firebird + DBExpress, preciso importar uns arquivos CSV para a minha base de dados, a importação esta funcionado só que esta trazendo apenas o primeiro registro, se alguem puder me ajudar com este codigo ficarei muito grato.

procedure TfrmImportacaoCSV.ParseDelimited(const sl : TStrings;
const value : string; const delimiter : string);
var
dx : integer;
ns : string;
txt : string;
delta : integer;
begin
delta := Length(delimiter) ;
txt := value + delimiter;
sl.BeginUpdate;
sl.Clear;
try
while Length(txt) > 0 do
begin
dx := Pos(delimiter, txt) ;
ns := Copy(txt,0,dx-1) ;
sl.Add(ns) ;
txt := Copy(txt,dx+delta,MaxInt) ;
end;
finally
sl.EndUpdate;
end;
end;

procedure TfrmImportacaoCSV.btnImportarClick(Sender: TObject);
var
arquivo, itens: string;
linhas, temp: TStringList;
i, x: integer;
begin
if OpenDialog1.Execute then
begin
arquivo := OpenDialog1.FileName;
linhas := TStringList.Create;
temp := TStringList.Create;
linhas.LoadFromFile(arquivo);
pb.Max := linhas.Count - 1;
i := 0;

listbox1.Clear;
for i := 0 to Pred(linhas.Count) do
begin
ParseDelimited(temp, linhas[i], ´;´);
Caption := ´Lendo Linha ´ + IntToStr(i) + ´ de ´ + IntToStr(pb.Max);

for x := 0 to Pred(temp.Count) do
cdsClientes.Params.ParamByName(´PID_CLIENTE´).asString := temp[0];
cdsClientes.Open;
cdsClientes.Edit;

If cdsClientes.IsEmpty then
cdsClientes.Insert
else
Begin
If cdsClientesID_CLIENTE.IsNull then

cdsClientesID_CLIENTE.AsString := temp[0];
cdsClientesNOME.Value := temp[1];
cdsClientesCPF.Value := temp[2];

cdsClientes.Post;
cdsClientes.ApplyUpdates(0);
cdsClientes.Close;
end;
end;
itens := itens + temp[x] + ´ | ´;
Inc(x);
pb.Position := pb.Position + i;
ShowMessage(´Registros Importados com Sucesso´);
listbox1.Items.Add(itens);
end;
end;

Obrigado


Badboysjc

Badboysjc

Responder

Posts

01/01/2009

Dbergkamps10

Olá,
Bom 2009 a todos. :lol: :lol: :lol: :lol: :lol: :lol: :lol:
Acho q o problema deve estar aqui:
 
If cdsClientes.IsEmpty then // aqui vc verifica se o cds está vazio
cdsClientes.Insert // somente em caso afirmativo vc adiciona um NOVO
else
Begin
If cdsClientesID_CLIENTE.IsNull then // essa situação só ocorre da 1ª vez

cdsClientesID_CLIENTE.AsString := temp[0];
cdsClientesNOME.Value := temp[1];
cdsClientesCPF.Value := temp[2];

cdsClientes.Post;
cdsClientes.ApplyUpdates(0);
cdsClientes.Close;
end; 

O problema é que vc está sobrescrevendo sempre o mesmo registro, por isso só aparece o 1° :lol: :lol: :lol:
Substitua este código:
If cdsClientes.IsEmpty then // aqui vc verifica se o cds está vazio
cdsClientes.Insert // somente em caso afirmativo vc adiciona um NOVO
else
Begin
If cdsClientesID_CLIENTE.IsNull then 


Por este
cdsClientes.Insert

Espero ter ajudado,
Att
Dalton


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar