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
[40028] Re:Re:Re:TDBGrid의 내용을 파일로 저장하기..
황경록 [mpbox] 967 읽음    2005-05-02 15:37
DBGrid 에 표시된 내용을 파일로 저장하는 건 아니시죠? -_-?
그렇다면 당연히 DataSource = NULL 은 하시면 안되구요...

그리고 BeginUpdate 를 DBGrid->BeginUpdate 하셨나요?

음 이걸로 될지 모르겠군요 -_- 커서가 움직일지는 잘 모르겠네요 한번 해보세요 ^^::

DBGrid->Columns->BeginUpdate();
try
{

}
__finally
{
DBGrid->Columns->EndUpdate();
}

즐빌하세요!

skjoon 님이 쓰신 글 :
: 답변 감사드립니다.. ^^;;
:
: 조언해주신대로 해봤는데요..
: 일단.. TDBGrid::BeginUpdate() 메소드가 not accessible 이라네요.. ;;
: 그래서 이넘을 생략하고 DataSource = NULL; 로 하면
: 그리드 내용이 사라져 버리구요..
: BeginUpdate()를 이용하면 될 것 같은데.. 방법을 더 찾아봐야겠습니다..
:
: ^^;; 감사합니다.
:
: 황경록 님이 쓰신 글 :
: : 단순히 파일을 저장하는 동안에 커서가 움직이는 게 불편한 거라면 DataSource 를 null 로 했다가
: : 파일 저장후 다시 설정해주시는 것도 괜찮을 것 같은데 어떠세요?
: : 그리고 BeginUpdate 와 EndUpdate 도 사용하시구요 ^^
: :
: : 예를 들면...
: :
: : beginupdate
: : dbgrid->datasource = null or ""?
: : file save process
: : dbgrid->datasource = datasource
: : endupdate
: :
: : 그리고 혹시나 datasource 를 조작하는 과정중에 dbgrid 의 위치가 변경되는 경우 그 위치를 다시 찾아내려면
: : bookmark 기능을 사용해 보심도 괜찮을 듯 하네요.
: : db를 한지가 하도 오래되나서 실질적인 코드는 못보여드립니당 ^^
: :
: : 그럼 즐빌하세요!
: :
: :
: :
: : skjoon 님이 쓰신 글 :
: : : ListView의 OnData에서 커리 내용을 표시하려고 했는데.. 그냥 DBGrid로 쓰려고 합니다..
: : :
: : : DBGrid의 내용을 파일로 저장하려고 하는데, 연결된 TADOQuery 에서
: : : FieldByName()..
: : : Next()
: : : 를 이용해서 파일로 저장하기까지는 되었습니다..
: : :
: : : 그런데 문제는 이렇게 레코드셋을 Next()해서 이동하니까 DBGrid의 내용도 같이 Next()가 된다는 것입니다..
: : :
: : : 다시 말해서 파일저장하기 위해 레코드셋의 커서를 이동하면 그 Query와 연결된 DBGrid의 커서도 같이 이동하는 겁니다.
: : :
: : : 파일 저장하는동안 DBGrid의 커서를 고정시키거나.. 해야하는데.. Query를 하나 더 해서 파일 저장할 때 새로 레코드셋을 만들어서 그 넘을 이용할지.. 아니면 다른 방법을 사용할 지 고민중입니다.
: : :
: : : 혹시 이런 문제 고민해 보신 분 들 계시면 도움 부탁드리겠습니다.
: : :
: : : 다음은 참고로 제가 만들어본 DBGrid --> File 저장하는 부분입니다.
: : : ------------------------------------------------------------
: : : void __fastcall save_log_to_txt_file( AnsiString strfile, void * data, void * prog )
: : : {
: : : #if 1
: : :     if( !data || (strfile.Trim() == "") )
: : :     {
: : :         return;
: : :     }
: : :
: : :     TDataSet * pDS = (TDataSet*)data;
: : :
: : :     // 데이터모듈의 파일저장 다이얼로그를 사용하고 있습니다.
: : :     DM->m_save_dlg->FileName = strfile;
: : :     DM->m_save_dlg->Filter = "Text files (*.txt)|*.TXT";
: : :     if( !DM->m_save_dlg->Execute() )
: : :     {
: : :         return;
: : :     }
: : :
: : :     strfile = DM->m_save_dlg->FileName;
: : :     if( strfile.LowerCase().Pos(".txt") == 0 )
: : :     {
: : :         strfile += ".txt";
: : :     }
: : :
: : :     if( FileExists(strfile.c_str()) )
: : :     {
: : :         // 같은 이름을 가진 파일이 있으면 이전 파일을 백업파일로 변경합니다.
: : :         char szbakfile[256];
: : :         memset( szbakfile, 0x00, sizeof(szbakfile) );
: : :         sprintf( szbakfile, "%s.bak", strfile.c_str() );
: : :
: : :         if( FileExists(szbakfile) )
: : :         {
: : :                 // 같은 이름을 가진 백업파일마저 존재하면 그넘은 지워버립니다.
: : :                 DeleteFile(szbakfile);
: : :         }
: : :
: : :         RenameFile(strfile.c_str(), szbakfile);
: : :     }
: : :
: : :     FILE * logfile = NULL;
: : :
: : :     try {
: : :         logfile = fopen( strfile.c_str(), "a+" );
: : :         if( !logfile )
: : :         {
: : :             return;
: : :         }
: : :
: : :         for( int i = 0; i < pDS->FieldCount; i++ )
: : :         {  // 그리드의 컬럼 내용을 먼저 저장합니다.
: : :             fprintf( logfile, "%s\t", pDS->FieldDefList->FieldDefs[i]->Name.c_str() );
: : :         }
: : :
: : :         fprintf( logfile, "\n" );
: : :
: : :         if( prog )
: : :         {  // 파일저장 과정을 보여줄 프로그래스 바를 초기화합니다.
: : :             ((TProgressBar*)prog)->Max = pDS->RecordCount;
: : :             ((TProgressBar*)prog)->Min = 0;
: : :             ((TProgressBar*)prog)->Position = 0;
: : :         }
: : :
: : :         pDS->First();
: : :         while( !pDS->Eof )
: : :         {
: : :             for( int i = 0; i < pDS->FieldCount; i++ )
: : :             {  // 그리드의 내용을 저장합니다.
: : :                 fprintf( logfile, "%s\t", pDS->FieldByName(pDS->FieldDefList->FieldDefs[i]->Name)->AsString.c_str() );
: : :             }
: : :
: : :             fprintf( logfile, "\n" );
: : :
: : :             if( prog )
: : :             {
: : :                 ((TProgressBar*)prog)->Position += 1;
: : :             }
: : :
: : :             pDS->Next();
: : :             Application->ProcessMessages();
: : :         }
: : :     } catch(...) {
: : :     }
: : :
: : :     if( logfile )
: : :     {
: : :         fclose( logfile );
: : :     }
: : : #endif
: : : }
: : : //---------------------------------------------------------------------------

+ -

관련 글 리스트
40021 TDBGrid의 내용을 파일로 저장하기.. skjoon 1023 2005/05/02
40026     Re:TDBGrid의 내용을 파일로 저장하기.. 황경록 1069 2005/05/02
40027         Re:Re:TDBGrid의 내용을 파일로 저장하기.. skjoon 889 2005/05/02
40028             Re:Re:Re:TDBGrid의 내용을 파일로 저장하기.. 황경록 967 2005/05/02
40029                 Re:Re:Re:Re:TDBGrid의 내용을 파일로 저장하기.. skjoon 1161 2005/05/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.