2009-04-13 3 views
4

Access 데이터베이스가 있습니다. 애완 동물 가게를 위조 해 봅시다.Microsoft Access 양식이 하나의 쿼리에는 레코드를 만들고 다른 쿼리에는 레코드를 만들지 않는 이유는 무엇입니까?

동물을위한 테이블이 있습니다.

Animals (animal_id, birth_date, price) 

그리고 우리가 팔고있는 동물의 종류에 맞는 특정 테이블.

물고기는 흥미롭지 않으므로 특별한 필드가 없습니다. Fish 테이블이 존재하기 때문에 Animals 테이블의 어떤 레코드가 물고기인지 알 수 있습니다.

이제 애완 동물 상점에 동물을 추가하는 일반적인 목적의 양식이 있습니다. 양식을 받기 전에 먼저 어떤 종류의 동물을 추가하는지 말하십시오. 이를 기반으로 양식은 필드를 표시/숨기고 레코드 소스를 변경하며 필드를 적절한 데이터 열에 바인딩합니다. 양식은 DogInfo, CatInfo 및 FishInfo 쿼리에서 데이터를 가져옵니다.

이제 개나 고양이를 입력하면 모든 것이 정상입니다. 레코드는 동물과 개 또는 고양이 모두에 추가됩니다.

그러나 물고기를 입력하면 동물, 물고기는 없습니다.

이 문제의 원인은 무엇일까요? 그것은 어쨌든 Fish 테이블의 다른 기둥이 없기 때문에 발생합니까?

(선택 쿼리를 사용하여 테이블을 업데이트하는 것이 전혀 이해가되지 않는다는 점을 제외하고는 처음부터 액세스를 기대하지 않았지만 액세스 모토는 " 잘못된 일을하기 쉽고 옳은 일을하기에는 어색한 것입니다. "데이터베이스는 상대적으로 간단하고 드물게 사용되지만, 작업하기 전에는 데이터베이스를 100 배 이상 향상 시켜서 걱정하지 않습니다. 이 문제에 관해서는 내가 할 수있는 한.)

+0

이 테이블 설정에는 많은 문제가 있습니다. 신중하게 고안되지 않은 예일뿐입니다. – Fionnuala

+0

기본 설계는 다음과 같습니다. http://stackoverflow.com/questions/554522/something-like-inheritance-in-database-design/554681#554681 –

+0

Google에 대한 'access table'검색에 많은 문제가 있습니다. 구조'. – zuk1

답변

7

"Fish 테이블의 다른 열이 부족하여 어떻게 든 발생합니까?"

예 - 당신이 자식 레코드 (개, 고양이)에 데이터를 입력 할 때이 생성되지 않는 물고기 레코드에 대한 데이터 항목이 없기 때문에 액세스가 자동으로 부모 ID (animal_id)

를 입력합니다. 코드에서 그렇게해야합니다. 확실하지 양식 및 데이터 소스 설정되어 있지만 양식 이벤트 중 하나에 같은 것을 할 것입니다 방법 : 당신이 Fish.[animal_id] 별칭을 부여해야

Fish![animal_id] = Animal![animal_id] 

을 편집 FishInfo 쿼리에서

- 당신이 할 수있는

Me.Fish_animal_id = Me.animal_id 
+0

이 말이 맞지만 코드를 실행할 수 없습니다. 이것은 "한정자가 컬렉션이되어야합니다."와 같은 것을 알려줍니다. –

+0

음, 사용하는 레코드 세트/필드 이름에 따라 다릅니다. 기본적으로 Fish 레코드의 animal_id를 주 animal_id로 설정해야합니다. –

+0

해당 필드 이름을 조정했지만 Access에서는 여전히 그것을 좋아하지 않습니다. –

0

Dogs/Cats/Fish 테이블에 대해 별도의 ID를 갖고 있지 않습니까? 유일한 차이점은 열의 수를 가정 할 때 갑자기 그것을 수정하면 궁금 할 것입니다.

+0

나는 그렇지 않다. 그게 도움이 될까요? –

+0

업계 표준은 특정 행을 식별 할 수있는 별도의 ID 열과 가능성이있는 자동 번호 (세 개의 모든 테이블에 대해 "ID"라고도 함)를 보유하는 것입니다. 이 행이 생성되도록 트리거 할 수 있습니다. – BIBD

+0

ID 열을 추가하려고했습니다. 생성을 트리거하는 데 아무런 운이 없습니다. –

2

하 - '가 t이 같은 이름을 가진 두 개의 필드를 가지고있는 Form_BeforeUpdate 이벤트에 다음 Fish_animal_id

을 호출이를 넣어 서로 다른 테이블에서 관계를 구성하려고 생각 했습니까? 위의 디자인을 감안할 때, 특정 동물 테이블에 식별 열을 추가하고이를 기본 키로 설정하는 것으로 시작합니다. 예 :: 관계에서

Dogs(DOG_ID, animal_id, bark_volume) 
Cats(CAT_ID, animal_id, collar_size, shedding_rate) 

등은 다음 Animals.ANIMAL_ID에서 Dogs.animal_id에 일대 다 (? 일대일)의 관계를 정의하는 것, 볼 수 있습니다. 그런 다음 해당 테이블에서 레코드를 선택하기 위해 양식의 콤보/목록 상자 컨트롤에 동물 테이블을 연결할 수 있습니다. 컨트롤을 올바르게 구성하면 해당 컨트롤에서 새 레코드를 만들 수도 있습니다 (또는 하위 폼을 사용할 수도 있음).

+0

예, animal_id에 대한 일대 다 관계와 참조 무결성을 수행하는 방법은이 작업을 수행하는 방법입니다. – Lunatik

+0

관계를 추가해도 아무 효과가 없습니다. ID 열을 추가하지도 않았습니다. –

0

다양한 디자인 사이에 관계가 잘못 설정 되었습니까? 참조 무결성을 적용하기 위해 테이블을 설정 했습니까?

관련 문제