var
  sSql:String;
  i:integer;
  AdoCmd :TAdoCommand  ;
  p_Start, p_Cost : DWORD;
begin

  //連線字串自己決定,1是開EXCEL的 2是DB的
  ADOConnection1.ConnectionString:='Provider = Microsoft.Jet.OLEDB.4.0; Data Source =12.xls; Extended Properties="Excel 8.0;Persist Security Info=False;IMEX=1;"';
  ADOConnection2.ConnectionString:='Provider=SQLNCLI11.1;Persist Security Info=False;User ID=sa;Initial Catalog=bcppp;Data Source=.;Initial File Name="";Server SPN="";Password="123"';

//先將EXCEL轉入 

//當 IMEX=0 時為「匯出模式」,這個模式開啟的 Excel 檔案只能用來做「寫入」用途。
//當 IMEX=1 時為「匯入模式」,這個模式開啟的 Excel 檔案只能用來做「讀取」用途。
//當 IMEX=2 時為「連結模式」,這個模式開啟的 Excel 檔案可同時支援「讀取」與「寫入」用途。

//HDR=Yes 忽略檔頭,因我要拿檔頭當FieldName 因此連線字串將其移除

  ADOQuery1.Close;1
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := 'Select TA001,TA002 FROM [abc$]' //這個ABC是分頁名稱,可以透過Fieldname來塞選你們要寫入的值
  ADOQuery1.Open;


  sSql := 'INSERT INTO POSTA (TA001, TA002) values (:TA001, :TA002)';   //組自己要的資料結構
  AdoCmd := TAdoCommand.Create(NIL);
  AdoCmd.Connection := ADOConnection2;


  AdoCmd.Parameters.Clear();
  AdoCmd.CommandText := sSql;
  AdoCmd.CommandType := cmdText;
  AdoCmd.Parameters.ParseSQL( sSql, True );
  AdoCmd.Parameters.ParamByName('TA001').DataType := ftString;
  AdoCmd.Parameters.ParamByName('TA002').DataType := ftString;

 

//迴圈區

  p_Start:=GetTickCount();
  TRY
    AdoCmd.Connection.BeginTrans;
    TRY
      ADOQuery1.First;
      while not ADOQuery1.eof do
      begin
        AdoCmd.Parameters.ParamByName('TA001').Value := ADOQuery1.FieldByName('TA001').AsString;
        AdoCmd.Parameters.ParamByName('TA002').Value := ADOQuery1.FieldByName('TA002').AsString;
        AdoCmd.Execute;
        ADOQuery1.Next;
      end
    FINALLY
      AdoCmd.Connection.CommitTrans;
    END;
  EXCEPT
    AdoCmd.Connection.RollbackTrans;
  END;
  p_Cost:=GetTickCount()-p_Start;
  showmessage('spend time: '+format('%0.3n',[p_Cost/1000])+'s');


end;

arrow
arrow
    全站熱搜

    kuraki5336 發表在 痞客邦 留言(0) 人氣()