Access 主キーの解除について

このQ&Aのポイント
  • Access2007でVBAを使用してテーブルの主キーを設定・解除するプログラムを作成しました。しかし、解除プログラムでエラーメッセージが表示されます。手動で主キーを設定しなおしプログラムを実行すると、解除プログラムは動きます。なぜプログラムで設定した主キーでは解除ができないのでしょうか。
  • Access2007でテーブルの主キーを設定・解除するためにVBAプログラムを使用しています。主キーの設定は正しくできますが、解除するプログラムを実行するとエラーメッセージが表示されます。手動で主キーを設定し直すと、解除プログラムは正常に動作します。プログラムで設定した主キーが正常に解除されない理由を教えてください。
  • Access2007でVBAを使用してテーブルの主キーを設定・解除するプログラムを組みました。設定プログラムは動作するのですが、解除プログラムを実行するとエラーメッセージが出ます。手動で主キーを設定し直すと解除プログラムは正常に動作します。プログラムで設定した主キーが解除できない理由をお教えください。
回答を見る
  • ベストアンサー

Access 主キーの解除について

'テーブル[売上]に主キーを設定します DoCmd.RunSQL "ALTER TABLE 売上 ADD PRIMARY KEY (No);" 'テーブル[売上]の主キーを解除します DoCmd.RunSQL "DROP INDEX PRIMARYKEY ON [売上];" Access2007を使用しています。 VBAで主キーの設定・解除をするため、上記のプログラムを組みました。動かしてみると、設定はできたのですが、解除のプログラムで以下のエラーメッセージがでました。 実行時エラー'3372': テーブル'売上'にインデックス'PRIMARYKEY'が見つかりませんでした。 見つからないと出たので売上テーブルを開き確認をしたところ、ちゃんと主キー設定されていました。 そこで手動で主キーの設定しなおしプログラムを動かすと、解除プログラムが動きました。 手動で設定すると動くのですが、何故プログラムで設定した主キーでは動かないのでしょうか。 ご教授のほど、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.1

この様な事をしたことがないので 同じようにしてみました。 Prytwenさんと同じようになります。 キーが残った時点で、テーブルデザインで確認したところ 私の作成したテーブルの主キーにはインデックス名 Index_248F9C22_6E12_4E86 が付けられていました。 その状態で お書きになっているコードからキー作成部分をコメントにして Dropに キー名としてIndex_248F9C22_6E12_4E86を 与えると問題なく動き、キーも削除されました。 インデックス名が、PrimaryKeyで作成されていないようですね (手動の場合は、主キーにするとPrimaryKeyとなる)

Prytwen
質問者

お礼

なるほど、私も確認してみたらIndex_5B0A82C8_063F_439Bとなってました。 次はこのインデックス名を取得する方法を探してみます。これで先に進めそうです。 的確な回答、ありがとうございました。

その他の回答 (1)

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.2

取りあえず、以下の書き方で 作成 削除が確認できました (目的と違っているかもしれませんが?) 'テーブル[売上]に主キーを設定します DoCmd.RunSQL "CREATE INDEX primarykey on 売上(no) with PRIMARY;" 'テーブル[売上]の主キーを解除します DoCmd.RunSQL "DROP INDEX PRIMARYKEY ON [売上];"

Prytwen
質問者

お礼

ありがとうございますw

関連するQ&A

  • DoCmd.RunSQL "DROP Query

    アクセスVBAで DoCmd.RunSQL "DROP Query クエリ1;" はできないのですか? DROP TABLE または DROP INDEX ステートメントの構文エラーです。 (エラー 3295) となります。 テーブルを削除する場合は DoCmd.RunSQL "DROP Table テーブル1;" でエラーにならずにできました。 DROPはクエリに対しては使えないのか教えてください。

  • ACCESSで複数主キーにおけるseek検索

    ACCESSで複数主キーにおけるseek検索 ACCESS2000で複数の主キーを持つテーブルからseekで一致検索を行いたいが、 ADOを利用した場合のコードの書き方がわかりません。 テーブルは以下の3つのフィールドから構成されます。 フィールド1:フィールド2:フィールド3 年月日:担当職員:応対結果 ここで主キーは「年月日」と「担当職員」の2つで、「年月日」と「担当職員」が 一致するレコードをseekによって検索したいのです。 インデックスを表示させると「年月日」と「担当職員」が表示されます。 「年月日」の欄にのみ、インデックス名の欄にPrimaryKeyと書かれています。 DAOを用いて検索部分をVBAで書いたら動きました。 以下に検索部分だけ書きます。 (1) ds.Index = "PrimaryKey" (2) ds.Seek "=", 年月日, 担当職員 (3) If ds.NoMatch Then (4) MsgBox"そんなデータないですよ" (5) Else (6) MsgBox"一致するのがありました" しかしながら、ADOを用いた記述方法がわかりません。 上の(1)行は ds.Index = "PrimaryKey" でよいと思うのですが、(2)行以下がどう書いて良いかわかりません。 何卒宜しくお願いします。

  • 主キー、インデックスが作成できない

    お世話になります。 SQLserver2000とACCESS(フロント)で使っております。 主キーもインデックスも設定していなかったテーブルに エンタープライズマネージャから主キーを設定しようとしたのですが、保存しようとすると以下のエラーが出てしまいます。 もともと更新クエリを作成したのですが、”更新可能なクエリであることが必要です。”とエラーが出てしまい、いろいろ調べるうちに主キーを設定していないから??と思い、設定しようとしたのですがうまくいきません。。宜しくお願いします。 ■エラー内容 テーブル 'テーブル名 (ユーザー名)' - インデックス 'インデックス名' を作成できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server]インデックス ID 1 で重複したキーが見つかったので、CREATE UNIQUE INDEX は終了しました。もっとも重要な主キーは 'XXXX-00XXXX-00-A1 ' です。 [Microsoft][ODBC SQL Server Driver][SQL Server]制約を作成できませんでした。以前のエラーを調べてください。 [Microsoft][ODBC SQL Server Driver][SQL Server]ステートメントは終了されました。

  • 主キーを追加しようとするとエラー

    MYSQL4.0を使っていますが、 テーブル作成後、主キーを追加しようと ALTER TABLE MYTABLE ADD PRIMARY KEY ID; などと書くと、syntaxエラーになってしまいます。 どこが悪いのでしょうか、 分かる人がいましたら教えてください。

    • ベストアンサー
    • MySQL
  • Accessの主キーについて

    お願いいたします。 Accessの主キー設定について教えてください。 主キーの役割は、テーブルの中のレコードを区別 するための機能だと思いますが、 フィールドのデータ型をオートナンバー型にして おけば主キーの設定は必要ないのではないでしょう か? 主キーを設定する理由としては、参照整合性のため に行うという考え方で良いでしょうか? また、複数の主キーを設定するという場合のテーブ ル構成はどのような場合のシステムなのでしょうか? どうぞ教えてください。

  • Access 主キーについて

    Accessでテーブルを作りCSVファイルをテーブルへ読み込みました。その時は主キーを設定しませんでした。1000件あるデータは1000件分読み込めました。 次にテーブルのデータを消して、主キーを2フィールドに設定して、同じように1000件分のデータを読み込んだら950件分しか読み込めませんでした。これは50件は重複するデータがありますよということなのでしょうか?

  • 主キーが2つ

    私はアクセス97を仕事に活用したいと思い、勉強している初心者です。そこで質問なのですが、あるアクセスのホームページで参考にしているテーブルに主キーが2つあります。しかし、普通に主キーを設定しようとしても、1つしか設定できません。どうすれば1つのテーブルに2つ主キーを設定することができますか?よろしくお願いします。

  • 主キーとインデックスの違いについて

    はじめまして。 SqlServerのテーブル作成をしていますが、 主キーとインデックスの違いがよく分かりません。 いつも主キーの設定は行っていますが、インデックスの設定も必要なのでしょうか。(パフォーマンスの向上の為?) 基本的な事ですみませんが ご教授お願いします。

  • Access 「主キーにはnull値を~」のエラー

    こんにちは。閲覧ありがとうございます。 私はAccess初心者です。 勉強と実用をかねて個人用の「家計簿」をWindows7のAccess2010で作成しております。フォームを使用し、費目を記録して、ゆくゆくは集計なども行いたいと考えています。 いくつかの失敗に当たりながらどうにか形はできたのですが 『インデックスまたは主キーには、null値を使用できません。』 というエラーが出てきてしまい、これがどうしても解決できないでいます。 初心者があやふやな言葉を並べるより、現物を見ていただいた方が早いと思うので、以下に私が作成中の「家計簿rev2.accdb」をアップロードしておきました。 http://www1.axfc.net/uploader/so/2884464.zip (稚拙で見難いことこの上ないかもしれませんが、初心者ゆえご容赦ください・・・) 仕様としましては、フォームの「Fmain家計簿DB」に、「レシートNo、購入日、種類ID、費目、値段、個数、店舗ID、その他」と入力して、最後に次のレコードに移れば、レコードが一つ記録されるといった具合(のはず)です。 各テーブルの主キー以外には「空文字列の許可を"はい"」「値要求を"いいえ"」「インデックスを"いいえ"」に設定してあります。 オートナンバー型を使用しているのはテーブルの「Tmain家計簿DB」の主キーのみです。 また、「フィールドとキーが一致しているレコードをテーブルで探すことができません」というエラーが出るのを回避するため、こちらの質問を参考にさせてもらい外部結合の設定をしてあります。 (http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1368686318) そして、フォームに想定通りのデータを入力すると『インデックスまたは主キーには~』のエラーが出てしまいます。 せめてどこにnull値が入っててエラーが出てるのかを表示してくれたらいいのですが・・・ 以上になります。長文お読みいただきありがとうございました。 こんな簡単なdbの作成でお手上げ状態になるとは情けない限りです・・・ どなたか、『インデックスまたは主キーには、null値を使用できません。』の解決策をご教示いただけるとありがたいです。 よろしくお願いいたします。

  • ACCESS2000の主キー重複について

    いつもお世話になっています。 早速ですが、お教えください テーブル名:AMaster フィールド名:B があります。 「B」は主キーになっていまして、ユーザーが任意に数字をいれることになります。 主キーになっていますので基本的には重複しないのですがユーザーの押し間違いなどによって重複してしまった場合 [Microsoft][ODBC Microsoft Access Driver] インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。 といったエラーメッセージが出ます。これは出ても構わないのですがツールバーの「戻る」でしか今後の操作ができなくなってしまうので(ユーザーはPC超初心者)何らかの形でエラーメッセージとともに任意のページへ戻れるようにしたいと考えています。 つきましては、「B」フィールドにあるデータとこれから入力される数値が重複していたら・・・という記述をお教えいただきたいと思います。 ASPにて作成していますのでそれに対応した記述ですとありがたいです。 過去のログに似たようなものがありましたがこちらを参照してもボクにはわかりませんでした。 http://okweb.jp/kotaeru.php3?q=357614 ボクも何分初心者なのでわからないことだらけですがよろしくお願いします。

専門家に質問してみよう