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
[15461] Re:Re:Re:[질문]Thank you... You save my life..
만해 [greenuri] 935 읽음    2002-02-13 06:42
이상헌 님이 쓰신 글 :
:
:  안녕하세요. 만해님...
:  정말 감사합니다.
:  핵심을 정확히 짚어 주셨군요...
:  말씀하신 방법을 아마 저도 사용해야 할 것 같습니다.
:
:  Table을 올려놓고, Insert()와 Post()를 사용하는
:  간단한 코드 샘플을 좀 볼 수 있다면 아마 더 큰 도움이 될 것 같습니다.
:
:  한번만 더 도와주시겠습니까?
:
:  감사합니다.
:  새해 복 많이 받으세요..
:
:  이상헌

:
: 만해 님이 쓰신 글 :
: : 이상헌 님이 쓰신 글 :
: : :  안녕하세요. 저는 이상헌이라고 합니다.
: : :  ACCESS DB에 많은 양의 데이터를 저장하고 있습니다.
: : :
: : :  그런데 문제는 이 부분을 실행할때 CPU가 독점되어서인지
: : :  프로그램이 실행되는 동안은 모양도 제대로 보이지 않고
: : :  색깔도 안나타나고 뜨지도 않고......
: : :
: : :  쓰레드같은 것으로 해결해야 할 것으로 생각하는데,
: : :  제가 쓰레드는 잘 모르기 때문에 이렇게 올립니다.
: : :
: : :  만일
: : :
: : :  void __fastcall TForm1::Button2Click(TObject *Sender)
: : :  {
: : :     int i,j;
: : :     AnsiString temp1, temp2, temp3;
: : :     for(j=0; j<1000; ++j)
: : :     {
: : :       for(i=0; i<50; ++i)
: : :       {
: : :         temp1 = IntToStr(i);
: : :         temp2 = IntToStr(j);
: : :         temp3 = data2[i*1000+j];
: : :
: : :         q->SQL->Clear();
: : :         mySQL = "INSERT INTO TSIMUL_OUT VALUES";
: : :         mySQL +="( 1, \"1\", \"0004\", ";
: : :         mySQL += temp1 + "," + temp2 + "," + temp3 +")";
: : :         q->SQL->Add(mySQL);
: : :         q->ExecSQL();
: : :      }
: : :    }
: : :
: : :    q->Close();
: : :  }
: : :
: : :  이런 코드인데요..
: : :  이러한 경우는 어떻게 쓰레드를 이용할 수 있나요?
: : :  또
: : :  한가지 궁금한 것은 Insert나 Update 문이 매우 많을때 속도를 빠르게 할 수 있는 방법이
: : :  없나 궁금합니다.
: : :
: : :  혹시 제 소스에 문제점이 발견된다면 알려주시기 바랍니다.
: : :
: : :  친절하신 분들의 많은 도움 부탁드립니다.
: : :
: : :  그럼 안녕히 계세요..
: : :
: : :  이상헌
: : : 
: :
: : 안녕하세요 만해 입니다.
: :
: : 저도 님 처럼 비슷한 소스를 가지고 있었는데요
: :
: : CPU에 무리가 엄청나게 발생해서
: :
: : 바꿧는데요
: :
: : 그냥 Table을 하나 올려 놓고
: :
: : Table에서 insert()하고
: :
: : Post()를 이용해서 해결 했습니다.
: :
: : 쿼리보다는 상당히 빠르더군요
: :
: : 참고 하세요
: :

안녕하세요 만해 입니다.

허걱~

제 답변이 도움이 됬다니 기분이 좋네요 ~

try
        {
          DM001->QUrl->Close();
          DM001->QUrl->SQL->Clear();
          DM001->QUrl->SQL->Add("Insert into " + Domain+ " (ID,Depth,Link,IsExp) ");
          DM001->QUrl->SQL->Add("values(:ID,:Depth,:Link,:IsExp)");
          DM001->QUrl->ParamByName("ID")->AsInteger = Id;
          DM001->QUrl->ParamByName("Depth")->AsInteger = Depth;
          DM001->QUrl->ParamByName("Link")->AsString = Url;
          DM001->QUrl->ParamByName("IsExp")->AsBoolean = false;
          DM001->QUrl->ExecSQL();
          TIniFile *pIniFile = new TIniFile(ExtractFileDir (Application->ExeName)+"\\DB.ini");
          pIniFile->WriteInteger(Domain,"Table Counter",Id);
          delete pIniFile;
        }
      catch (Exception &E)
        {
          ShowMessage(E.Message);
          DM001->QUrl->Close();
          return false;
        }

원래는 위의 루틴을 무식하게 막 돌렸는데요

void __fastcall TMain::Save_Ref_Data(AnsiString LinkTable,TList* List)
{
DM001->TblTmp->TableName = LinkTable + "_Link";
  DM001->TblTmp->Open();
  for ( int i = 0; i < List->Count ; i ++ )
    {
    try
//    "(PId Long NOT NULL,pDepth LONG NOT NULL , CID Long NOT NULL, cDepth LONG NOT NULL ); ";
      {
        TData *CurData = (TData*)List->Items[i];
        if ( CurData->GetId() != -1 )
          {
            DM001->TblTmp->Insert();
            DM001->TblTmp->FieldByName("PId")->AsInteger = CurId;
            DM001->TblTmp->FieldByName("pDepth")->AsInteger = CurDepth;
            DM001->TblTmp->FieldByName("cID")->AsInteger = CurData->GetId();
            DM001->TblTmp->FieldByName("cDepth")->AsInteger = CurData->GetDepth();
            DM001->TblTmp->Post();
          }
      }
    catch ( Exception &e )
      {
        ShowMessage(e.Message);
        DM001->TblTmp->Close();
        DM001->TblTmp->Database->Close();
      }
    }
  List->Clear();
  DM001->TblTmp->Close();
}

이렇게 리스트로 된 자료를 Table을 이용해서 저장 했답니다.

헐~

그런데 이거 제 소스 그냥 싹 올린건데

그냥 배껴 쓰지는 마세요 하하~

그럼 이만~

도움이 됐으면 좋겠네요

+ -

관련 글 리스트
15454 [질문]많은 데이터를 쿼리를 이용해 저장하는데, CPU를 독점하네요? 이상헌 738 2002/02/11
15458     Re:[질문]많은 데이터를 쿼리를 이용해 저장하는데, CPU를 독점하네요? 만해 823 2002/02/13
15459         Re:Re:[질문]Thank you... You save my life.. 이상헌 785 2002/02/13
15461             Re:Re:Re:[질문]Thank you... You save my life.. 만해 935 2002/02/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.