ADO update관련 문의드립니다.

by SD2 posted Jan 26, 2014

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Window8 64bit
CUBRID Ver.
[cubrid_rel] CUBRID 9.2.0.0155
CUBRID TOOL Ver.
[도움말]-[버전정보] CUBRID 매니저 2014.01 빌드 0377  (64bit)
응용 환경(API)
  OLEDB ,ADO, VC++

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

안녕하세요.

cubrid를 사용하여 개발중에 문제가 발생하여 문의드립니다.



1. 사용개요

  windows 64bit에서 cubrid를 설치하여 개발중에 있으며,

  Visual c++에서  ADO를 통한 OLEDB를 사용하여 테이블에 업데이트를 수행하고 있으나 

맨처음 한번은 업데이트가 수행되고 반복적으로 수행하면 업데이트가 되지 않습니다.

에러가 발생하진 않으나, 업데이트가 성공적이면 15초 정도가 걸리며, 업데이트가 이루어지지 않을 경우 바로 성공을 리턴합니다.


( 만약 브로커를 재시작하면 맨처음 업데이가 이루어집니다.)

 매니저프로그램에서는 문제없이 동작하고 있습니다.

 평균적인 업데이트 시간 : 15초 정도 , 업데이트 행 32,000개

DBMS 설정 및 브로커 설정은 기본입니다.


update query는

update report_data_20140118 inner join  report_ip_20140118  on report_ip_20140118.client_key = report_data_20140118.client_key and report_ip_20140118.client_check = 1   set report_data_20140118.client_check = 1

로 다른 테이블을 조인하여 업데이트 하는 쿼리 입니다.


update report_data_20140118 set client_check = 1 은 반복적인 실행에는 이상없이 동작합니다.






테스트 소스코드는 아래와 같습니다.

소스 확인 부탁드리며, 설정이 잘못 된점이 있는지 검토 부탁드립니다.


 _RecordsetPtr pRstEmployee = NULL;
 _ConnectionPtr pConnection = NULL;

 // Define string variables.
 _bstr_t strCnn("Provider=CUBRIDProvider;Data Source=xx_dbname;Location=127.0.0.1;User ID=xx_id;Password=xx_pass;Port=33000;Fetch Size=100;");

 HRESULT  hr = CoInitialize( NULL ) ;
 if( hr != S_OK )
  return ;


 try {
  // open connection and record set
  pConnection.CreateInstance(__uuidof(Connection));
  pConnection->Open(strCnn, "", "", adConnectUnspecified);

 pRstEmployee.CreateInstance(__uuidof(Recordset));


   _variant_t vtCount;
  pConnection->Execute( "update query ........" ,
   &vtCount, -1    );

 

 


 }
 catch(_com_error &e) {
  // Display errors, if any. Pass a connection pointer accessed from the Connection.

  TRACE("rn ERROR") ;

  _bstr_t bstrSource(e.Source());
  _bstr_t bstrDescription(e.Description());

  // Print COM errors.
  TRACE("Errorn");
  TRACE("tCode = %08lxn", e.Error());
  TRACE("tCode meaning = %sn", e.ErrorMessage());
  TRACE("tSource = %sn", (LPCSTR) bstrSource);
  TRACE("tDescription = %sn", (LPCSTR) bstrDescription);

 }

 // Clean up objects before exit.
 if (pRstEmployee)
  if (pRstEmployee->State == adStateOpen)
   pRstEmployee->Close();
 if (pConnection)
  if (pConnection->State == adStateOpen)
   pConnection->Close();


 CoUninitialize() ;




 


Articles