accessについて教えてください。a.mdb,b.mdbと2ファイルあります。a.mdbにフォーム、b.mdbにテーブルがあります。a.mdbでDoCmd.TransferText acImportDelim, , ABC, LV_Filename(LV_i), Trueすると当然ですが、a.mdbにデータがインポートされます。これをb.mdbに作ったABCテーブルにデータをインポートさせるにはどのように命令を書いたらよいでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2009/03/16 09:45:48
  • 終了:2009/03/23 09:50:02

回答(3件)

id:fester No.1

fester回答回数124ベストアンサー獲得回数202009/03/16 10:32:14

ポイント27pt

b.mdbのABCテーブルを

a.mdbにリンクテーブルで作成し、

そのリンクテーブルに対して同コマンドを実行すれば良いと思います。

http://www.serpress.co.jp/access/no001.html

http://c108xswz.securesites.net/PC-Support/FAQ/acc/ht/acc032002h...

id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692009/03/16 11:14:37

ポイント27pt

TransferDatabaseを使えばいいです。

http://msdn.microsoft.com/ja-jp/library/cc379080.aspx


    DoCmd.TransferDatabase acExport, "Microsoft Access", bmdbPath, , "ABC", "ABC"

説明するまでもないけど、bmdbPath はb.mdbのパスです。

id:akaired

こんにちは。うまくデータをインポートできません。下記のコードはa.mdbのVBAです。b.mdbには書籍テーブル、見本テーブルがあります。このコードで実行するとテーブルが見つかりませんというメッセージが表示されます。どこが悪いでしょうか?

Path As String

Path2 As String

GetData As DAO.Database

OpenData As DAO.Database

Path="C:\Documents and Settings\me\デスクトップ\b.mdb"

Path2="Path="C:\Documents and Settings\me\デスクトップ\abcd.csv"

'OpenDatabaseメソッドでb.mdbの接続。

Set GetData=OpenDatabase(Path)

Set OpenData=GetData.OpenRecordset("書籍",dbOpenDynaset)

'Path2にCSVファイルがある。これを書籍テーブルにインポートしたい。

'CSVの1行目はフィールド名なので飛ばしたい。2行目からの読み込みがさせたい。

DoCmd.TransferText acImportDelim, , 書籍, Path2, True

Set GetData=Nothing

Set OpenData = Nothing

end sub

2009/03/16 22:35:58
id:fester No.3

fester回答回数124ベストアンサー獲得回数202009/03/16 16:07:25

ポイント26pt

前者を勧めますが、こういう方法もあります。


    Dim ac
    Set ac = CreateObject("Access.Application")
    ac.Visible = False
    ac.OpenCurrentDatabase "c:\b.mdb", True
    
    ac.DoCmd.TransferText acImportDelim, , ABC, LV_Filename(LV_i), True
    
    ac.Quit
    Set ac = Nothing

id:akaired

こんにちは。うまくデータをインポートできません。下記のコードはa.mdbのVBAです。b.mdbには書籍テーブル、見本テーブルがあります。このコードで実行するとテーブルが見つかりませんというメッセージが表示されます。どこが悪いでしょうか?

Path As String

Path2 As String

GetData As DAO.Database

OpenData As DAO.Database

Path="C:\Documents and Settings\me\デスクトップ\b.mdb"

Path2="Path="C:\Documents and Settings\me\デスクトップ\abcd.csv"

'OpenDatabaseメソッドでb.mdbの接続。

Set GetData=OpenDatabase(Path)

Set OpenData=GetData.OpenRecordset("書籍",dbOpenDynaset)

'Path2にCSVファイルがある。これを書籍テーブルにインポートしたい。

'CSVの1行目はフィールド名なので飛ばしたい。2行目からの読み込みがさせたい。

DoCmd.TransferText acImportDelim, , 書籍, Path2, True

Set GetData=Nothing

Set OpenData = Nothing

end sub

2009/03/16 22:35:26
  • id:SALINGER
    質問の意味を読み違えたかも。
    「これ」をa.mdbにできたABCテーブルかと思ったけど、DoCmd~のコードのことをさしているようですね。
    まあ、テーブルを移動した後にそのテーブルを削除すれば同じだけど。
    それと、ABCがテーブル名の入った変数ならば、""はいらないです。
  • id:akaired
    ご回答ありがとうございます。a.mdbにはテーブルはありません。
    インポートしたいのはCSVファイルです。つまり、VBAを使って
    a.mdbでボタンを押します。するとa.mdbでテーブルができては
    まずいです。すでにb.mdbでテーブルがあり、そこへCSVファイルを
    取り込みたいのです。教えていただいたやり方ではできませんでした。
  • id:SALINGER
    最初のコメントにあるように私の回答は、質問文を
    a.mdbにcsvファイルをインポート→できたテーブルを(これを)b.mdbにインポート
    と解釈した回答です。
    質問の意図が、csvファイルをb.mdbにインポートする内容のようなのでfesterさんの2回目の回答でよろしいかと思います。
  • id:akaired
    こんにちは。うまくデータをインポートできません。下記のコードはa.mdbのVBAです。b.mdbには書籍テーブル、見本テーブルがあります。このコードで実行するとテーブルが見つかりませんというメッセージが表示されます。どこが悪いでしょうか?エラーは "実行時エラー2495 このアクションまたはメソッドを実行するには[table name/テーブル名]引数が必要です"と表示されてしまいます。

    Path As String
    Path2 As String
    GetData As DAO.Database
    OpenData As DAO.Database
    Path="C:\Documents and Settings\me\デスクトップ\b.mdb"
    Path2="Path="C:\Documents and Settings\me\デスクトップ\abcd.csv"
    'OpenDatabaseメソッドでb.mdbの接続。

    Set GetData=OpenDatabase(Path)
    Set OpenData=GetData.OpenRecordset("書籍",dbOpenDynaset)

    'Path2にCSVファイルがある。これを書籍テーブルにインポートしたい。
    'CSVの1行目はフィールド名なので飛ばしたい。2行目からの読み込みがさせたい。

    DoCmd.TransferText acImportDelim, , 書籍, Path2, True

    Set GetData=Nothing
    Set OpenData = Nothing

    end sub
  • id:SALINGER
    参考までに自分の回答のコードを紹介しておきます。
    >>
    Dim Path As String
    Dim Path2 As String

    Path = "C:\Documents and Settings\me\デスクトップ\b.mdb"
    Path2 = "C:\Documents and Settings\me\デスクトップ\abcd.csv"

    DoCmd.TransferText acImportDelim, , "書籍", Path2, True

    DoCmd.TransferDatabase acExport, "Microsoft Access", Path, , "書籍", "書籍"

    CurrentDb.Execute "Drop Table 書籍;"
    <<
  • id:akaired
    ご回答ありがとうございます。何度も申し訳ありませんが、"Microsoft Access"は何を表しているのでしょうか?
  • id:SALINGER
    けっこう苦労されているようですね。
    まず、一番上に
    Option Compare Database の下に
    Option Explicit を書きましょう。
    これは変数の宣言を必ずしますということです。これを書いておくことでミススペルを勝手に変数と判断されなくなります。


    エラーの部分
    DoCmd.TransferText acImportDelim, , 書籍, Path2, True
    は、書籍が変数と判断されたことでそういうエラーがでました。
    テーブル名なので"書籍"とします。
    でも、これは質問前のコードなので結果はa.mdbに書籍というテーブルを作るコードとなります。
  • id:SALINGER
    http://msdn.microsoft.com/ja-jp/library/cc379080.aspx
    を見ると、データベースの種類とあって、データベースエンジンがいろいろ書いてあると思います。
    Microsoft Access (既定値)とあるので、書かなくてもいいのですが。
  • id:akaired
    SALINGERさんありがとうございます。最後に一つ教えてください。ここがわかりません。私のコードの中で、
    DoCmd.TransferText acImportDelim, ," 書籍", Path2, True
    とあります。これだとa.mdbに書籍テーブルが作られてしまいます。そうではなくて、b.mdbの書籍テーブルに値を挿入したいという
    場合はどういった命令をかけばいいのでしょうか?Set GetData=OpenDatabase(Path)
    Set OpenData=GetData.OpenRecordset("書籍",dbOpenDynaset)
    上記のコードをベースとして、どうやればよいか教えて頂けると嬉しいです。 基本的にfesterさんの3番目のご回答で
    目的達成したいのですが、

    acImportDelim, ," 書籍", の中の"書籍"でどうやってb.mdbにインポートしてやるかが知りたいです。
  • id:SALINGER
    実は、festerさんの2番目のコードでやってみたのですが、やり方が悪いのかうまくいきませんでした。
    DoCmd.TransferText acImportDelim, ," 書籍", Path2, True
    の"書籍"はカレントデータベースの書籍テーブルを意味するので、a.mdbに書籍テーブルができるわけですが、
    "書籍"の部分を外部データベースにする方法を探したのですが、無いのか見つかりませんでした。
    それで、festerさんのOpenCurrentDatabaseで開けばいいのかと思ったのですが、それでもうまくいかず。
    自分の一回テーブルを作って削除するという方法を紹介したわけです。
  • id:akaired
    そういうことですね。わかりました。SALINGERさんの方法で
    DoCmd.TransferDatabase acExport, "Microsoft Access", Path, , "書籍", "書籍"
    という箇所がありますが、私はSet GetData=OpenDatabase(Path)
    Set OpenData=GetData.OpenRecordset("書籍",dbOpenDynaset)
    のようにしてb.mdbとの接続をおこなっています。この場合、Pathの部分がちょっと違うのですが、
    Pathの部分をOpenDataとしてもうまくいかず、どうやってb.mdbを指定するか迷っています。
    Pathの部分をOpenDataにすると、
    "実行時エラー2498 指定した式は、いずれかの引数とデータ型が対応していません。”と表示されて
    しまいます。
  • id:SALINGER
    OpenDatabaseで開いてレコードセットを取得すると、CSVを解析して個々の値を入れていくという方法になって1行ではすまない感じですね。
  • id:fester
    DoCmdメソッドは、Applicationオブジェクトのメンバになります。
    なので、b.mdb のApplicationオブジェクトに対して「DoCmd.TransferText」を掛ければ良いということになります。

    そうすると回答3のようになります。
    いちおう動作確認できました。(Mookさんも動作確認してくれたみたいです)
  • id:SALINGER
    >festerさん
    大変失礼しました。昨日、試しに書いてみたときにDoCmdの前にacが抜けてたのが原因でした。

    >>
    Sub test()
    Dim Path As String
    Dim Path2 As String
    Dim ac
    Path = "C:\Documents and Settings\me\デスクトップ\b.mdb"
    Path2 = "C:\Documents and Settings\me\デスクトップ\abcd.csv"

    Set ac = CreateObject("Access.Application")
    ac.Visible = False
    ac.OpenCurrentDatabase Path, True

    ac.DoCmd.TransferText acImportDelim, , "書籍", Path2, True

    ac.Quit
    Set ac = Nothing
    End Sub
    <<

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません