|
TADODataSet *rs 객체가 생성되지 않았으므로 rs의 멤버를 액세스하려고 하면 당연히 에러가 납니다.
일부러 코딩으로 다 해보려고 하신 건지는 모르겠는데, 보통은 ADOConnection과 ADODataSet 컴포넌트는 폼에 놓고
쓰는데요.
굳이 동적으로 생성해서 쓰고 싶다면, TADODataSet *rs = new TADODataSet(NULL); 해서 객체를 생성하신 후,
rs->Connection = con; 해서 ADOConnection 객체와 연결을 하고요.
(이 과정은 보통 이렇게 코딩으로 하지 않고 폼에서 합니다. 특별한 이유가 없다면 굳이 코딩으로 할 필요가 없는데...)
셀렉트 쿼리를 날리려면 TADODataSet::CommandText에 쿼리문을 넣고 Open() 하면 됩니다.
그럼...
헤이즐넛 님이 쓰신 글 :
: C++ 빌더로 access db를 다루는 프로그램을 짜 보려고 하는데,
: 처음이다 보니 Recordset을 가져 오는데서부터 에러가 나는군요.
:
: 아래 소스에서 레코드 셋을 rs에 받아오려는 구문에서 에러가 납니다.
:
: 조언을 부탁드립니다.
:
: ==================================================
:
: {
: int RecCount;
: String sql;
:
: TADOConnection *con;
: TADODataSet *rs;
:
: con = new TADOConnection(this);
:
: try {
: // DB 지정
: con->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite|Share Deny None;Data Source=db1.mdb;Persist Security Info=False";
: con->LoginPrompt = false;
: con->Open();
:
: // 데이터 10개 저장 : test 테이블의 rnd 필드에 정수 저장
: for (int i=0;i<10;i++) {
: con->Execute(WideString("insert into test(rnd) values ("+IntToStr(i)+")"),RecCount, TExecuteOptions()<<eoExecuteNoRecords);
: }
:
: // 레코드셋 가져오기
: // 바로 다음줄에서 에러!!
: rs->Recordset = con->Execute(WideString("select * from test"),cmdText,TExecuteOptions());
:
: ShowMessage(IntToStr(rs->RecordCount)+" 데이타 갯수");
: rs->Close();
:
: if (con->State==(TObjectStates()<<stOpen)) {
: ShowMessage("Close connection");
: con->Close();
: }
: }
: __finally {
: delete con;
: }
: }
|