Aqui na Telemont, eu tenho feito muito disto nos últimos tempos. Geralmente
como eu faço?

Salvo a planilha em formato Texto separado por tabulações e uso uma rotina
que lê os dados. 

Veja um exemplo tipico que uso, abaixo. Analise o código pra ver como eu
faço. Não se preocupe com nomes de campos ou supostas funções minhas que
venham a aparecer.


procedure TfmpNumPedido.btnImportClick(Sender: TObject);
const
//  CMEDICAOMATERIAL = '2.1.14';
//  CMEDICAOSERVICO = '2.1.09';
  CMEDICAOMATERIAL = '2.1.17';
  CMEDICAOSERVICO = '2.1.16';

//  CMEDICAOMATERIAL = '2.1.14';
//  CMEDICAOSERVICO = '2.1.09';
  CFATURAMENTOMATERIAL = '2.1.17';
  CFATURAMENTOSERVICO = '2.1.16';

var
  fb : file of byte;
  fi, fo, fr : textfile;
  line,
  preco,
  DadNumMedicao,
  DadNumNota,
  DadNumItem,
  DadNumPedido,
  DadPedItem,
  DadPedValor,
  BackupName,
  strLocate,
  strSelMov,
  strMov,
  fname : string;
(*$IFDEF DEBUG*)
  LinhaLog: String;
(*$ENDIF*)
  nprod, nrejected, nerror,
  iLenghtLine, i, j: integer;
  idmov  : integer;
  done : boolean;
  qryItensMov,
  qryMov, qrySelMov, qryLocate : TQuery;
begin
  if eFileName.Text = '' then
  begin
     MessageDlg('Você deverá selecionar um arquivo para proceder com a
importação', mtError, [mbOk], 0);
     eFileName.Setfocus;
     Exit;
  end;
  //
  btnAbort.Visible := True;
  btnImport.Visible := False;
  DecimalSeparator := '.';
  ProgressBarImport.Min := 0;
  ProgressBarImport.Max := 0;
  ProgressBarImport.Position := 1;
  codfilial   := Param.Filial;
  StopProcess := False;
  //
(*$IFDEF DEBUG*)
  assignfile(f, 'c:\temp\tstimpnumpedido.txt');
  rewrite(f);
  writeln(f, 'Numero de pedidos importados');
  writeln(f, 'Data da importação: ' + DateToStr(Now));
  writeln(f,'');
(*$ENDIF*)
  try
    ProgressBarImport.position := 0;
    assignfile(fb, eFileName.text);
    FileMode := 0;
    reset(fb);
    ProgressBarImport.max := FileSize(fb);
    closefile(fb);
  except
    Exit;
  end;
  try
    assignfile(fi, eFileName.text);
    {$i-} Reset(fi); {$i+}
    if ioresult <> 0 then
    begin
      MessageDlg('Erro ao abrir arquivo ' + eFileName.text + 'Erro: ' +
Exception(exceptobject).message, mtError, [mbOk], 0);
      exit;
    end;
    //
    fmpNumPedido.Caption := 'Importanto arquivo ' + eFileName.text;
    CombStatusPlan.Enabled := False;
    chkMedicaoesFat.Enabled := False;
    fname := eFileName.text;
    i := length(fname);
    //
    while (i > 1) and (fname[i] <> '.') do
      dec(i);
    fname := copy(fname, 1, i);
    //  Abre as tabelas do banco para preparação da importação do número do
pedido.
    if iStatusPlan = 0 then
    begin
      strLocate := 'select CAMPOLIVRE2 from TMOV where CODFILIAL =
:CODFILIAL and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("' +
CMEDICAOSERVICO + '","' + CMEDICAOMATERIAL + '") and SERIE = "MD" and
NUMEROMOV = :NUMEROMOV';
      if chkMedicaoesFat.Checked then
        strSelMov := 'select IDMOV from TMOV where CODFILIAL = :CODFILIAL
and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("' + CMEDICAOSERVICO + '","' +
CMEDICAOMATERIAL + '") and SERIE = "MD" and NUMEROMOV = :NUMEROMOV and
STATUS = "F"'
      else
        strSelMov := 'select IDMOV from TMOV where CODFILIAL = :CODFILIAL
and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("' + CMEDICAOSERVICO + '","' +
CMEDICAOMATERIAL + '") and SERIE = "MD" and NUMEROMOV = :NUMEROMOV and
STATUS = "A"';
    end
    else
    begin
      strLocate := 'select CAMPOLIVRE2 from TMOV where CODFILIAL =
:CODFILIAL and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("2.2.01", "2.2.15")
and SERIE in ("U", "1") and NUMEROMOV = :NUMEROMOV';
      strSelMov := 'select IDMOV from TMOV where CODFILIAL = :CODFILIAL and
CODCOLIGADA = :CODCOLIGADA and CODTMV in ("2.2.01", "2.2.15") and SERIE in
("U", "1") and NUMEROMOV = :NUMEROMOV and STATUS = "F"';
    end;
    //
    qryLocate := TQuery.Create(nil);
    qryLocate.DatabaseName := CorporeRM.DatabaseName;
    qryLocate.sql.Clear;
    qryLocate.sql.Add(strLocate);
    qryLocate.Prepare;
    //
    qrySelMov := TQuery.Create(nil);
    qrySelMov.DatabaseName := CorporeRM.DatabaseName;
    qrySelMov.sql.Clear;
    qrySelMov.sql.Add(strSelMov);
    qrySelMov.Prepare;
    //
    qryMov := TQuery.Create(nil);
    qryMov.DatabaseName := CorporeRM.DatabaseName;
    qryMov.sql.Clear;
    //
    if iStatusPlan = 0 then
      qryMov.sql.Add('update TMOV set CAMPOLIVRE2 = :NUMPEDIDO where SERIE =
"MD" and CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and IDMOV =
:IDMOV')
    else
      qryMov.sql.Add('update TMOV set CAMPOLIVRE2 = :NUMPEDIDO where SERIE
in ("U", "1") and CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and
IDMOV = :IDMOV');
    qryMov.Prepare;
    //
    qryItensMov := TQuery.Create(nil);
    qryItensMov.DatabaseName := CorporeRM.DatabaseName;
    qryItensMov.sql.Clear;
    qryItensMov.sql.Add('update TITMMOV set CAMPOLIVRE = :ITEM where
NUMEROSEQUENCIAL = :NUMEROSEQMOV and CODCOLIGADA = :CODCOLIGADA and IDMOV =
:IDMOV');
    qryItensMov.Prepare;
    //
    readln(fi, line);
    // Começa a coleta de dados dos valores das atividades da planília
    while (not done) and (not Eof(fi)) and (not StopProcess) do
    begin
      readln(fi, line);
      iLenghtLine := length(Line);
      if (line <> '') then
      begin
        StatusBar1.Panels[0].Text := 'Lendo o arquivo de importação';
        i := 0;
        j := 0;
        DadNumMedicao := '';
        DadNumNota := '';
        DadNumItem := '';
        DadNumPedido := '';
        DadPedItem := '';
        preco := '';
        DadPedValor := '0';
        btnAbort.Visible := True;
        btnImport.Visible := False;
        while i <= iLenghtLine do
        begin
         {
          while (i <= iLenghtLine) and (line[i] <> #$09) do // Pula o campo
Código da Atividades
            inc(i);
          while line[i] = #$09 do
            inc(i);
          while (i <= iLenghtLine) and (line[i] <> #$09) do  // Pula o campo
Código da Localidade
            inc(i);
          while line[i] = #$09 do
            inc(i);
          while (i <= iLenghtLine) and (line[i] <> #$09) do  // Pula o campo
Descrição
            inc(i);
          while line[i] = #$09 do
            inc(i);
         }
          while (i <= iLenghtLine) and (line[i] <> #$09) do    // Numero do
movimento/Medição
          begin
            if line[i] <> '' then DadNumMedicao := DadNumMedicao + line[i];
            inc(i);
          end;
          while line[i] = #$09 do
            inc(i);
          //
          if iStatusPlan = 1 then
          begin
            while (i <= iLenghtLine) and (line[i] <> #$09) do    // Numero
da Nota fiscal (somente para importação de pedidos já faturados)
            begin
              if line[i] <> '' then DadNumNota := DadNumNota + line[i];
              inc(i);
            end;
          while line[i] = #$09 do
            inc(i);
          end;
          //
          while (i <= iLenghtLine) and (line[i] <> #$09) do   // Sequência
do ítem
          begin
            if line[i] <> '' then DadNumItem := DadNumItem + line[i];
            inc(i);
          end;
          //
          while line[i] = #$09 do
            inc(i);
          while (i <= iLenghtLine) and (line[i] in ['0'..'9', ',', '.',' '])
do   // Valor do ítem
          begin
              if line[i] in ['0'..'9',','] then DadPedValor := DadPedValor +
line[i];
              inc(i);
          end;
          //
          while line[i] = #$09 do
            inc(i);
          while (i <= iLenghtLine) and (line[i] <> #$09) do   // Número do
pedido PC
          begin
            if line[i] <> '' then DadNumPedido := DadNumPedido + line[i];
            inc(i);
          end;
          //
          while line[i] = #$09 do
            inc(i);
          while (i <= iLenghtLine) and (line[i] <> #$09) do    // Número do
ítem do pedido PC
          begin
            if line[i] <> '' then DadPedItem := DadPedItem + line[i];
            inc(i);
          end;
          //
          while line[i] = #$09 do
            inc(i);
          inc(i);  // para pular coluna de valor do serviço
          inc(j);
          Application.ProcessMessages;
        end;
        if iStatusPlan = 0 then
          DadNumMedicao := SomenteDigitos(DadNumMedicao,6)
        else
          DadNumNota := SomenteDigitos(DadNumNota,6);
        Label5.Caption := '';
        StatusBar1.Panels[0].Text := 'Processando o arquivo de importação';
        try
          qryLocate.Close;
          qryLocate.ParamByName('CODFILIAL').AsInteger := codfilial;
          qryLocate.ParamByName('CODCOLIGADA').AsInteger :=
CorporeRM.Coligada;
          if iStatusPlan = 0 then
            qryLocate.ParamByName('NUMEROMOV').AsString := DadNumMedicao
          else
            qryLocate.ParamByName('NUMEROMOV').AsString := DadNumNota;

          qryLocate.Open;
          begin
            try
              qrySelMov.ParamByName('CODFILIAL').AsInteger := codfilial;
              qrySelMov.ParamByName('CODCOLIGADA').AsInteger :=
CorporeRM.Coligada;
              if iStatusPlan = 0 then
                qrySelMov.ParamByName('NUMEROMOV').AsString := DadNumMedicao
              else
                qrySelMov.ParamByName('NUMEROMOV').AsString := DadNumNota;

              qrySelMov.Open;
              if not qrySelMov.Eof then
              begin
                idmov := qrySelMov.FieldByName('IDMOV').AsInteger;
                Label5.Caption := DadNumPedido;
                try
                  // Começa a atualizar primeiramente as medições, ou as
notas fiscais caso as medições já tenham sido faturadas.
                  qryMov.ParamByName('CODFILIAL').AsInteger := codfilial;
                  qryMov.ParamByName('NUMPEDIDO').AsString := DadNumPedido;
                  qryMov.ParamByName('CODCOLIGADA').AsInteger :=
CorporeRM.Coligada;
                  qryMov.ParamByName('IDMOV').AsInteger := idmov;
                  //
(*$IFDEF DEBUG*)
                  if iStatusPlan = 0 then
                    LinhaLog := 'Medição lida: ' + DadNumMedicao + '; Numero
do PC gerado: ' + DadNumPedido
                  else
                    LinhaLog := 'Nota fiscal lida: ' + DadNumNota + ';
Numero do PC gerado: ' + DadNumPedido;
(*$ENDIF*)
                  qryMov.ExecSQL;
                  try
                    //
                    if iStatusPlan = 0 then
                       Label2.Caption := 'Importando o item ' + DadPedItem +
' da Medição nº: ' + DadNumMedicao
                    else
                       Label2.Caption := 'Importando o item ' + DadPedItem +
' da Nota Fiscal nº: ' + DadNumNota;
                    // Começa a atualizar os ítens das medições, ou das
notas fiscais caso as medições já tenham sido faturadas.
                    qryItensMov.ParamByName('ITEM').AsString := DadPedItem;
                    qryItensMov.ParamByName('NUMEROSEQMOV').AsString :=
DadNumItem;
                    qryItensMov.ParamByName('CODCOLIGADA').AsInteger :=
CorporeRM.Coligada;
                    qryItensMov.ParamByName('IDMOV').AsInteger := idmov;
(*$IFDEF DEBUG*)
                    LinhaLog := LinhaLog + '; Número do ítem PC gerado: ' +
DadPedItem;
(*$ENDIF*)
                    qryItensMov.ExecSQL;
                    //
                  except
                    nerror := 2501;
                    if MessageDlg('Ocorreu um erro durante a importação dos
dados. O arquivo de importação pode estar com algum erro ou a conexão com o
banco de dados foi perdida durante este processo. É recomendável você
cancelar esta importação e revisar o arquivo de origem.' + #$0a + #$0d +
#$0a + #$0d + exception(exceptobject).Message + #$0a + #$0d + #$0a + #$0d +
'Deseja prosseguir com a importação? ', mtError, [mbYes, mbNo], 0) = mrNo
then
                    begin
                     StopProcess := True;
                     qryItensMov.Close;
                    end;
(*$IFDEF DEBUG*)
                    LinhaLog := LinhaLog + exception(exceptobject).Message;
(*$ENDIF*)
                  end;
                except
                  nerror := 2501;
                  if MessageDlg('Ocorreu um erro durante a importação dos
dados. O arquivo de importação pode estar com algum erro ou a conexão com o
banco de dados foi perdida durante este processo. É recomendável você
cancelar esta importação e revisar o arquivo de origem.' + #$0a + #$0d +
#$0a + #$0d + exception(exceptobject).Message + #$0a + #$0d + #$0a + #$0d +
'Deseja prosseguir com a importação? ', mtError, [mbYes, mbNo], 0) = mrNo
then
                  begin
                   StopProcess := True;
                   qryMov.Close;
                  end;
(*$IFDEF DEBUG*)
                  LinhaLog := exception(exceptobject).Message;
(*$ENDIF*)
                end;
              end;
              qrySelMov.Close;
            except
             nerror := 2502;
             if MessageDlg('Ocorreu um erro ao conectar com o banco de
dados. A conexão pode ter sido perdida devido a um erro de rede. É
recomendável você cancelar esta importação e revisar a conexão com a base de
dados.'+ #$0a + #$0d + #$0a + #$0d + exception(exceptobject).Message + #$0a
+ #$0d + #$0a + #$0d + 'Deseja prosseguir com a importação?', mtError,
[mbYes, mbNo], 0) = mrNo then StopProcess := True;
            end;
          end;
        except
          nerror := 2502;
          if MessageDlg('Ocorreu um erro ao conectar com o banco de dados. A
conexão pode ter sido perdida devido a um erro de rede. É recomendável você
cancelar esta importação e revisar a conexão com a base de dados.'+ #$0a +
#$0d + #$0a + #$0d + exception(exceptobject).Message + #$0a + #$0d + #$0a +
#$0d + 'Deseja prosseguir com a importação?', mtError, [mbYes, mbNo], 0) =
mrNo then StopProcess := True;
        end;
      end;

(*$IFDEF DEBUG*)
      writeln(f, LinhaLog);
(*$ENDIF*)
      ProgressBarImport.StepBy(iLenghtLine + 2);
      Application.ProcessMessages;
    end;
  finally
    MessageDlg('Importação finalizada', mtInformation, [mbOk], 0);
    //
    CloseFile(fi);
    qryMov.UnPrepare;
    qryItensMov.UnPrepare;
    if nerror <> 2502 then qrySelMov.UnPrepare;
    //
    FreeAndNil(qryMov);
    FreeAndNil(qryItensMov);
    FreeAndNil(qrySelMov);
    //
    btnAbort.Visible := False;
    btnImport.Visible := True;
    CombStatusPlan.Enabled := True;
    chkMedicaoesFat.Enabled := True;
    ProgressBarImport.Position := 0;
    Label5.Caption := '';
    Label2.Caption := '';
    //
(*$IFDEF DEBUG*)
    closefile(f);
(*$ENDIF*)
    //
    if not StopProcess then
    begin
      //
      StatusBar1.Panels[0].Text := 'Concluido';
      BackupName := ExtractFileName(eFileName.text);
      BackupName := ChangeFileExt(BackupName, '.old');
      if not RenameFile(eFileName.text, BackupName) then
        raise Exception.Create('Não foi possível renomear o arquivo já
importado!');
      //
    end
    else
      StatusBar1.Panels[0].Text := 'Interrompido por apresentar erros no
processo';
    //
  end;
end;

[]s

Walter Alves Chagas Junior
Projeto e desenvolvimento de sistemas
Telemont Engenharia de telecomunicações
Belo Horizonte - MG - Brazil
[EMAIL PROTECTED]
Fone: (31) 3389-8215 Fax: (31) 3389-8200


-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
nome de MarcioCC©
Enviada em: quinta-feira, 16 de março de 2006 09:36
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] Itabyte® - Importar .xls para Firebird !!!


Itabyte® - Importar .xls para Firebird !!!


Bom dia pessoal tudo lesgal , seguinte to desenvolvendo um Terminal de
consulta para um supermercado , este programa vai funcionar paralelo a um
programa de automação comercial , este programa de automação comercial vai
gerar um arquivo .xls dos produtos cadastrados para importar para meu
programa.
Eu quero deixar isso automatico tipo deixar um botão com o nome importar ,
qdo clicado importará o arquivo .xls para meu banco Firebird 1.5 (DELPHI 7)
para o Terminal achar o produto cadastrado. Alguem ja fez isso ?? Por favor
daria para me enviar um exemplo ?? Obrigado !!!

JESUS TE AMA !!!
__________________________________________________________________
Itabyte® MarcioCC©
Analista Programador For Delphi - www.itabyte.com
ICQ#: 261138854
      Current ICQ status:     
( Home Tel#:  15-3524-1946
( Work Tel#:  15-9703-4901
7 Fax#:  15-3522-0777
+  More ways to contact me 
       Get ICQ!
__________________________________________________________________


[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>


 
Links do Yahoo! Grupos




 



[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a