|
이상헌 님이 쓰신 글 :
:
: 안녕하세요. 만해님...
: 정말 감사합니다.
: 핵심을 정확히 짚어 주셨군요...
: 말씀하신 방법을 아마 저도 사용해야 할 것 같습니다.
:
: 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을 이용해서 저장 했답니다.
헐~
그런데 이거 제 소스 그냥 싹 올린건데
그냥 배껴 쓰지는 마세요 하하~
그럼 이만~
도움이 됐으면 좋겠네요
|