여기 저기 돌아다녀서 얻은 소스도 문제가 해결되지 않아 이렇게 올립니다.
문제는 Excel -> DB로 올리고 난후 Excel 파일을 열면 열리지 않는 오류입니다.
강제로 프로세스를 종료해도 계속 남아 있어서 다른 Excel 파일을 열수가 없습니다. 찾다 찾다 못해 이렇게 글을 올립니다.
해결 방법좀 알려주세요
그럼 좋은 하루되세요 ^^
//엑셀이 설치되었있을 경우만 가능
try
//엑셀을 실행
XLApp := CreateOLEObject('Excel.Application');
except
MessageDlg(' Excel이 설치되어 있지 않습니다.',MtWarning,[mbok],0);
exit;
end;
try
XLApp.Visible := False;
XLApp.DisplayAlerts := False;
if odMaster.Execute then begin --> 파일열기 다이얼로그실행
XLOpenFile := odMaster.FileName;
if Trim(XLOpenFile) = '' then Exit;
XLBook := XLApp.WorkBooks.Open(XLOpenFile);
XLBook := XLApp.WorkBooks.item[1]; //워크 쉬트 설정
IFileName := ExtractFileName(XLOpenFile);
//파일에서 확장자만 뺀 파일명을 가져온다. Table명으로 사용하기위해
ISheetNM := Copy(IFileName,1,Pos('.',IFileName)-1);
odMaster.Free;
end;
//---------------------------
// ADO Open
//---------------------------
ADOQuery_Open_Flag := true;
//---------------------------
with ADOQuery do
begin
Close;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
XLOpenFile + ';Extended Properties=excel 8.0;Persist Security Info=False';
SQL.Clear;
SQL.Text := 'SELECT * FROM ['+ISheetNM+'$]';
Open;
end;
Query.Close;
Query.DatabaseName := 'XXX';
Query.SQL.Clear;
ADOQuery.First;
ProgressBar1.Position := 0;
ProgressBar1.Step := 1;
ProgressBar1.Min := 0;
ProgressBar1.Max := ADOQuery.RecordCount;
while not ADOQuery.EOF do begin
df1 := '';
df2 := '';
df3 := '';
df1 := ADOQuery.Fields[1].asString;
df2 := '12345678901234';
df3 := ADOQuery.Fields[2].asString;
Query.SQL.Text := 'Insert into MAST values(''' + df1 + ''',''' +
df2 + ''','''+ df3 +''')';
Query.ExecSQL;
ADOQuery.Next;
ProgressBar1.Position := ADOQuery.RecNo;
end;
ADOQuery.Close;
ADOQuery.Free;
Query.Close;
Query.Free;
XLApp.WorkBooks.Close;
//XLApp.Quit;
//XLApp := unassigned;
//강제종료하는 부분
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
XLApp := unassigned;
end;
Screen.Cursor:= crDefault;
ShowMessage('정상적으로 변환 성공 !');
//Finalize(XLApp);
except
on err:exception do begin
odMaster.Free;
XLApp.WorkBooks.Close;
//XLApp.Quit;
//XLApp := unassigned;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
XLApp := unassigned;
end;
ShowMessage('작업이 취소되었습니다. Data확인요망-'+err.message);
//Finalize(XLApp);
end;
end;
엑셀을 뜨면 화면 한 구석에서 '예쁜짓' 하고 있는 강아지 있쟎습니까...
이놈의 '이쁜짓' 때문에 바로 죽지 않습니다.
이것을 안나오도록 설정하면 마로 죽을 겁니다.