다음을 통해 공유


HelloData에 대한 메모

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

GetData

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

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

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

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

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

데이터 원본에 대한 연결을 닫고 기존 Connection 개체를 삭제합니다. 그러면 사용된 리소스가 해제됩니다.

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

두 번째 단추인 데이터 검사를 클릭합니다. 그러면 ExamineData 서브루틴이 실행됩니다.

ExamineData

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

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

마지막으로ExamineData레코드 집합Filter 속성을 사용하여 CategoryId가 2인 레코드에 대해서만 차단합니다. 이 필터를 적용한 결과는 폼의 표시 그리드에 즉시 표시됩니다.

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

다음으로, 세 번째 단추인 데이터 편집을 클릭합니다. 그러면 EditData 서브루틴이 실행됩니다.

EditData

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

레코드 집합의 연결이 데이터 원본과 끊어졌습니다. EditData에서 변경된 내용은 로컬로 캐시된 데이터 복사본에만 적용됩니다. 자세한 내용은 데이터 편집을 참조하세요.

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

UpdateData

UpdateData는 먼저 레코드 집합에 적용된 필터를 제거합니다. 이 코드는 필터링되지 않은 레코드 집합이 표에 표시되도록 양식에서 Microsoft Bound DataGrid에 대한 DataSourcem_oRecordset1을 제거하고 다시 설정합니다.

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

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

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

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

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

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

Form_Unload

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