2016-09-06 3 views
1

私はDVDレンタルサービスのデータベースを作成しており(学校の割り当てとして)、映画のジャンルのデータが提供されています。さまざまな種類のジャンル(およびその他のデータ)は、既存のExcelテーブルからインポートされました。ジャンルは以下の通りである:アクセスのデータを分離する

Genres

これに伴う問題は、私は(私は1つのフィールドにアクション/アドベンチャーを持っていないことができ、すなわち、彼らは分離しなければならない)ジャンルが分離している必要があるということです。これは、そのジャンルに基づいてDVDを検索することができるようにするため、同じDVDが異なるジャンルで表示されることがあります。

私は「ジャンル」欄で関連する別のテーブルを作成しようとしたし、次のコードを使用してデータを分離している:

Left$([genre],InStr(1,[genre],"/")-1) 

これは、ジャンルの一つを見つけ、 'という名前のフィールドにそれを置くためのものですジャンル1 '。次は、データの他の半分を見つけると「genre2」という名前のフィールドにそれを置く:

Right$([genre],Len([genre])-InStr(1,[genre],"/")) 

これは、作業を行い、しかし、それは私に#Func! errorを与えます。

このエラーを防止する方法はありますか、DVDをいずれかのジャンルに基づいて(フォームで)検索できるようにする方法はありますか?

+1

"/"が付いていないすべてのジャンルでエラーが発生します。あなたはcalcのInstrを使う前にそれを罠に入れる必要があります – dbmitch

答えて

2

現時点ではスクリーンショットが表示されませんが、私が読むものは です。各ジャンルの組み合わせにフィールドを追加しないでください。つまり、最大2つのジャンルの組み合わせがある瞬間、映画に3つのジャンルが登場すれば、テーブルに3番目のフィールドを追加する必要があります。これは間違いなく良い方法です。

あなたは自分のジャンルとあなたのフィルムテーブル間をリンクテーブルを作成する必要があります。

ジャンルテーブルには、任意の組み合わせを含めることはできません。組み合わせは、あなたのリンクテーブルから来る必要があります:あなたのエラーのために

T_FILM (int [ID], txt [name] ...) 
T_GENRE(int [ID], txt [genre]) 
T_FILM_GENRE(int [fk_ID_FILM], int [fk_ID_GENRE]) 

を、それはおそらく、実際にInStr(1,[genre],"/")-1戻り-1ない「/」文字列内とLeft$ 2番目のパラメータが負の値を取らないカントがある場合

+2

同じものを投稿しようとしました - あなたの映画テーブルとあなたのジャンルテーブルの間の多対多の結合(ジャンルは1つ以上の映画、 1つ以上のジャンルを持つことができます)。その後、のようなクエリを使用することができます 'INNERは、データを返すためにT_Film_Genre.ID_Genre = T_Genre.ID' ON T_GenreのJOIN(T_Film.ID = T_Film_Genre.ID_Film ON T_Film INNER JOINをT_Film_Genre)から、T_Film.sName、T_Genre.Genre を選択します - しかしこれには重複した映画名が含まれます。 –

+1

上記の私のコメントを続行する - あなたは一緒に固執するVBAプロシージャを書くことができます: 'SELECT DISTINCT sName、ConcatenateText(" SELECT Genre FROM Query1 WHERE sName = '"&Query1.sName&"' "FROM Query1'(ConcatenateText being VBA UDF)。 –

関連する問題