Excelからテーブルをインポートして、それらのテーブル間の関係を維持しようとしています。データのインポートと追加
私は外部キーでお互いに接続されているいくつかの空のテーブルを持っています。私は基本的にそれらのテーブルにAccessからのデータを埋め込みます。例えば。テーブル「ProductsTests」は、データが追加されるときに、テーブル「Products」の外部キーを継承します。
あなたはそれを行う最良の方法は何だと思いますか?何か助けてくれてありがとう。
Excelからテーブルをインポートして、それらのテーブル間の関係を維持しようとしています。データのインポートと追加
私は外部キーでお互いに接続されているいくつかの空のテーブルを持っています。私は基本的にそれらのテーブルにAccessからのデータを埋め込みます。例えば。テーブル「ProductsTests」は、データが追加されるときに、テーブル「Products」の外部キーを継承します。
あなたはそれを行う最良の方法は何だと思いますか?何か助けてくれてありがとう。
Excelファイルを別のテーブルにインポートしてから、SQLクエリを使用して目的のテーブルにデータを追加すると、問題はありません(正しい順序でインポートすると、参照整合性に違反し、1対1の関係はしません)。モジュールに次のコードを追加します。
:
が関係を持つテーブルを上書きすることは、これは私のプロジェクトの一つである、やや困難である
その後'This function makes a duplicate of the provided relation
Public Function DuplicateRelation(SourceRelation As Relation) As Relation
Set DuplicateRelation = CurrentDb.CreateRelation(SourceRelation.NAME, SourceRelation.Table, SourceRelation.ForeignTable)
DuplicateRelation.Attributes = SourceRelation.Attributes
Dim i As Integer
Dim fldLoop As Field
Do While i < SourceRelation.Fields.Count
Set fldLoop = DuplicateRelation.CreateField(SourceRelation.Fields(i).NAME)
fldLoop.ForeignName = SourceRelation.Fields(i).ForeignName
DuplicateRelation.Fields.Append fldLoop
i = i + 1
Loop
End Function
'This function creates a collection containing duplicates of all relations involving strTablename, and then deletes those relations
Public Function DeleteRelationshipsCreateBackup(strTablename As String) As Collection
Dim ReturnCollection As Collection
Set ReturnCollection = New Collection
Dim i As Integer
Dim o As Integer
Do While i <= (CurrentDb.Relations.Count - 1)
Select Case strTablename
Case Is = CurrentDb.Relations(i).Table
ReturnCollection.Add DuplicateRelation(CurrentDb.Relations(i))
o = o + 1
CurrentDb.Relations.Delete CurrentDb.Relations(i).NAME
Case Is = CurrentDb.Relations(i).ForeignTable
ReturnCollection.Add DuplicateRelation(CurrentDb.Relations(i))
o = o + 1
CurrentDb.Relations.Delete CurrentDb.Relations(i).NAME
Case Else
i = i + 1
End Select
Loop
Set DeleteRelationshipsCreateBackup = ReturnCollection
End Function
'This function restores the duplicate created by DeleteRelationshipsCreateBackup
Public Sub RestoreRelationBackup(collRelationBackup As Collection)
Dim relBackup As Variant
If collRelationBackup.Count = 0 Then Exit Sub
For Each relBackup In collRelationBackup
CurrentDb.Relations.Append relBackup
Next relBackup
End Sub
、VBAでテーブルを交換する場合、以下を実行してください
dim collRelationBackup As Collection
Set collRelationBackup = DeleteRelationsCreateBackup("MyTable")
'Delete MyTable here
'Then make sure you create a drop-in replacement with the right field names and field types for the relation to be created
RestoreRelationBackup collRelation
ご覧のとおり、テーブルをクリアして追加するのは簡単ですが、これは参照整合性に問題があります(他のテーブルまた、テーブル構造の変更など)が発生する可能性があります。このコードを使用するときは、テーブルが置き換えられた後にすべてのリレーションの必須フィールドがすべて存在することを確認してください。そうしないと、ランタイムエラーが発生し、それらのリレーションシップはなくなります。
参照整合性と複数の関係がある場合は、関連するすべてのテーブルの関係を複製してコレクションに入れてから、テーブルの削除と置換をすべて行い、復元する必要があります。それらのすべて
あなたは、関係の問題を克服するためにVBAでADO.NETを使用することは可能ですか? –
VBAのADO.NETなど、ADOだけはありません。しかし、私はちょうど関係を持つデータセットをインポートする際の通常の問題を克服できるVBAコードを示しました。明らかに、それは行うことができます。いくつかの研究を行い、いくつかのことを試してみて、戻ってきて、問題があるかどうかを尋ねます(何がうまくいかなかったかに関するコード例)。 –
ありがとう、問題は、ADOを使用して解決されました。 –