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;