MFC: 문서 및 뷰를 이용하지 않는 데이터베이스 클래스 사용MFC: Using Database Classes Without Documents and Views

데이터베이스 응용 프로그램에서 프레임워크의 문서/뷰 아키텍처를 사용하지 않을 수 있습니다.Sometimes you might not want to use the framework's document/view architecture in your database applications. 이 토픽에서는 다음 내용을 설명합니다.This topic explains:

문서가 필요하지 않은 경우When You Do Not Need Documents

일부 응용 프로그램에는 문서의 고유한 개념이 있습니다.Some applications have a distinct concept of a document. 이러한 응용 프로그램은 일반적으로 파일 열기 명령을 통해 저장소에서 메모리로 파일의 전부 또는 대부분을 로드합니다.These applications typically load all or most of a file from storage into memory with a File Open command. 파일 저장 또는 저장 명령을 사용하여 업데이트된 파일을 저장소에 한 번에 다시 씁니다.They write the updated file back to storage all at once with a File Save or Save As command. 사용자가 보는 것은 데이터 파일입니다.What the user sees is a data file.

그러나 일부 응용 프로그램 범주는 문서가 필요하지 않습니다.Some categories of applications, however, do not require a document. 데이터베이스 응용 프로그램은 트랜잭션 측면에서 작동합니다.Database applications operate in terms of transactions. 응용 프로그램은 데이터베이스에서 레코드를 선택하고 사용자에게 한 번에 하나씩 제공합니다.The application selects records from a database and presents them to the user, often one at a time. 사용자가 보는 것은 일반적으로 메모리에 있는 유일한 레코드일 수 있는 단일 현재 레코드입니다.What the user sees is usually a single current record, which might be the only one in memory.

응용 프로그램에 데이터를 저장하기 위한 문서가 필요하지 않은 경우 프레임워크의 문서/뷰 아키텍처의 일부 또는 전부를 사용하지 않도록 할 수 있습니다.If your application does not require a document for storing data, you can dispense with some or all of the framework's document/view architecture. 얼마나 많은 분배는 선호하는 접근 방식에 따라 다릅니다.How much you dispense with depends on the approach you prefer. 다음을 수행할 수 있습니다.You might:

  • 최소한의 문서를 사용하여 데이터 원본에 대한 연결을 저장하지만 직렬화와 같은 일반 문서 기능을 사용하지 않습니다.Use a minimal document as a place to store a connection to your data source but dispense with normal document features such as serialization. 이 기능은 데이터의 여러 뷰를 원하고 모든 뷰를 동기화하고 한 번에 모두 업데이트하려는 경우에 유용합니다.This is useful when you want several views of the data and want to synchronize all the views, updating them all at once and so on.

  • 뷰를 사용하는 대신 직접 그리는 프레임 창을 사용합니다.Use a frame window, into which you draw directly, rather than using a view. 이 경우 문서를 생략하고 프레임 창 개체에 데이터 또는 데이터 연결을 저장합니다.In this case, you omit the document and store any data or data connections in the frame-window object.

문서 및 보기에 대한 응용 프로그램 마법사 옵션Application Wizard Options for Documents and Views

MFC 응용 프로그램 마법사에는 다음 표에 나열된 데이터베이스 지원 선택에몇 가지 옵션이 있습니다.The MFC Application Wizard has several options in Select database support, which are listed in the following table. MFC 응용 프로그램 마법사를 사용하여 응용 프로그램을 만드는 경우 이러한 모든 옵션은 문서 및 뷰가 있는 응용 프로그램을 생성합니다.If you use the MFC Application Wizard to create an application, all these options produce applications with documents and views. 일부 옵션은 불필요한 문서 기능을 생략하는 문서 및 보기를 제공합니다.Some options provide documents and views that omit unneeded document functionality. 자세한 내용은 데이터베이스 지원, MFC 응용 프로그램 마법사를참조하십시오.For more information, see Database Support, MFC Application Wizard.

옵션Option 보기View 문서Document
없음None CView에서 파생됩니다.Derived from CView. 데이터베이스 지원을 제공하지 않습니다.Provides no database support. 기본 옵션입니다.This is the default option.

응용 프로그램 유형, MFC 응용 프로그램 마법사 페이지에서 문서/보기 아키텍처 지원 옵션을 선택하면 파일 메뉴에서 직렬화 및 새로시작됨, 열기, 저장저장 명령을 비롯한 전체 문서 지원을 받을 수 있습니다.If you select the Document/view architecture support option on the Application Type, MFC Application Wizard page, you get full document support including serialization and New, Open, Save, and Save As commands on the File menu. 문서가 없는 응용 프로그램을참조하십시오.See Applications with No Document.
헤더 파일만Header files only CView에서 파생됩니다.Derived from CView. 응용 프로그램에 대한 기본 데이터베이스 지원 수준을 제공합니다.Provides the basic level of database support for your application.

Afxdb.h가 포함되어 있습니다.Includes Afxdb.h. 링크 라이브러리를 추가하지만 데이터베이스별 클래스를 만들지는 않습니다.Adds link libraries, but does not create any database-specific classes. 나중에 레코드 집합을 만들고 레코드를 검사하고 업데이트하는 데 사용할 수 있습니다.You can create recordsets later and use them to examine and update records.
파일 지원이 없는 데이터베이스 보기Database view without file support 에서 파생CRecordViewDerived from CRecordView 문서 지원을 제공하지만 직렬화 지원은 없습니다.Provides document support but no serialization support. 문서는 레코드 집합을 저장하고 여러 뷰를 조정할 수 있습니다. 직렬화 또는 , 열기, 저장Save As 명령을 지원하지 않습니다.Document can store recordset and coordinate multiple views; does not support serialization or the New, Open, Save, and Save As commands. 최소한의 문서로 응용 프로그램을참조하십시오.See Applications with Minimal Documents. 데이터베이스 뷰를 포함하는 경우 데이터의 원본을 지정해야 합니다.If you include a database view, you must specify the source of the data.

데이터베이스 헤더 파일, 링크 라이브러리, 레코드 보기 및 레코드 집합을 포함합니다.Includes database header files, link libraries, a record view, and a recordset. (응용 프로그램 유형, MFC 응용 프로그램 마법사 페이지에서 선택한 문서/보기 아키텍처 지원 옵션이 있는 응용 프로그램에만 사용할 수 있습니다.)(Available only for applications with the Document/view architecture support option selected on the Application Type, MFC Application Wizard page.)
파일 지원이 있는 데이터베이스 보기Database view with file support 에서 파생CRecordViewDerived from CRecordView 직렬화 및 문서 관련 파일 메뉴 명령을 포함하여 전체 문서 지원을 제공합니다.Provides full document support, including serialization and document-related File menu commands. 데이터베이스 응용 프로그램은 일반적으로 파일별로 가기보다는 레코드단위로 작동하므로 직렬화가 필요하지 않습니다.Database applications typically operate on a per-record basis rather than on a per-file basis and so do not need serialization. 그러나 직렬화에 특히 사용할 수 있습니다.However, you might have a special use for serialization. 최소한의 문서로 응용 프로그램을참조하십시오.See Applications with Minimal Documents. 데이터베이스 뷰를 포함하는 경우 데이터의 원본을 지정해야 합니다.If you include a database view, you must specify the source of the data.

데이터베이스 헤더 파일, 링크 라이브러리, 레코드 보기 및 레코드 집합을 포함합니다.Includes database header files, link libraries, a record view, and a recordset. (응용 프로그램 유형, MFC 응용 프로그램 마법사 페이지에서 선택한 문서/보기 아키텍처 지원 옵션이 있는 응용 프로그램에만 사용할 수 있습니다.)(Available only for applications with the Document/view architecture support option selected on the Application Type, MFC Application Wizard page.)

직렬화및 직렬화에 대한 대체 용도에 대한 대안에 대한 설명은 직렬화: 직렬화 와 데이터베이스 입력/출력을 참조하십시오.For a discussion of alternatives to serialization and alternative uses for serialization, see Serialization: Serialization vs. Database Input/Output.

최소한의 문서가 있는 응용 프로그램Applications with Minimal Documents

MFC 응용 프로그램 마법사에는 양식 기반 데이터 액세스 응용 프로그램을 지원하는 두 가지 옵션이 있습니다.The MFC Application Wizard has two options that support form-based data access applications. 각 옵션은 CRecordView-파생 뷰 클래스와 문서를 만듭니다.Each option creates a CRecordView-derived view class and a document. 문서에서 나가는 내용이 다릅니다.They differ in what they leave out of the document.

파일 지원이 없는 문서Document Without File Support

문서 직렬화가 필요하지 않은 경우 파일 지원 없이 응용 프로그램 마법사 데이터베이스 옵션 데이터베이스 보기를 선택합니다.Select the application wizard database option Database view without file support if you do not need document serialization. 이 문서는 다음과 같은 유용한 용도로 사용됩니다.The document serves the following useful purposes:

  • CRecordset 개체를 저장하기에 편리한 장소입니다.It is a convenient place to store a CRecordset object.

    이 사용은 일반적인 문서 개념과 유사합니다: 문서는 데이터를 저장합니다(또는 이 경우 레코드 집합) 뷰는 문서의 보기입니다.This usage parallels ordinary document concepts: the document stores the data (or, in this case, a set of records) and the view is a view of the document.

  • 응용 프로그램에서 여러 보기(예: 여러 레코드 보기)를 제공하는 경우 문서는 뷰 조정을 지원합니다.If your application presents multiple views (such as multiple record views), a document supports coordinating the views.

    여러 뷰에 동일한 데이터가 표시되는 경우 CDocument::UpdateAllViews 멤버 함수를 사용하여 뷰가 데이터를 변경할 때 모든 뷰에 대한 업데이트를 조정할 수 있습니다.If multiple views show the same data, you can use the CDocument::UpdateAllViews member function to coordinate updates to all views when any view changes the data.

일반적으로 간단한 양식 기반 응용 프로그램에이 옵션을 사용 합니다.You usually use this option for simple form-based applications. 응용 프로그램 마법사는 이러한 응용 프로그램에 대한 편리한 구조를 자동으로 지원합니다.The application wizard supports a convenient structure for such applications automatically.

파일 지원이 있는 문서Document with File Support

문서 관련 파일 메뉴 명령 및 문서 직렬화에 대한 대체 용도가 있는 경우 파일 지원을 사용하는 응용 프로그램 마법사 데이터베이스 보기를 선택합니다.Select the application wizard database option Database view with file support when you have an alternative use for the document-related File menu commands and document serialization. 프로그램의 데이터 액세스 부분의 경우 파일 지원 없이문서에 설명된 것과 동일한 방식으로 문서를 사용할 수 있습니다.For the data-access portion of your program, you can use the document in the same way as described in Document Without File Support. 예를 들어 문서의 직렬화 기능을 사용하여 사용자의 기본 설정 또는 기타 유용한 정보를 저장하는 직렬화된 사용자 프로필 문서를 읽고 쓸 수 있습니다.You can use the document's serialization capability, for example, to read and write a serialized user profile document that stores the user's preferences or other useful information. 자세한 내용은 직렬화: 직렬화 와 데이터베이스 입력/출력을 참조하십시오.For more ideas, see Serialization: Serialization vs. Database Input/Output.

응용 프로그램 마법사는 이 옵션을 지원하지만 문서를 직렬화하는 코드를 작성해야 합니다.The application wizard supports this option, but you must write the code that serializes the document. 직렬화된 정보를 문서 데이터 멤버에 저장합니다.Store the serialized information in document data members.

문서가 없는 응용 프로그램Applications with No Document

문서 나 뷰를 사용하지 않는 응용 프로그램을 작성할 수도 있습니다.You might sometimes want to write an application that does not use documents or views. 문서가 없으면 프레임 창 클래스 또는 CRecordset 응용 프로그램 클래스에 데이터(예: 개체)를 저장할 수 있습니다.Without documents, you store your data (such as a CRecordset object) in your frame-window class or your application class. 추가 요구 사항은 응용 프로그램이 사용자 인터페이스를 제공하는지 여부에 따라 달라집니다.Any additional requirements depend on whether the application presents a user interface.

사용자 인터페이스를 갖춘 데이터베이스 지원Database Support with a User Interface

콘솔 명령줄 인터페이스 를 제외한 사용자 인터페이스가 있는 경우 응용 프로그램은 뷰가 아닌 프레임 창의 클라이언트 영역으로 직접 그립니다.If you have a user interface (other than, for example, a console command-line interface), your application draws directly into the frame window's client area rather than into a view. 이러한 응용 프로그램은 CRecordViewCFormView사용하거나 CDialog 기본 사용자 인터페이스에 사용하지 CDialog 않지만 일반적으로 일반 대화 상자에 사용됩니다.Such an application does not use CRecordView, CFormView, or CDialog for its main user interface, but it normally use CDialog for ordinary dialogs.

문서 없이 응용 프로그램 작성Writing Applications Without Documents

응용 프로그램 마법사는 문서 없이 응용 프로그램 만들기를 CWinApp지원하지 않으므로 사용자 고유의 파생 클래스를 작성하고 필요한 경우 a CFrameWnd 또는 CMDIFrameWnd 클래스를 만들어야 합니다.Because the application wizard does not support creating applications without documents, you must write your own CWinApp-derived class and, if needed, also create a CFrameWnd or CMDIFrameWnd class. 응용 CWinApp::InitInstance 프로그램 개체를 다음과 같이 재정의하고 선언합니다.Override CWinApp::InitInstance and declare an application object as:

CYourNameApp theApp;

프레임워크는 여전히 메시지 맵 메커니즘 및 기타 여러 기능을 제공합니다.The framework still supplies the message-map mechanism and many other features.

데이터베이스 지원 사용자 인터페이스와 별개Database Support Separate from the User Interface

일부 응용 프로그램에는 사용자 인터페이스가 필요하거나 최소한의 인터페이스만 필요합니다.Some applications need no user interface or only a minimal one. 예를 들어 다음과 같은 것을 작성한다고 가정합니다.For example, suppose you are writing:

  • 다른 응용 프로그램(클라이언트)이 응용 프로그램과 데이터 원본 간에 데이터를 특수 처리하기 위해 호출하는 중간 데이터 액세스 개체입니다.An intermediate data-access object that other applications (clients) call for special processing of data between the application and the data source.

  • 한 데이터베이스 형식에서 다른 데이터베이스 형식으로 데이터를 이동하거나 계산을 수행하고 일괄 처리를 수행하는 응용 프로그램과 같이 사용자 개입 없이 데이터를 처리하는 응용 프로그램입니다.An application that processes data without user intervention, such as an application that moves data from one database format to another or one that does calculations and performs batch updates.

개체를 소유하는 CRecordset 문서가 없기 때문에 -derive된 응용 프로그램 CWinApp클래스에 포함된 데이터 멤버로 저장하려고 할 수 있습니다.Because no document owns the CRecordset object, you probably want to store it as an embedded data member in your CWinApp-derived application class. 대안은 다음과 같습니다.Alternatives include:

  • 영구 CRecordset 객체를 전혀 유지하지 않습니다.Not keeping a permanent CRecordset object at all. 레코드 집합 클래스 생성자에게 NULL을 전달할 수 있습니다.You can pass NULL to your recordset class constructors. 이 경우 프레임워크는 레코드 CDatabase 집합의 GetDefaultConnect 멤버 함수의 정보를 사용하여 임시 개체를 만듭니다.In that case, the framework creates a temporary CDatabase object using the information in the recordset's GetDefaultConnect member function. 이것은 가장 가능성이 높은 대체 방법입니다.This is the most likely alternative approach.

  • 개체를 CRecordset 전역 변수로 만듭니다.Making the CRecordset object a global variable. 이 변수는 재정의에서 동적으로 만드는 레코드 집합 CWinApp::InitInstance 개체에 대한 포인터여야 합니다.This variable should be a pointer to a recordset object that you create dynamically in your CWinApp::InitInstance override. 이렇게 하면 프레임워크가 초기화되기 전에 개체를 생성하지 않습니다.This avoids attempting to construct the object before the framework is initialized.

  • 문서 또는 뷰의 컨텍스트 내에서와 마찬가지로 레코드 집합 개체를 사용 합니다.Using recordset objects as you would within the context of a document or a view. 응용 프로그램 또는 프레임 창 개체의 멤버 함수에 레코드 집합을 만듭니다.Create recordsets in the member functions of your application or frame-window objects.

참고 항목See also

MFC 데이터베이스 클래스MFC Database Classes