• ベストアンサー

ACCESS2003で、複数テーブルのある項目を一括して主キーにしたい

アクセス2003で、1つのmdbの中に、同じデザインのテーブルがたくさんあります。 これらのテーブルには共通して「A、B、C、D」という項目があり、Dが数値型です。 既にテーブルにはデータが入力されています。(正確には、エクセルファイルから「TransferSpreadsheet」を使って同じ形式の複数シートを一気にインポートした状態です) 全てのテーブルに対して、一括してこのDという項目を主キーに設定したいのですが、どのようにすれば良いでしょうか? テーブル数は、200個程度あります。 VBAを利用したり、外部ツールを利用しても良いです。 ご教示、よろしくお願いします。

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

  • ベストアンサー
  • t2hayashi
  • ベストアンサー率46% (102/219)
回答No.2

全部のテーブルやっちゃっていいならこんな感じかなぁ ※全てのテーブルの"D"というフィールドに主キーをセット Function CreateIdx() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim idx As Index Set db = CurrentDb For I = 0 To DB.Tabledefs.Count - 1 Set tdf = db.TableDefs(DB.Tabledefs(I).Name) Set idx = tdf.CreateIndex("D") idx.Fields.Append idx.CreateField("D", dbLong) idx.Primary = True tdf.Indexes.Append idx db.Close Next I End Function

bznaoki
質問者

お礼

サンプルのソースを参考に、主キーを設定するロジックを組むことができました。ありがとうございました。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

テーブルに主キーを設定するにはSQLのALTER TABLEステートメントを使います 200ものテーブルに自動処理するにはVBAでSQL文を動的に作成して 走らせることになりますね ループ処理しなければ大変ですからテーブルの名前付けなんかも ループ処理できるような名前にしておく必要があります 現状のテーブル名はどうなっているのでしょう

bznaoki
質問者

お礼

補足要求の回答が遅れてしまい、申し訳ありませんでした。 ANo2の方の回答から、結果を出すことができましたので締め切らせて頂きました。 回答、ありがとうございました。

bznaoki
質問者

補足

返答が遅くなりまして申し訳ありません。 テーブルの名称はランダムな名称になっています。 インポートを行う処理は、Web上からサンプルを取得しました。 Private Sub コマンド0_Click() strFILENAME = "" strFILENAME = OpenFileDialog("入力元ファイルの指定", "c:\", "", _ "Microsoft Excel ワークシート (*.xls)|*.xls|すべてのファイル (*.*)|*.*", ".xls") If strFILENAME = "" Then Exit Sub If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub myFILE = strFILENAME Set myXLS = New Excel.Application myXLS.Visible = True Set myBK = myXLS.Workbooks.Open(Filename:=myFILE, ReadOnly:=True) For Each mySH In myBK.Sheets myLAST1 = mySH.Range("A" & mySH.Rows.Count).End(xlUp).Row myLAST2 = mySH.Cells(1, mySH.Columns.Count).End(xlToLeft).Column myLAST = mySH.Cells(myLAST1, myLAST2).Address(0, 0) DoCmd.TransferSpreadsheet _ TransferType:=acImport, _ TableName:=mySH.Name, _ Filename:=myBK.FullName, _ HasFieldNames:=True, _ Range:=mySH.Name & "!A1:" & myLAST Next myBK.Close: myXLS.Quit: Set myBK = Nothing: Set myXLS = Nothing MsgBox "完了" End Sub 情報不足で申し訳ありません。よろしくお願いいたします。

関連するQ&A