C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[13522] Re:Re:[다른질문]데이터양이 많을때??...한꼬맹이님 답변주세요...
건전맨 [hoonlim] 1197 읽음    2001-12-10 18:04
권대길.한꼬맹이 님이 쓰신 글 :
: 건전맨 님이 쓰신 글 :
: : 엑셀 파일을 불러와서 테이블에 집어넣고 그리고 테이블에 있는 내용을 가져옵니다.
: : OpenDialog는 잘 되는데 제가 원하는 파일이 아닙니다.
: :
: : ======>
: :
: : void __fastcall TMainForm::BtnOpenClick(TObject *Sender)
: : {
: :     OpenDialog1->Title    = "Excel 파일 읽어오기";
: :     if (OpenDialog1->Execute())
: :     {
: :         OpenData(OpenDialog1->FileName);
: :     }
: : }
: : //---------------------------------------------------------------------------
: : void TMainForm::OpenData(AnsiString strPath)
: : {
: :     Table1->Close();
: :
: :     AnsiString SQLCommand1;
: :
: :     if( Query1->Active ) Query1->Active = false;
: :     Query1->SQL->Clear();
: :       SQLCommand1 = "DELETE FROM excel";
: :       Query1->SQL->Add( SQLCommand1 );
: :       Query1->ExecSQL();
: :
: :     Variant xlApp;
: :     Variant ttt = OpenDialog1->FileName;
: :     //Variant로 엑셀 인스턴스를 만든다.
: :     xlApp = Variant::CreateObject("Excel.Application");
: :
: :     // 엑셀의 워크북 오브젝트 접근
: :     Variant xlBooks;
: :     xlBooks = xlApp.OlePropertyGet("Workbooks");
: :     // 존재하는 엑셀 파일을 연다.
: :     xlBooks.OleProcedure("Open", "c:\\Book1.xls");
: :            
: :     // 어플리케이션 내에서 첫번째 워크북을 얻는다.
: :     Variant xlBook = xlBooks.OlePropertyGet("Item", 1);
: :     // 워크시트들을 관리할 수 있는 오브젝트를 얻는다.
: :     Variant xlSheets = xlBook.OlePropertyGet("Worksheets");
: :     // 첫번째 워크시트를 얻는다.
: :     Variant xlSheet = xlSheets.OlePropertyGet("Item", 1);
: :
: :
: :     // 셀로 작업할 경우
: :     Variant VCell, VCell1;
: :     AnsiString val1, val2, val3;
: :     VCell = xlSheet.OlePropertyGet("Cells", 1, 1);
: :     val1 = VCell.OlePropertyGet("Value");
: :     VCell = xlSheet.OlePropertyGet("Cells", 1, 2);
: :     val2 = VCell.OlePropertyGet("Value");
: :     VCell = xlSheet.OlePropertyGet("Cells", 1, 3);
: :     val3 = VCell.OlePropertyGet("Value");
: :     int i = 4;
: :     while((val1.Length() != 0) && (val2.Length() != 0) && (val3.Length() != 0))
: :     {
: :
: :     //셀좌표(Y, X)인 셀을 얻는다.
: :         VCell = xlSheet.OlePropertyGet("Cells", i, 1);
: :         val1 = VCell.OlePropertyGet("Value");
: :         VCell = xlSheet.OlePropertyGet("Cells", i, 2);
: :         val2 = VCell.OlePropertyGet("Value");
: :         VCell = xlSheet.OlePropertyGet("Cells", i, 3);
: :         val3 = VCell.OlePropertyGet("Value");
: :         val3 = val3.SubString(1,3) + "-" + val3.SubString(4,3) + "-" + val3.SubString(7,2) + "-"  + val3.SubString(9,4);
: :         if( Query1->Active ) Query1->Active = false;
: :         Query1->SQL->Clear();
: :           SQLCommand1 = "INSERT INTO excel ";
: :         SQLCommand1 = SQLCommand1 + "VALUES ('" + val1 + "','";
: :         SQLCommand1 = SQLCommand1 + val2 + "','";
: :         SQLCommand1 = SQLCommand1 + val3 + "') ";
: :          Query1->SQL->Add( SQLCommand1 );
: :           Query1->ExecSQL();
: :         i++;
: :     }
: :
: :     xlBooks.OleProcedure("Close");
: :     xlApp.OleProcedure("Quit");
: :
: :     Table1->Open();
: : }
: :
: : 제 생각에는 xlBooks.OleProcedure("Open", "c:\\Book1.xls");
: : 여기가 문제인 것 같은데요..
: : c:\\Book1.xls 파일은 잘 열립니다.
: : 그런데 다른 경로에 있는 파일을 가져와도 c:\\Book1.xls 파일이 열립니다.
: : 제가 원하는 경로에 있는 파일을 가져올려면 어떻게 해야 하나요?
: : 한꼬맹이님 답변 부탁드립니다.
: : 아시는 분 있으시면 답변 부탁드리고요...
:
: 안녕하십니까?
:
: 한꼬맹이 입니다.
:
: 당연히 Book1.xls 파일만 불러오니 그런 결과가 나오게 되죠...
:
: OpenData() 부분을 다음과 같이 바꾸셔야 됩니다.
:
: void TMainForm::OpenData(AnsiString strPath)
: {
:     Table1->Close();

:     AnsiString SQLCommand1;

:     if( Query1->Active ) Query1->Active = false;
:     Query1->SQL->Clear();
:        SQLCommand1 = "DELETE FROM excel";
:        Query1->SQL->Add( SQLCommand1 );
:        Query1->ExecSQL();

:      Variant xlApp;
:
: //     Variant ttt = OpenDialog1->FileName;  => 이부분은 참조하지 않으므로 필요 없습니다.
:
:      //Variant로 엑셀 인스턴스를 만든다.
:      xlApp = Variant::CreateObject("Excel.Application");

:      // 엑셀의 워크북 오브젝트 접근
:      Variant xlBooks;
:      xlBooks = xlApp.OlePropertyGet("Workbooks");
:      // 존재하는 엑셀 파일을 연다.
: /*******************************************************************************/
: // =>  이부분을 아래처럼 수정     xlBooks.OleProcedure("Open", "c:\\Book1.xls");
:
:  /* 수정=> */    xlBooks.OleProcedure("Open", strPath);
: /*******************************************************************************/
:
: 그럼 참고하시길...   

안녕하세요?
건전맨입니다.
한꼬맹이님 감사합니다.
그런데 어쩌죠?
한꼬맹이님 글 보기전에 먼저 한꼬맹이님이 하신 것처럼 하여서 잘 되었습니다.
이제는 잘 되구요...
그런데 한가지 더 궁금한 것이 있거든요..
엑셀 파일을 가져오는데 데이터 양이 많으면 부하가 걸려서 그런지 시스템 자체가 다운이 되네요..
이걸 해결 할 방법은 없을까요?
엑셀 파일의 데이터량은 3만개정도고요...
음. 2만개정도 가져 오다가 시스템 전체가 맛이 가네요..
해결해주세요..
리플 부탁합니다.

+ -

관련 글 리스트
13493 Excel 파일 불러오기?? 한꼬맹이님 답변주세요... 건전맨 2328 2001/12/09
13504     Re:Excel 파일 불러오기?? 한꼬맹이님 답변주세요... 권대길.한꼬맹이 1657 2001/12/10
13522         Re:Re:[다른질문]데이터양이 많을때??...한꼬맹이님 답변주세요... 건전맨 1197 2001/12/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.