Importar Excel para SQL Server 2012 com Delphi

05/02/2015

0

Pessoal, depois de anos sem programar, basicamente somente na escola e faculdade, resolvi desenvolver um aplicativo para ajudar no trabalho. Estou encontrando um problema para Importar uma planilha em Excel para o SQL.

Segue o meu código para importar abaixo:

var
  Excel, sheet: OleVariant;
  i: Integer;
  arquivo, Location: string;
  DateLoc: TDateTime;
begin
  i:=3;
  if opendialog1.Execute then
  begin
    arquivo:=opendialog1.FileName;
    Excel:= CreateOleObject('Excel.Application');    //Crio o objeto que gerencia o arquivo excel
    Excel.Visible:=False;
    Excel.DisplayAlerts:=False;
    Excel.WorkBooks.Open(arquivo);    //Abro o arquivo
    sheet:= Excel.WorkSheets[1];    //Pego a primeira planilha do arquivo
    while sheet.cells[i,1].Text <> '' do
    begin
      dm.SQLDataSet1.Close;
      dm.SQLDataSet1.CommandText := 'Select * from TID where Barcode = ''' + Excel.WorkSheets[1].cells[i, 1].Text + '''';
      dm.SQLDataSet1.Open;
      if dm.SQLDataSet1.RecordCount = 0 then
      begin
        dm.SQLDataSet1.Close;
        dm.SQLDataSet1.Open;
        dm.SQLDataSet1.Last;
        dm.SQLDataSet1.Insert;
        dm.SQLDataSet1.FieldByName('Barcode').AsString := Excel.WorkSheets[1].Cells[i, 1];
        dm.SQLDataSet1.FieldByName('Description').AsString := Excel.WorkSheets[1].Cells[i, 2];
        if not (Excel.WorkSheets[1].Cells[i, 4].Text='') then
        begin
        label1.Caption:= Excel.WorkSheets[1].Cells[i, 4].Text;
        dm.SQLDataSet1.FieldByName('Date Change Location').AsDatetime:= strtodate(label1.Caption);
        end;
        if not (Excel.WorkSheets[1].Cells[i, 5].Text='') then
        begin
        dm.SQLDataSet1.FieldByName('Tape Assigned').Asdatetime := strtodatetime(Excel.WorkSheets[1].Cells[i, 5].Text);
        end;
        if not (Excel.WorkSheets[1].Cells[i, 6].Text='') then
        begin
        dm.SQLDataSet1.FieldByName('Tape Returned').Asdatetime := strtodatetime(Excel.WorkSheets[1].Cells[i, 6].Text);
        end;
        dm.SQLDataSet1.Post;
        dm.SQLDataSet1.Close;
      end;
      i:= i+1;
     end;
     //Fecho a planilha
     Excel.WorkBooks.Close;
end;
showmessage('Done');
end;



O problema que estou encontrando, é que a coluna Location no arquivo em excel é um combobox e ele retorna erro.
Colunas Date Change Location, Tape Assigned e Tape Returned, são datas, e retorna o mesmo erro.
Todos os erros retornam como: Operação de várias etapas gerou erros. Verifique cada valor de status.

No SQL o campo Location ja configurei como nvarchar(50), text, e não tive nenhum sucesso. Os campos de data estão como datetime.

Alguém do fórum poderia ajudar a achar uma solução?

Obrigado,
Eduardo Oliveira

Eduardo Oliveira

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar