2009-07-21 4 views
4

앞으로 출시 될 Access2010에 Access 데이터 엔진 테이블에 트리거와 유사한 기능을 추가하는 Data Macros 기능이 있다는 소식을 포도 피에서 들었습니다. 아무도 이것에 대한 자세한 내용을 알고 있습니까? 예를 들어, 코드 (ACEDAO, SQL DDL 등)로 생성 할 수 있습니까? 데이터가 Access 사용자 인터페이스 외부에서 수정 된 경우 데이터 매크로가 실행됩니까? ODBC, OLE DB 등을 통해?Access2010의 데이터 매크로가 트리거됩니까?

+0

답을 알고있는 사람은 누구나 NDA에 속해 있으며이를 확인할 수 없습니다. –

+0

데이비드 (David), 일부 지역에서는 NDA가 완화되고 있습니다. –

답변

9

좋아, 조금 더 많은 정보.

데이터가 Access 사용자 인터페이스 외부에서 수정 된 경우 데이터 매크로가 실행됩니까? ODBC, OLE DB 등을 통해?

예.

이러한 실제 트리거는 데이터 엔진 수준에 있습니다. 따라서, ado, dao를 사용하거나 ms-access의 테이블 뷰에서 테이블을 편집하는 것은 트리거가 실행됨을 의미합니다. 이러한 트리거에는 컴퓨터에 ms 액세스가 설치되어 있지 않은 경우도 포함됩니다.

물론 JET를 설치해야합니다 (이 기사의 나머지 부분에서는 ACE라는 용어를 사용합니다). 액세스 팀에서만 JET의 소유권을 얻은 것은 2007 년 액세스 였음을 기억하십시오. 그들은 이제 그들의 요구에 맞게이 엔진을 향상시킬 수 있습니다. 우리는 2007 년에 ACE에 대한 몇 가지 변화를보기 시작했으며 2010 년에는 더 많은 변화가있을 것입니다. 이러한 기능 중 일부는 여전히 NDA입니다 ...하지만 여기서 할 수있는 한 많이 유출 할 것입니다.

예를 들어 코드 (ACEDAO, SQL DDL 등)로 생성 할 수 있습니까?

코드에서는 perahps이지만 SQL ddl에서는 그렇지 않습니다. 트리거는 SQL 명령이 아닙니다. 마켓 플레이스에있는 오라클, SQL 서버 또는 MOST 시스템의 경우 모두 어쨌든 트리거에 대한 OWN 사용자 정의 언어를 사용하는 경향이 있습니다.

새 ACE에서는 데이터 매크로라고하는 내용을 작성합니다. ms 액세스에서 매크로 편집기를 사용합니다. 이것은 구식 액세스 매크로이지만 편집자는 완전히 다시 처리되었습니다. 새 매크로에는 서브 루틴, 루핑, else 블록 및 레코드 집합 유형이 있습니다. 2007 매크로에서 임시 변수를 만들 수 있다는 사실을 기억하십시오. 2010 년에는 지역 변수와 새로운 기능을 포함하도록 확장되었습니다.

기존 매크로 명령의 구문은 이전 버전과 동일합니다. 그러나 우리는 위의 멋진 명령과 함께 새로운 매끄러운 IDE를 추가했습니다. 이제 우리는 두 가지 유형의 매크로를 갖게됩니다. UI 매크로 (이전처럼 일반) 및 이제는 새로운 소위 데이터 매크로. 테이블 레벨 매크로가 화면에 오류 메시지를 표시 할 수 없게됩니다. 따라서 어떤 오류가 기록되면 테이블에 기록됩니다. 또한 사용자 정의 오류를 해당 테이블에 작성할 수있는 몇 가지 새로운 로깅 명령이 있습니다. 화려하고 심플한 디자인이 여기에 있습니다. 다음과 같이 그 오류 로그 테이블 모습 :

거대한 IDE의, 거대한 프레임 작품과 테이블에 간단한 행을 갱신 requited 코드의 끔찍한 거대한 라이브러리의 세계에서 alt text http://www.kallal.ca/test/merrors.png

, 나는 그 데이터 매크로 말할 수있는 가장 상쾌한 기능입니다. 그들은 원래 dbaseII가 어떻게 작동하는지 느낀다. 그들은 매우 단순하지만 치명적인 힘은 테이블 레벨에서 뛰기 때문에 꽉 찼습니다.

예를 들어 인벤토리를 유지 관리하는 데이터 매크로가 테이블을 합산합니다. 이 예에서는 마스터 재고 레코드가 있다고 가정합니다. 그런 다음 주문 세부 정보 표가 있습니다.사용자가 주문 테이블에서 값을 편집하는 경우 마스터 테이블에서 인벤토리 수준을 자동으로 업데이트해야합니다.

그래서 우리는이 : 내가 두 테이블

tblFruits: main data fruit inventory table 
id   (autonumber) 
Fruit text 
OnHand (number value of fruit in inventory) 

tblFruitsOrder 
id  (autonumber) 
Fruit_id (FK to tblFruts.ID) 
QtyOrder (number of fruit to order) 

이 간단한 테스트 그래서

이다가, 우리가 +가 tblFruits했을 때의 재고 수준을 유지 업데이트됩니다 tblFruitsOrder에서 트리거를해야 할 것 QtyOrder 필드는 으로 편집되거나 수정됩니다. 여기

매크로 같은 모습입니다 :

alt text http://www.kallal.ca/test/macro1.png

참고이 방법은 매우 간단 위입니다. IDE에서 코드 섹션을 클릭하면 이전 스타일 매크로 유형 편집이 가능하며 명령에 대한 값을 입력 할 수 있습니다 (2010 년 이전과 유사하지만 매개 변수 및 편집은에서 발생 함). 이전 버전에서는 화면 하단에 표시되는 패널이 아닌 코드).

루프를 수행하고 서브 루틴을 호출 할 수있는 또 다른 스크린 샷입니다. 이 테이블 레벨 매크로하지 않기 때문에

alt text http://www.kallal.ca/test/macro22.png

위에서 우리는 msgboxs 등을 사용할 수 있습니다. 따라서 일반 매크로가 아닌 테이블 수준 매크로를 작성할 때 사용할 수있는 명령은 자동으로 제한됩니다. 두 가지 유형의 매크로를 구별하기 위해 채택한 용어는 UI 매크로와 데이터 매크로입니다.

위의 내용은 내가 음모에 대해 말할 수있는 전부입니다. 그러나이 매크로에 관해서는 아직 NDA를 사용하고 있기 때문에 아직 공개적으로 이야기 할 수없는 매크로에 대해서는 정말 이상한 기능이 거의 없습니다. 그러나 여기에 더 멋진 놀라움이 있습니다.

alt text http://www.kallal.ca/test/macro3.png

+0

와우, Albert에게 감사드립니다. 평소처럼 훌륭한 세부 사항. 흥미로운 물건! :) – onedaywhen

+0

아마도 테스트 할 것 : 당신은 테이블 수준이라고 말하지만 언제 검사 할 것입니까? 행 수준에서 SQL 문 수준이나 트랜잭션 수준입니까? Jet 4.0 CHECK 제약 조건에 대한 불만 중 하나는 테이블 수준이지만 행 수준에서 확인됩니다. 테이블에 정확히 5 개의 행만있을 수 있는지를 테스트하는 다소 위선적 인 CHECK를 생각해보십시오. 분명히 테이블이 비어있는 경우에는 확인되지 않습니다. 그런 다음 INSERT INTO..SELECT TOP 5 스타일 SQL 문을 실행하여 한 번에 정확히 5 개의 행을 모두 삽입하십시오. – onedaywhen

+0

... 첫 번째 행이 생성 될 때 CHECK가 실행되지만, 분명히이 시점에는 분명히 없습니다. 테이블에 5 개의 행이 있으므로 CHECK가 무시되고 INSERT가 실패합니다. 이것은 CHECK 제약 조건이 적어도 SQL 문 수준에서 이상적으로는 트랜잭션 수준에서 테스트되어야 할 때 행 수준에서 테스트된다는 것을 보여줍니다 (Oracle에서 볼 수 있듯이 SQL-92의 DEFERRABLE INITIALLY DEFERRED에 대해 생각하고 있습니다). 그대로,이 버그, IMO를 고려하기에 충분한 유틸리티 손실이 있습니다.대량 INSERT/UPDATE/DELETE의 각 행에 대해 마찬가지로 실행 된 데이터 매크로는 고통이 될 수 있습니다. – onedaywhen

1
이 새로운 기능에 대한

더 많은 정보는 MS 액세스 개발 팀의 블로그에 posted today이었고, 그것은 확실히에 대한 자세한 정보를 제공합니다 : 여기

테이블의 종류의 스크린 샷 트리거입니다 우리는이 위의 의견에서 제기 된 중요한 질문.

+0

나를 이길. 좋은 업데이트 데이빗. 세스 –

관련 문제