« 背板支柱ほぼ完成 | トップページ | 上カバー、前カバー »

2013年4月27日 (土)

リンクテーブルのフィールド削除

先日から始めた、修理コードと対応する部品コードの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

を実行すると、
Errar エラーになります。

中々エラーの意味が判らなかったのですが、

 

 

 

Index テーブルデザインのインデックスを開く事で、ようやく、理解できました。

 

 

 

Index_2 フィールド名とインデクッス名が異なっていました。

インデックス名が、別に作成されている事を今まで知りませんでした。

 

 

    '既存のIndexを削除
    tdf.Indexes.Delete "Gコード"→tdf.Indexes.Delete "M_料金Gコード"

に変更して、目的を達成しました。

« 背板支柱ほぼ完成 | トップページ | 上カバー、前カバー »

Access 業務管理」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: リンクテーブルのフィールド削除:

« 背板支柱ほぼ完成 | トップページ | 上カバー、前カバー »

スライムパンク防止剤被害

川越市周辺の自転車屋MAP

埼玉県内出張修理店情報

自転車出張修理のブログ

カテゴリー

無料ブログはココログ

ブログランキング