不是进度条的问题,没写进度条也是要循环结束了,opendialog的窗体才释放完,好像是卡才没释放完的。
procedure TFBDR.ToolButton6Click(Sender: TObject);
var
EXURL,Woname : string;
App,Exc,E1 : object;
FApp,FDocs,Ac : system.DispatchHelper;
i,j,k, RC : integer; // k: 用于记录什么时候执行保存刷新 , RC: 用来记录一共有多少个字段
IDParam : Business.Model.TBizParam; //ID自动增长
JDForm : TJDZT; //进度状态
begin
ADOTable1.Close;
ADOConnection1.Close;
if OpenDialog1.Execute then
begin
EXURL := opendialog1.FileName; //文件路径
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下是直接操作Excel取得EXcel工作表的文件名~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
App := ComObj.CreateOleObject('Excel.Application');
FApp := system.DispatchHelper.Create(App);
FApp.PropertyPut('visible',[false]);
Exc := FApp.PropertyGet('Workbooks',[]);
FDocs := system.DispatchHelper.Create(Exc);
FDocs.InvokeMethod('open',[EXURL]);
//VBA原代码是 ActiveSheet.name
E1 := Fapp.PropertyGet('ActiveSheet',[]);
Ac := system.DispatchHelper.Create(E1);//属性和对象
Woname := Ac.PropertyGet('name',[]).ToString; //取得工作表的名字
FApp.InvokeMethod('quit', []);
(E1 as System.IDisposable).Dispose; //释放
(App as System.IDisposable).Dispose; //释放
(Exc as System.IDisposable).Dispose; //释放
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='''+EXURL+''';Extended Properties=''Excel 8.0'' ersist Security Info=False';
ADOTable1.TableName := '['+Woname+'$]';
ADOTable1.Open;
Query2.Close;
Query2.ConnectionString := 'DataBaseURL=Biz:\ZJGLXT\ZJSJK.Database';
Query2.CommandText := 'SELECT * FROM RZRKFB where 1 <> 1';
Query2.Open;
//业务参数: ID自动增长
IDParam := SystemUtils.TContextUtils.GetParam(self.Context, 'Biz:\OPERATION\BFDNUMBERPARAMS.PARAMGROUP','ProductNo');
JDForm := TJDZT.Create(self.Context); //------------------进度条状态--------------------------------------------
JDForm.ProgressBar1.Position := 1;
JDForm.ProgressBar1.Max := ADOTable1.RecordCount;
JDForm.Show;
j:= 0;
k:= 1;
if ADOTable1.Fields.Count>30 then
RC := 30
else
RC := ADOTable1.Fields.Count;
ADOTable1.First;
while not ADOTable1.Eof do
begin
j := j+1;
Query2.Append;
Query2.FieldByName['BH'].AsString := datasetBroker1.DataSet.FieldByName['BH'].AsString;
Query2.FieldByName['ID'].AsString := variants.VarToStr(IDParam.Value);
for i := 0 to RC-1 do //RC字段数
begin
Query2.FieldByName['zdy'+sysUtils.IntToStr(i+1)].AsString := ADOTable1.Fields.AsString;
end;
JDForm.ProgressBar1.Position := JDForm.ProgressBar1.Position + 1;
if j = k*1000 then //每插入1000条记录,就保存刷新
begin
k := k + 1;
Query2.ApplyUpdates;
Query2.Refresh;
end;
ADOTable1.Next;
end;
JDForm.Close;
JDForm.Free;
Query2.ApplyUpdates; //最后还要保存一次,因为不够1000条记录时没保存
datasetBroker2.DataSet.Refresh;
dataGrid2.ApplyBestFit(nil);
end;
end; |