|
손효철 님이 쓰신 글 :
:
: 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();
}
//---------------------------------------------------------------------------
|