0

私はAccessの基本しか知らないので、複数の無関係なテーブルにアクセスするフォームを作成する方法を理解するのに苦労しています。

私の問題:

さまざまなカードコレクションを説明する表がいくつかあります。カード名などでリンクできたとしても、リンクしたいという方法はありません。これは、リストを分けておきたいからです。ただし、すべてにアクセスする1つのフォームを作成したいので、カードデータベースを更新するたびにさまざまなフォームをクリックする必要はありません。とにかく、私が含めるテーブルが多ければ多いほど、これは実用的ではなくなります。私はこれを調べてみましたが、解決策としてSQLのようなステートメントを提案しているように見えるサイトがいくつかありますが、率直に言って、これらは私の頭上を飛んでいます-どこに書くのかさえわかりません!

ですから、私が欲しいのは、編集したいテーブルを選択するためのコンボボックスメニューと、見たいカードを選択するための別のボックスがあり、そのカードの詳細を編集できるフォームです。1つのテーブルに対して1つのフォームを作成すればこれを行うことができますが、多くのテーブルに対してそれを行う方法がわかりません。また、新しいテーブルを追加する必要があるかどうかも確認したいと思います。たとえば、カードにはさまざまなシリーズが出てくるので、新しいテーブルが出てきたら、新しいテーブルを作成し、カードを追加します...

特にAccessでは、これはおそらくかなり厄介なことだと思いますが、誰かがこれを行う方法についていくつかのガイドラインを教えてくれれば、それは大いにありがたいです。(Access 2007を使用しています)

4

2 に答える 2

1

質問に答えるには:サブフォームを使用します。いくつかのサブフォームとコンボボックスを作成し、必要に応じてフォームを非表示/表示します。

それを行うためのより良い方法:

カードタイプごとに個別のテーブルを作成することは、非常に悪い習慣です。カードがMonsterName、MonsterPowerTypeなどの機能を共有している場合は、のような別のテーブルを作成し、カードテーブルにフィールドをcard_types追加する必要があります。card_type次に、ポケモンカードのみを取得する必要がある場合は、card_type_id = xxまたはcard_type_name = "Pokemon"条件を使用してクエリを作成します。このように必要なフォームは1つだけで、コンボボックスを使用してcard_type基準を変更できます。

于 2013-03-17T15:06:30.297 に答える
1

これはかなり古いですが、他の人に役立つかもしれません。私はあなたが尋ねたことを正確に行う方法を考えました

私は2016年にしかアクセスできないので、状況は別の場所にある可能性がありますが、それほど多くはありません。まず、各デッキのすべてのテーブルを作成します。最初の列に一意のID、2番目の列にデッキの名前があることを確認してください(このデッキの各エントリで同じになります)。これは私たちに役立ちます。3列目はカードの名前です。他の列にはカードの他の値が含まれますが、私の例では問題ではありません。このように名前を付けます

column   name
1       unique_ID
2       DeckName
3       CardName

次に、[作成]タブで[クエリデザイン]を選択します。次に、セクションビューの[ホーム]タブで、[SQL]を選択します。空白のセクションにこれを入力してください私は2つのテーブルを持っています:Table1とTable2

SELECT Table1.DeckName FROM Table1 UNION SELECT Table2.DeckName FROM Table2;

各テーブルを追加し、それぞれの間にUNIONを追加する必要があります。あなたは1つのセミコマだけで文を終えます;

[実行]をクリックすると、すべてのDeckNameが取得されます。クエリを保存して閉じます。

ここで、コンボボックスを使用して、さまざまなデッキから選択できるようにします。[作成]タブで[空白のフォーム]を選択します。「ホーム/ビュー」に移動し、 「デザイン」を選択します。[デザイン]タブで、コンボボックスを選択します。[キャンセル]をクリックしてウィザードをスキップできます。プロパティで[行ソース]をクリックて、作成したクエリを選択します。Cmb_Deckという名前を付けます

2番目のコンボボックスにCmb_Nameという名前を付けます。プロパティ" ColumnCount" put "2"は、このコンボボックスにカードの名前(テーブルのcolumn2)が表示されるためです。少しわかりやすくするために、プロパティ "Column Widths"put"で最初の列を非表示にます0 "; 1" "(最初の列は0インチ、2番目の列は1インチ)。

作成したテーブルのいずれかをフォームにドラッグし、ウィザードが表示されたら[キャンセル]をクリックします。TableResultという名前を付けます

レイアウトが作成されたので、コンボボックスCmb_Deckに従ってテーブルを変更する必要があります。Cmb_Deckプロパティで、イベントセクションに移動し、[更新後]を選択します。[ ... ]をクリックして、[コードビルダー]を選択します。このVisual Basicエディターウィンドウで、そこにあるものをすべて削除して、これを入力します。

Option Compare Database

Private Sub Cmb_Deck_AfterUpdate()
TableResult.SourceObject = "Table." & Cmb_Deck.Value
Cmb_Name.RowSource = "Table." & Cmb_Deck.Value
End Sub


Private Sub Cmb_Name_AfterUpdate()
        Me.TableResult.Form.Filter = "([" & Cmb_Deck.Value & "]." & "[CardName]=""" & Cmb_Name.text & """)"
        Me.TableResult.Form.FilterOn = True
End Sub

アクセスに戻り、コンボボックスCmb_Nameを選択し、プロパティevent / afterupdateに移動して、[[イベントプロシージャ]]を選択します。

フォームで、ホーム/ビューに移動し、フォームビューを選択します。最初に最初のコンボボックスでデッキを選択し、次に2番目のコンボボックスでカードの名前を選択します。下の表には、見たいカードだけが表示されています。

これがお役に立てば幸いです

-マシューパキン

于 2016-12-17T03:48:07.673 に答える