web-dev-qa-db-ja.com

保存したMicrosoft Access 2007または2010のインポート仕様を変更するにはどうすればよいですか?

Microsoft Access 2007または2010で既存のインポート仕様を変更する方法を知っている人はいますか?以前のバージョンでは、インポートウィザード中に表示される[詳細設定]ボタンを使用して、既存の仕様を選択および編集できました。私はもはやこの機能を見ていませんが、それがまだ存在し、他の場所に移動されたことを願っています。

40
L G

MS Access 2007を使用しているマシンでこの機能を使用できます。

  • リボンで、[外部データ]を選択します
  • [テキストファイル]オプションを選択します
  • これにより、外部データの取得ウィザードが表示されます
  • インポートするファイルの場所を指定します
  • OKをクリックします。これにより、「テキストのインポートウィザード」が表示されます
  • このダイアログ画面の下部には、参照した[詳細設定]ボタンがあります
  • このボタンをクリックすると、インポート仕様画面が表示され、既存のインポート仕様を選択および変更できるようになります。

その価値のために、私はAccess 2007 SP1を使用しています

39
Tim Lentine

直接サポートされている方法があるとは思わない。ただし、もしあなたが絶望的な場合、ナビゲーションオプションの下で、システムオブジェクトを表示することを選択します。次に、テーブルリストにシステムテーブルが表示されます。ここでは、MSysIMEXspecsとMSysIMEXColumnsの2つのテーブルが重要です。インポートおよびエクスポート情報を編集できます。がんばろう!

15
Knox

Tim Lentineの答え は完全なリリースでも真実のようです。言及したいことがもう1つあります。

「詳細設定...」に進んで仕様を保存せずにインポートを完了したが、ウィザードの最後で再利用のためにインポートを保存した場合(新機能は知らない)、戻って編集することはできませんスペック「保存されたインポート」に組み込まれています。これは、Knoxが言及していることかもしれません。

ただし、次の部分的な回避策を実行できます。

  1. 新しいファイル(または同じファイル)をインポートしますが、
  2. 今回は、新しいものを作成する代わりに、追加することを選択します
  3. OKをクリックします。
  4. 「詳細」に移動します。すべての列見出しとデータ型がそこにあります。
  5. これで、必要な変更を行い、ダイアログ内に仕様を保存できます。次に、そのインポートをキャンセルします(とにかく、それはあなたが望んでいたものではありませんか?)
  6. その後、その仕様をさらにインポートするために使用できます。完全なソリューションではありませんが、作業の一部を節約できます。
7
Luke Gedeon

以下は、MS Access 2010インポート仕様を変更して使用するために使用できる3つの機能です。 3番目のサブは、既存のインポート仕様の名前を変更します。 2番目のサブでは、インポート仕様のxmlテキストを変更できます。これは、列名、データ型の変更、列の追加、インポートファイルの場所の変更などが必要な場合に役立ちます。本質的には、既存の仕様に対して変更するものは何でも変更できます。最初のSubは、既存のインポート仕様を呼び出して、インポートしようとしている特定のファイルに合わせて変更し、そのファイルをインポートしてから、変更された仕様を削除し、インポート仕様の「テンプレート」を変更せずにそのまま維持できるルーチンです。楽しい。

Public Sub MyExcelTransfer(myTempTable As String, myPath As String)
On Error GoTo ERR_Handler:
    Dim mySpec As ImportExportSpecification
    Dim myNewSpec As ImportExportSpecification
    Dim x As Integer

    For x = 0 To CurrentProject.ImportExportSpecifications.Count - 1
    If CurrentProject.ImportExportSpecifications.Item(x).Name = "TemporaryImport" Then
        CurrentProject.ImportExportSpecifications.Item("TemporaryImport").Delete
        x = CurrentProject.ImportExportSpecifications.Count
    End If
    Next x
    Set mySpec = CurrentProject.ImportExportSpecifications.Item(myTempTable)
    CurrentProject.ImportExportSpecifications.Add "TemporaryImport", mySpec.XML
    Set myNewSpec = CurrentProject.ImportExportSpecifications.Item("TemporaryImport")

    myNewSpec.XML = Replace(myNewSpec.XML, "\\MyComputer\ChangeThis", myPath)
    myNewSpec.Execute
    myNewSpec.Delete
    Set mySpec = Nothing
    Set myNewSpec = Nothing
    exit_ErrHandler:
    For x = 0 To CurrentProject.ImportExportSpecifications.Count - 1
    If CurrentProject.ImportExportSpecifications.Item(x).Name = "TemporaryImport" Then
        CurrentProject.ImportExportSpecifications.Item("TemporaryImport").Delete
        x = CurrentProject.ImportExportSpecifications.Count
    End If
    Next x
Exit Sub    
ERR_Handler:
    MsgBox Err.Description
    Resume exit_ErrHandler
End Sub

Public Sub fixImportSpecs(myTable As String, strFind As String, strRepl As String)
    Dim mySpec As ImportExportSpecification    
    Set mySpec = CurrentProject.ImportExportSpecifications.Item(myTable)    
    mySpec.XML = Replace(mySpec.XML, strFind, strRepl)
    Set mySpec = Nothing
End Sub


Public Sub MyExcelChangeName(OldName As String, NewName As String)
    Dim mySpec As ImportExportSpecification
    Dim myNewSpec As ImportExportSpecification
    Set mySpec = CurrentProject.ImportExportSpecifications.Item(OldName)    
    CurrentProject.ImportExportSpecifications.Add NewName, mySpec.XML
    mySpec.Delete
    Set mySpec = Nothing
    Set myNewSpec = Nothing
End Sub
5
Mike Hansen

インポート/エクスポートの仕様を調べたり変更したい場合、仕様が定義されているMS Accessのテーブルを照会します。

SELECT 
    MSysIMEXSpecs.SpecName,
    MSysIMexColumns.*
FROM 
    MSysIMEXSpecs
    LEFT JOIN MSysIMEXColumns 
    ON MSysIMEXSpecs.SpecID = MSysIMEXColumns.SpecID
WHERE
    SpecName = 'MySpecName'
ORDER BY
    MSysIMEXSpecs.SpecID, MSysIMEXColumns.Start;

UPDATEまたはINSERTステートメントを使用して、既存の列を変更したり、既存の仕様に新しい列を挿入および追加したりすることもできます。この方法を使用して、まったく新しい仕様を作成できます。

2
Andrew

もう1つの優れたオプションは、Microsoft Access用の無料の V-Tools アドインです。他の便利なツールの中でも、インポート/エクスポート仕様を編集および保存するためのフォームがあります。

enter image description here

enter image description here

注:バージョン1.83の時点では、Windows 10のコードページの列挙にバグがあります(Windows 10のAPI機能が欠落しているか変更されているため)。数行のコードをコメントアウトするか、デバッグウィンドウでステップを通過するだけです。

これは、オンライン注文の複雑なインポート仕様を編集する上で、私にとって実際の命の恩人でした。

1
AdamsTips

なぜそんなに複雑なのですか?

Access-Options/Current Database/Navigation Options/Show System ObjectsのSystem Objectsをチェックするだけです

テーブル「MSysIMEXSpecs」を開き、必要に応じて変更します-読みやすい...

1

AccessのSaved Import/XMLセットアップ全体に明らかなバグを発見しました。また、Saved Importシステムの厳格さに苛立ち、フォームを作成し、Saved Import仕様が保存されているXMLを選択するためのコードを作成しました。ソースExcelワークブックの検査。

私が見つけたのは、Accessがユーザーのデフォルト設定の変更ごとにワークシートを正しくインポートする一方で(たとえば、ヘッダー名が「ID」で終わる列を取得して、結果のテーブルですが、インポートプロセス中にこれをキャンセルできます)、またユーザーの変更に応じてXMLを正しく作成しますが、テーブルを削除し、保存されたインポートを使用してワークシートを再インポートすると、XMLは無視されます少なくとも「ID」列の場合は、仕様をインポートし、独自のデフォルトを使用するように戻します。

これを自分で試すことができます。「ID」で終わる列ヘッダー名が少なくとも1つあるワークシートExcelをインポートします(「OrderID」、「User ID」、または単なる「ID」)。プロセス中に、それらの列の「インデックス付き」を必ず「いいえ」に設定してください。インポートを実行し、最後のダイアログウィンドウで[インポートステップの保存]をオンにします。結果のテーブルデザインを調べると、問題のフィールドにインデックスがないことがわかります。次に、テーブルを削除し、保存されたインポートを見つけて、再度実行します。今回は、XMLでまだインデックスが指定されていなくても、これらのフィールドはテーブルデザインでインデックス付きとして設定されます。

何が起こっているのかを発見するまで髪を引っ張り、最初から構築したXMLとAccessツールで作成したサンプルを比較しました。

0
Dennis Flory

Tim Lentineの答えは、仕様が保存されていれば機能します。あなたの質問はそれを特定せず、あなたがデータをインポートしたとだけ述べました。彼の方法では、仕様がそのように保存されません。

現在のインポートの仕様を保存する方法は、インポートを再度開き、「アペンド」を押すと、MS Accessが選択した現在のインポート設定を使用できるようにすることです。 (これは、MS Accessにインポートする前に作業したExcel形式のインポート仕様を保持したい場合に便利です。

アペンドオプションが表示されたら、高度なオプションと「名前を付けて保存」を使用するTimの指示を使用します。そこから、[キャンセル]をクリックするだけで、他の同様のデータをさまざまなテーブルなどにインポートできます。

0
Jesse Hernandez