다음을 통해 공유


HelloData에 대한 의견

HelloData 애플리케이션은 일반적인 ADO 애플리케이션의 기본 작업(데이터 가져오기, 검사, 편집 및 업데이트)을 단계별 실행합니다. 애플리케이션을 시작할 때 첫 번째 버튼 데이터를 가져오기를 클릭하십시오. GetData 서브루틴이 실행됩니다.

데이터 가져오기

GetData 올바른 연결 문자열을 모듈 수준 변수 m_sConnStr배치합니다. 연결 문자열에 대한 자세한 내용은 연결 문자열만들기를 참조하세요.

Visual Basic OnError 문을 사용하여 오류 처리기를 할당합니다. ADO의 오류 처리에 대한 자세한 내용은 오류 처리참조하세요. 새로운 Connection 객체가 생성되고, CursorLocation 속성이 adUseClient로 설정됩니다. 이는 HelloData 예제에서 연결이 끊긴 레코드 집합을 생성하기 때문입니다. 즉, 데이터 원본에서 데이터를 가져오는 즉시 데이터 원본과의 물리적 연결이 끊어지지만 Recordset 개체에서 로컬로 캐시된 데이터로 작업할 수 있습니다.

연결이 열린 후 변수(sSQL)에 SQL 문자열을 할당합니다. 그런 다음 m_oRecordset1Recordset 개체의 인스턴스를 만듭니다. 다음 코드 줄에서는 기존 연결을 통해 레코드셋을 열고, sSQL레코드셋의 원본으로 전달합니다. ADO에서 Recordset의 원본으로 전달한 SQL 문자열이 명령의 텍스트 정의임을 확인하도록, 마지막 인수로 adCmdTextRecordset Open 메서드에 전달하여 도움을 줍니다. 또한 이 줄은 에 연결된Recordset의 LockTypeCursorType을 설정합니다.

다음 코드 줄에서는 MarshalOptions 속성을 adMarshalModifiedOnly와 같게 설정합니다. MarshalOptions 중간 계층(또는 웹 서버)에 마샬링해야 하는 레코드를 나타냅니다. 마샬링에 대한 자세한 내용은 COM 설명서를 참조하세요. adMarshalModifiedOnly 클라이언트 쪽 커서(CursorLocation = adUseClient)와 함께 사용하면 클라이언트에서 수정된 레코드만 중간 계층에 다시 기록됩니다. MarshalOptionsadMarshalModifiedOnly로 설정하면 마샬링되는 행 수가 적어서 성능이 향상될 수 있습니다.

그런 다음 ActiveConnection 속성을 Nothing같게 설정하여 Recordset 연결을 끊습니다. 자세한 내용은 업데이트 및 데이터 유지"레코드 집합 연결 끊기 및 다시 연결" 섹션을 참조하세요.

데이터 원본에 대한 연결을 닫고 기존 Connection 개체를 삭제합니다. 이것은 소비된 리소스를 해제합니다.

마지막 단계는 Microsoft DataGrid 컨트롤에서 Recordset을(를) 양식의 DataSource로 설정하여 양식에서 Recordset 데이터를 쉽게 표시할 수 있도록 하는 것입니다.

두 번째 버튼을 클릭하고, 데이터를 검사. 그러면 ExamineData 서브루틴이 실행됩니다.

데이터 검사

ExamineData는 Recordset 개체의 다양한 메서드와 속성을 사용하여 Recordset데이터에 대한 정보를 표시합니다. RecordCount 속성을 사용하여 레코드 수를 보고합니다. Recordset을(를) 순회하고, 양식의 표시 텍스트 상자에 AbsolutePosition 속성의 값을 출력합니다. 또한 루프에 있는 동안 세 번째 레코드에 대한 Bookmark 속성 값은 나중에 사용할 수 vBookmark변형 변수에 배치됩니다.

루틴은 이전에 저장한 책갈피 변수를 사용하여 세 번째 레코드로 직접 돌아갑니다. 루틴은 RecordsetFields 컬렉션을 반복하고 컬렉션의 각 필드 대한 세부 정보를 표시하는 WalkFields 서브루틴을 호출합니다.

마지막으로 ExamineDataRecordsetFilter 속성을 사용하여 CategoryId가 2인 레코드만 필터링합니다. 이 필터를 적용한 결과는 폼의 표시 눈금에 즉시 표시됩니다.

ExamineData 서브루틴에 표시된 기능에 대한 자세한 내용은 데이터 검사참조하세요.

다음으로, 세 번째 버튼, 데이터 편집을 클릭하세요. 그러면 EditData 서브루틴이 실행됩니다.

데이터 편집

코드가 EditData 서브루틴에 들어가면 Recordset 여전히 CategoryId 2로 필터링되므로 필터 조건을 충족하는 항목만 표시됩니다. 먼저 Recordset을 반복하여 Recordset에 표시된 각 항목의 가격을 10% 증가시킵니다. Price 필드의 값은 해당 필드의 Value 속성을 유효한 새 금액과 동일하게 설정하여 변경됩니다.

기억하세요, Recordset는 데이터 원본과 분리되어 있습니다. EditData 변경된 내용은 로컬로 캐시된 데이터 복사본에만 적용됩니다. 자세한 내용은 데이터 편집 참조하세요.

데이터 업데이트 네 번째 단추를 클릭할 때까지 데이터 원본에서 변경 사항이 적용되지 않습니다. 그러면 UpdateData 서브루틴이 실행됩니다.

데이터 업데이트

UpdateData는 먼저 Recordset적용된 필터를 제거합니다. 이 코드는 양식의 Microsoft Bound DataGrid에서 DataSource 역할을 하는 m_oRecordset1을 제거하고 다시 설정하여, 필터링되지 않은 Recordset가 그리드에 나타나도록 합니다.

그런 다음 코드는 adMovePrevious 인수와 함께 Supports 메서드를 사용하여 Recordset 뒤로 이동할 수 있는지 확인합니다.

루틴은 MoveFirst 메서드를 사용하여 첫 번째 레코드로 이동하고 Field 개체의 OriginalValueValue 속성을 사용하여 필드의 원래 값과 현재 값을 표시합니다. 이러한 속성은 UnderlyingValue 속성(여기서는 사용되지 않음)과 함께 업데이트 및 데이터유지에 대해 설명합니다.

다음으로, 새 Connection 개체가 만들어지고 데이터 원본에 대한 연결을 다시 설정하기 위해 사용됩니다. 새 연결Recordset대한 ActiveConnection 설정하여 Recordset 데이터 원본에 다시 연결합니다. 서버에 업데이트를 보내기 위해 코드는 Recordset UpdateBatch를 호출합니다.

일괄 업데이트가 성공하면 모듈 수준 플래그 변수인 m_flgPriceUpdatedTrue로 설정됩니다. 나중에 데이터베이스에 적용된 모든 변경 내용을 정리하라는 메시지가 표시됩니다.

마지막으로 코드는 Recordset 첫 번째 레코드로 다시 이동하고 원래 값과 현재 값을 표시합니다. 값은 UpdateBatch를 호출한 후 동일합니다.

Recordset 연결이 끊어지는 동안 서버의 데이터가 변경될 때 수행할 작업을 포함하여 데이터를 업데이트하는 방법에 대한 자세한 내용은 업데이트 및 데이터유지를 참조하세요.

폼_언로드

Form_Unload 서브루틴은 여러 가지 이유로 중요합니다. 먼저 샘플 애플리케이션이므로 Form_Unload 애플리케이션이 종료되기 전에 데이터베이스에 적용된 변경 내용을 정리합니다. 둘째, 코드는 Execute 메서드를 사용하여 열려 있는 Connection 개체에서 명령을 직접 실행할 수 있는 방법을 보여줍니다. 마지막으로 데이터 원본에 대해 행 반환이 아닌 쿼리(UPDATE 쿼리)를 실행하는 예제를 보여 줍니다.