プロが教えるわが家の防犯対策術!

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

VBAを利用したり、外部ツールを利用しても良いです。

ご教示、よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/12/27 15:20

テーブルに主キーを設定するにはSQLのALTER TABLEステートメントを使います


200ものテーブルに自動処理するにはVBAでSQL文を動的に作成して
走らせることになりますね

ループ処理しなければ大変ですからテーブルの名前付けなんかも
ループ処理できるような名前にしておく必要があります

現状のテーブル名はどうなっているのでしょう

この回答への補足

返答が遅くなりまして申し訳ありません。

テーブルの名称はランダムな名称になっています。
インポートを行う処理は、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

情報不足で申し訳ありません。よろしくお願いいたします。

補足日時:2007/12/26 18:04
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/12/27 15:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!