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
[26495] Re: DB 아키텍처 자체가 다릅니다.
김백일.cedar [cedar] 1054 읽음    2003-07-31 16:37
손효철 님이 쓰신 글 :
:
: mdb연결시 vc에서는 아래와 같이 선언후 사용했는데 c빌더에서는 어떤식으로 연결을 해야 사용이 가능한지요?
: [아래는 vc에서 사용한 방법 입니다]
:
: BOOL CScreenPop::OnInitDialog()
: {
:      CDatabase    db;
:     BOOL        retval;
:
:     retval = db.Open(_T(DATABASE), FALSE, FALSE, _T("ODBC;"), FALSE);
:     CRecordset    rs(&db);
:         strRecordset.Empty();
:         strSQL.Format("SELECT * FROM [TextOverlay] WHERE MenuNum = %s ORDER BY Layer", ScreenNum);
:         retval = rs.Open(CRecordset::dynaset, strSQL, CRecordset::none);
:         while (!rs.IsEOF())
:         {
:             strRecordset.Empty();
:             rs.GetFieldValue("LineType", varLineType);
:             rs.GetFieldValue("ActionType", varActionType);
:             rs.GetFieldValue("Flags", varFlags);
:             rs.GetFieldValue("Attr", varAttr);
:             rs.GetFieldValue("Text", varText);
:             rs.GetFieldValue("Uval", varUval);
:             varAttr.TrimLeft();
:             varAttr.TrimRight();
:             varText.TrimLeft();
:             varText.TrimRight();
:             strRecordset.Format("%s  %s  %s  %s  \"%s\"  \"%s\"\r\n",  varLineType, varActionType, varFlags, varUval, varAttr, varText);
:             m_edit_Input.Insert(m_edit_Input.GetLength()+1, strRecordset);
:             rs.MoveNext();
:         }
:         rs.Close();

MFC와 VCL의 DB 아키텍처 자체가 상당히 다르므로 단순비교는 불가능합니다.
그리고 Access MDB는 ODBC보다는 ADO를 사용하는 것이 더 빠르고 간편합니다.
다음은 ADO를 사용하여 위와 비슷하게 만든 예제입니다.
원래는 디자인 타임에 컴포넌트를 폼에 놓고 오브젝트 인스펙터로 속성을 지정하면
코드양이 훨씬 적어지지만, 비교를 위해 동적으로 생성하는 방법을 올립니다.
(이 코드는 테스트는 안해봤으므로 틀릴 수 있습니다.)
대충 보아도 MFC보다 훨씬 간결하고 깔끔하게 보이죠?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TADOConnection *ADOConnection1 = new TADOConnection(Owner);
  ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password=0000;User ID=cedar;"
                                     "Data Source=C:\\database\\db1.mdb;Persist Security Info=True";
  ADOConnection1->Open();
 
  TADOQuery *ADOQuery1 = new TADOQuery(Owner);
  ADOQuery1->SQL = "SELECT * FROM [TextOverlay] WHERE MenuNum = " + ScreenNum + "ORDER BY Layer";
  // ScreenNum은 전역변수인가 보죠?
  ADOQuery1->Open();

  for (ADOQuery1->First(); !ADOQuery1->Eof; ADOQuery->Next())
    Memo1->Lines->Add(
      ADOQuery1->FieldByName("LineType")->AsString + "  " +
      ADOQuery1->FieldByName("ActionType")->AsString + "  " +
      ADOQuery1->FieldByName("Flags")->AsString + "  " +
      ADOQuery1->FieldByName("Attr")->AsString.Trim() + "  \"" +
      ADOQuery1->FieldByName("Text")->AsString.Trim() + "\"  \"" +
      ADOQuery1->FieldByName("Uval")->AsString + "\""
    );

  ADOQuery1->Close();
  ADOConnection->Close();
}
//---------------------------------------------------------------------------



+ -

관련 글 리스트
26492 mdb연결시 vc에서는 아래와 같이 선언후 사용했는데 c빌더에서는 어떤식으로 연결을 해야 사용이 가능한지 손효철 920 2003/07/31
26495     Re: DB 아키텍처 자체가 다릅니다. 김백일.cedar 1054 2003/07/31
26498         Re:Re: DB 아키텍처 자체가 다릅니다. 손효철 685 2003/07/31
26499             Re:Re:Re: DB 아키텍처 자체가 다릅니다. 김백일.cedar 1000 2003/07/31
26502                 Re:Re:Re:Re: DB 아키텍처 자체가 다릅니다. 손효철 779 2003/07/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.