リンクテーブルのフィールド削除
先日から始めた、修理コードと対応する部品コードの1対多対応ですが、対応テーブルの作成作業は完了し、動作チェックに入っています。
連結クエリーの作成も一部終了しました。
動作チェックの為、今まで、修理料金のテーブルに持っていた、部品コードのフィールドを削除しようとして、悩みました。
フィールドを削除しなくても、動作そのものに問題がない事は判っているのですが、余計なデータ量を減らしたい事、いつか、このフィールドの存在意義で悩むだろうと考え、削除することにしたものです。
今の、業務システムは、複数の人で使う事も考え、バックアップのデータを減らしたい事もあって、データだけを別DBとして、リンクを張っています。
バージョンアップのやり易さも考慮して、テーブルの変更は、VBAで制御しています。
【VBAコード】
Function Syuuri_buhin()
'Microsoft Access Club http://www.accessclub.jp/samplefile/samplefile_163.htm から借用し、変更しました。
Dim DB As Database
Dim tb As TableDef
Dim tdfNew As TableDef
Dim tdf As TableDef
Dim strConnect As String
Dim Strsql As String
'anocoraData.mdbの所在確認
Set DB = CurrentDb
Set tb = DB.TableDefs("T_仕訳帳") '現在のリンクテーブルの定義情報を開く
strConnect = tb.Connect '現在のリンクテーブルの接続情報を取得
Set DB = OpenDatabase(Replace(strConnect, ";DATABASE=", ""))
'新しい TableDef オブジェクトを作成します。
Set tdfNew = DB.CreateTableDef("M_修理使用部品対応表")
With tdfNew
.Fields.Append .CreateField("修理コード", dbText, 20)
.Fields.Append .CreateField("部品コード", dbText, 20)
' 新しい TableDef オブジェクトをデータベースに追加します。
DB.TableDefs.Append tdfNew
End With
'リンクテーブル作成
DoCmd.TransferDatabase acLink, "Microsoft Access", Replace(strConnect, ";DATABASE=", ""), acTable, "M_修理使用部品対応表", "M_修理使用部品対応表"
Strsql = "INSERT INTO M_修理使用部品対応表 (修理コード,部品コード) "
Strsql = Strsql & "SELECT M_料金.修理コード, M_料金.Gコード "
Strsql = Strsql & "FROM M_料金 "
Strsql = Strsql & "WHERE (((M_料金.Gコード)<>'---'));"
DoCmd.RunSQL Strsql, True
'mdb Open
Set DB = DBEngine.OpenDatabase(Replace(strConnect, ";DATABASE=", ""))
Set tdf = DB.TableDefs("M_料金")
'既存のIndexを削除
tdf.Indexes.Delete "Gコード"
tdf.Fields.Delete "Gコード"
DB.Close: Set DB = Nothing
End Function
中々エラーの意味が判らなかったのですが、
テーブルデザインのインデックスを開く事で、ようやく、理解できました。
インデックス名が、別に作成されている事を今まで知りませんでした。
'既存のIndexを削除
tdf.Indexes.Delete "Gコード"→tdf.Indexes.Delete "M_料金Gコード"
に変更して、目的を達成しました。
« 背板支柱ほぼ完成 | トップページ | 上カバー、前カバー »
「Access 業務管理」カテゴリの記事
- お客様宅の緯度経度情報(2018.07.24)
- モジュールとメインフロー(2018.03.01)
- 受注情報の登録パターン(2017.10.11)
- 懸案は解決しましたが、PCが不調です。(2017.10.08)
- コンボボックスのリスト外入力からの振り仮名取得(2017.10.07)
コメント