• 締切済み

アクセス 数値型にするとフォームの入力ができない

お世話になります。色々調べたり、実験してみたのですが、分からない点があります。 簡単でいいので、可能性のある原因を教えてください。 アクセス2003です。 ■パターン1  フォームC の入力ができる テーブルA(主キーがオートナンバー型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る ■パターン2  フォームC の入力ができない テーブルA(主キーが数値型)、その他4つのテーブル(これら5つのテーブルは、参照整合性リレーションで結ぶ) →それらを元にクエリBを作る→クエリBを元にフォームC を作る 簡単にいうと、テーブルのデータ型によって、入力可否が変わるのです。 なぜ、パターン2は、入力できないのか分かりません。 よろしくお願いします。

みんなの回答

noname#140971
noname#140971
回答No.3

「主キー制約」は、実は、正しい表現じゃないです。 ここでは、「主キーは重複出来ないという制限」と表現すべきでした。 そういうことで誤解を与えたようです。 お詫びして表現を訂正させていただきます。

himigon17
質問者

お礼

ありがとうございました。 そういう意味だったのですね。分かりました。

noname#140971
noname#140971
回答No.2

主キーとは、ユニークキー(一意)ということです。 オートナンバー型の場合は、レコードが発生すれば自動的にシーケンシャルにユニークな値が発生します。 ですから、このオートナンバー型はプログラミングの手間隙を省く上では便利。 しかし、一旦、テーブルが破損した場合の修復ではやっかいな問題の種にもなります。 採番テーブル等を利用してオートナンバー型の利用を避ける理由です。 なお、簡易的に、DMAX関数で最大値を取得し+1するという手法もあります。 小規模データベースでDMAX関数の速度とかネットワークトラフィックの混雑が問題にならなければOK。 Access は本来スタンドアローンですから、通常は、DMAX関数での管理で良いと思います。 パターン2は、そういうことでテーブルAの主キーを管理していなきゃ0が発生していたということ。 一回は入力できるでしょうが、2度目からは主キー制約に引っかかって入力不可。 ところで、パターン1でも主キー制約に引っかかっているとのこと。 ならば、先ずは、2つの簡単なテーブルで主キー管理の仕組みを確立されたがいいです。 <A> ID___Name 1____あああ <B> ID___A_ID___Name 1________1___kkk 2________1___いいい ものすごく簡単なテーブルを用意。 これで、フォームウィザードでフォーム<A>、フォーム<B サブフォーム>を生成。 当然に、主キーを管理しなきゃならんです。 Form:A Private Sub Form_BeforeInsert(Cancel As Integer)   Me.ID = Nz(DMax("ID", "A")) + 1 End Sub Form:B Private Sub Form_BeforeInsert(Cancel As Integer)   Me.ID = Nz(DMax("ID", "B")) + 1 End Sub 注意を要するのは、Nz関数を使うこと。 DMax関数は、レコードがゼロであればNull を返します。 [イミディエイト] ? Null + 1 Null この場合、イミディエイトウィンドウでテストすれば判りますが主キーはカウントアップされないです。 ※ここに示している方法は、最善とは限りません。単なる初手のやり方です。

himigon17
質問者

お礼

ご回答ありがとうございます。 上のほうはなんとなく理解できたのですが、 下の部分が難しくてよく理解できません。 たくさん書いていただいたのに、申し訳ないです。 主キー制約って何ですか?

noname#140971
noname#140971
回答No.1

テーブルAの主キーを管理していますか?

himigon17
質問者

お礼

早速ありがとうございます。 主キーを管理しているというのは、どういう意味ですか? あと、質問内容が少し違ってました!申し訳ありません。 ↓ パターン1も入力できませんでした。 入力できるのは、パターン1(オートナンバー型)で、主キーを設定しない場合のみでした。

関連するQ&A

  • アクセスのフォーム、コードを入れると名前が出るのはなぜ?

    アクセス初心者ですが、フォームを作成時、疑問に思って考えるほど混乱してしまいました。 例えば、 Aテーブル:日付、店コード、売上のフィールドを作る。(主キーなし) Bテーブル:店コード、店名(主キーは店コード) リレーションは店コード(B)→店コード(A)に結び、すべての整合性にチェック それぞれのテーブルに、数件のデータを入力 この状態で入力フォームをウィザードで作ったのです。 Aテーブルからすべてのフィールド、Bテーブルから生徒氏名を選び、ウィザード任せにフォームを作りました。 このとき、できたフォームで出席番号を入れると何もしないのに、自動的に生徒氏名が入ってしまいます。 人に聞くと当たり前でしょ、みたいに言われたのですが、なんとなくわかるようでわかりません。どうして自動的に入るのでしょうか?ふりがなの自動入力みたいな設定をしたというのならわかるのですが、何もしてないのに。 すみません、自分でも、リレーションとか整合性とかについて、あるいはまだフォームとテーブルの関係について、よくわかってないせいなのだろうとは思うのですが、そこの所も合わせ、どなたか、分かりやすく教えていただけますか?宜しくお願いします。

  • フォームの作り方 アクセス2000

    アクセス2000を使い始めた初心者です。 顧客群に関するテーブルAがすでにあります。 このテーブルは事情があって、フィールドを追加することはできません。 もうひとつのテーブルBを作って、こちらに情報を追加するためのフィールドをいくつか作ります。 やりたいことは、 入力用のフォームに、テーブルAの情報内容を表示させて、テーブルBの入力をしたいのです。 クエリを作ってリレーションを設定するのだろうと思うのですが、具体的に進め方がわかりません。 よろしくお願いします。

  • フォームで主キー(No)を入力すると他の項目も自動的に表示

    ACCESS2000・フォームで主キー(No)を入力すると他の項目も自動的に表示させたい。 テーブルの構成は、以下のとおりです。 データベース名:報告書 テーブルA          | フォームA  フィールド1(数値)    |  フィールド1(数値)  フィールド2(テキスト)  |  フィールド2(テキスト)  フィールド3(テキスト)  |  フィールド3(テキスト) テーブルB          | フォームB  フィールド1(数値)    |  フィールド1(数値)  フィールド2(テキスト) |  フィールド2(テキスト)   フィールド3b(テキスト) |  フィールド3b(テキスト) 主キーはフィールド1です。 リレーションを組んでおり、テーブルAからテーブルEまでのフィールドは同じ物ならば(フィールド1=フィールド1のように)リレーションを設定しています。 これをフォーム上ででフィールド1(主キー)を入力すれば、他のフィールド2、フィールド3~も自動表示され、他のフォームもフィールド1(主キー)を選択すれば表示されるようにしたい。 ユニオンクエリなどを使うべきなのでしょうか? どなたか回答、宜しくお願いします。

  • Accessのフォームについて教えてください。

    こんばんは。アクセス入門者です。 入門書やできるシリーズなどいくつかのアクセスの本を見たのですが、 フォームについて、理解できません。 ●担当者マスタ ■客先マスタ ★コードマスタ ▲売り上げ計画マスタ ◎売上げ結果マスタ テーブルを作り、それぞれのテーブルから必要な項目を集めて、クエリを作成しました。思ったとおりの結果になったので、これを元にフォームを作成しました。 思ったとおりの結果が表示されるのですが、このフォームに入力が出来ません。できなかったので、次の方法を試しました。 ★コードマスタと▲売り上げ計画マスタのデータをサブフォームに配置しデータを追加させようと思って、あらたにフォームを作りました。やはり、思ったとおりの表示はされるのですが、追加ができないのです。それぞれのテーブルには、★コードマスタを主にそれぞれ、一対多にリレーションを組んでいます。 1つのフォームで色々なテーブルに結果を反映できるように、参照整合性の更新、削除にもチェックを入れました。 この考えは間違っているのでしょうか。 ○○マスタとあるように、それぞれ1つのテーブルに1つのフォームにしなければならないのでしょうか。 複数のテーブルから取り出したデータの更新は無理なのでしょうか。 ある程度、クエリまで完成したのにフォームでつまずいて苦しんでいます。ご解答宜しくお願い致します。

  • Access、検索用フォームでのあいまいな検索

    現在、Accessでデータベース作成をしています。 テーブル:  ・テーブルA          ・テーブルB          (A・B間にリレーションシップ設定) クエリ    ・検索クエリ(テーブルA・テーブルBを元に作成) フォーム   ・検索用フォーム(デザインビューでフォーム作成より)          ・検索結果フォーム(検索クエリを元に作成) また、以下のような設定を入力しました。 「検索クエリ」の抽出欄  Like "*" & [Forms]![検索用フォーム]![検索したい名前] & "*"・・(1)  ※検索したい項目、すべての抽出欄に設定済 「検索用フォーム」  検索実行ボタンを作成し、マクロを設定  ・フォームを開く→「検索結果フォーム」  ・フィルタ→「検索クエリ」 上記の設定により、検索用フォームに検索文字を入力することで、その結果を「検索結果フォーム」に反映することができました。 ただ、テーブルAが元になっている項目の抽出欄のみに(1)を入力すると、うまくいくのですが、テーブルBが元になっている項目欄にも (1)を入力しようとすると、検索用フォームからうまく検索することができなくなります。 2つのテーブルを元にしたクエリからは、検索用フォームをつかった複数のOR検索はできないのでしょうか?? ご存知の方、ぜひ教えてください。 よろしくお願いいたします。

  • Access2002 参照整合性について

    テーブル間にリレーションシップを設定する場合、リレーションテーブル側に主テーブルにないレコードがあると参照整合性を設定できないにも関わらず、「結合の種類」で「3」(リレーションテーブル側の全レコードと主テーブル側の同じ結合フィールドのレコードだけを含める)を選べるのは何故でしょうか。 参照整合性を設定できた時点で、リレーションテーブル側には主テーブルにないレコードは無いということだと思うのですが・・・。 よくわからなくなってしまいました。 お答え、よろしくお願いいたします。

  • Accessのフォームとテーブルについて教えてください。

    Access2003を使用しています。 既存のフォームAにフィールド3個を増やしました。 フォームAはテーブル(1)と連動していました。 追加したフィールドはテーブル(6)のものです。 ところがフォーム上で追加フィールドに入力が出来なくなりました。3フィールドのうち、ひとつはコンボボックスです。表示はされますが確定ができません。 フォームAのSQLステートメントではテーブル(1)・(6)以外にテーブル(2)・(3)・(4)・(5)が結合されています。 フォームAからするとテーブル(2)・(3)・(4)・(5)のデータはIDの名称を見るための参照用です。 テーブル(6)は、追加フィールドのコンボボックスが参照用で、他の2追加フィールドは、フォームから入力してテーブル(6)に反映させたいものです。 テーブル(6)の画面では入力できます。 フォーム上からは入力できません。 設定が何か欠けているからでしょうか? 他の質問では2つのテーブルをひとつのフォームにする場合は、クエリを別に設けた方がいいとなっています。フォームが出来上がっているので、できればクエリを設けずに行いたいのですが、よくない方法でしょうか? 手順なども踏まえて教えていただけると助かります。 よろしくお願いいたします。

  • アクセスのメインフォームとサブフォームの関連付けについて教えてください

    アクセス初心者です。会社で会員管理に使っているアクセスのデータがこわれてしまいました。入力だけに携わっていたのですが、急きょ勉強して修復に努めています。現在データベースが3つあり、メインフォームにサブフォームを2つ作り、その3つのデータを反映させています。壊れる前はこの3つをリレーションしてありましたが、現在リレーションができていません。それなのにフォームでは3つのデータが関連付けられた状態で表示されます。3つのデータには会員番号という同じフィールドがありますがリレーション以外に何か関連付ける方法があり、それがどこかではたらいているのでしょうか?また、リレーションしようとすると主テーブルににデータがないため参照整合性の規則に違反していると出てしまい処理ができません。本当に超初心者で申し訳ありませんがとても困っていますのでよろしくお願いします。

  • Access2003 フォームの入力ができない

    Accessまったくの初心者です。的外れな質問をしているかもしれませんが、よろしくお願いいたします。 FOM出版の「よくわかるAccess2003基礎」を使って勉強している最中なのですが、途中でつまづいてしまいました。 お客様Q&Aにも問い合わせをしている所なのですが、2営業日を過ぎないと回答が得られないとの事で、時間がもったいないので、こちらでも質問させてください。 テーブルを元にクエリを作成しフォームを作ったのですが、フォームにデータを入力しようとすると、PCより「ポンポン」と警告音がなり入力が全く出来ない状態です。 試しに、既存ファイルのクエリに入力をしてみたのですが同じ状況で入力できません。 テーブルには、数値の入力は出来ました。 フォームにデータを入力するには何か特別な操作が必要なのでしょうか? よろしくお願いいたします。

  • Accessのエラー (いくつかあります・・・)

    アクセスでデータを入力したのですが、なぜか下記のエラーがでます… *作成したアクセスデータ* テーブル 項目AのCDと項目A、項目BのCDと項目B、項目CのCDと項目C、項目A~CのCDとその他繰り返し入力しないデータ の合計4つのテーブル それらすべてをリレーションでつないでます クエリ 全項目入りのテーブルを元に作ったもののみ フォーム クエリを元にウィザードを使って作成 *エラー* (1)クエリを作った時に、1つでもCDが入力されてないフィールドがあるとその行全体が表示されなくなる  (CDを入力したら表示されますし、テーブルではCDが入ってなくても全て表示されてます) (2)フォームで新たにデータを入力しようとしても一切入力できないし、変更もできない時がある (使用可能等の項目は一切触っていません) (3)フォームでCDが入ってる箇所を未入力にしたままでは保存できずに、「CDと値が一致しません」?のようなエラーメッセージがでる (すみません、エラーメッセージはうろ覚えです…) (4)なぜか昇順で番号を並べ替えていたのに、フォームでデータを追加したら、昇順が反映されずに「1,11,2…」のようにフォームのみ表示される (テーブル・クエリは反映されています) このエラーの原因がわかる方ぜひ教えてください!! よろしくお願いします。

専門家に質問してみよう