Access2000(Windows)でBtrieveデータベースからODBCをつかって、

DoCmd.TransferDatabase acImport, "ODBC", "ODBC;DSN=Btrieve", acTable,
"BtrieveTable名", "AccessTable名", False

で、インポートすると1つのテーブルだけでレコード数が135,000程度、ファイルサイズが30MB程度(最適化直後)になってしまいます。時間も(マシンやネットワークの環境によりますが)10分近くかかってしまいます。
実際このテーブルの中で必要なレコード数は500程度なので、まるまるインポートし
ないで必要なだけにして、時間とファイルサイズを稼ぎたいのですが、何か方法があるのでしょうか?

いったんリンクしてから SELECT INTO や INSERT INTO すれば10秒もかからないでできます。
しかし、BtrieveTable名が毎月変わっていくので、お手上げ状態になり、上の方法を思いついたのです。
もしもこんな条件でリンクの設定ができればベストなのですが、ODBCソフトがメラント社のDatadirectというものでVBAからの設定が可能なのかどうかもわかりません。

よろしくご教授願います。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

下の回答を書いた者です。


下記の通り、「メラント社のDatadirect」については
分からないんですが、、、

ホームページやドキュメント類はご覧になりましたでしょうか?
ホームページでは手動でリンクを張る方法を説明していましたが
「データの更新を行う時には」メッセージが出るようです。
(リンクテーブルを削除してみても無理ですかね?)

出さなくする方法もあるような気がするんですが、知識も
検証環境も無いですし、これ以上の技術的コメントは
私からは、、、中途半端ですみません。

参考URL:http://www.merant.co.jp/datadirect/technote/odbc …
    • good
    • 0

DoCmd.TransferDatabase acImport,,,(省略)


の「acImport」を「acLink」にしてリンクをはり、その後で
SELECTやINSERTをすれば良いのでは?

「メラント社のDatadirect」については分かりません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
早速試してみました。
ご指導いただいた方法では、LINKが作成される前にDataDirectの"固有レコード識別子の選択"ボックスが表示されて、一旦停止してしまいます。
ここでOKをクリックすればLINKが作成されるのですが、それはそれで仕方がないのでしょうか?

お礼日時:2002/02/15 14:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q固有レコード識別子の選択とは??

Accessでテーブルのリンクを行う際に「固有レコード識別子の選択」ダイアログがでますが、
これは元のテーブルの主キーを選択するものなのでしょうか?

1.主キーが存在するのに選択しなかった
2.実際の主キーより多くのフィールドを選択した
また、上記の2点を行った際はどのような挙動になるのでしょうか?
2.はあまり変わらない気がするのですが・・・

知識がある方がおられましたらよろしくお願いします!!

Aベストアンサー

主キーが設定されていないテーブルをリンクした場合[固有レコード識別子の選択]ダイアログが表示されます。主キーが設定されていない場合、テーブルの更新・削除などに際して正しくデータを同期することができないため主キー(プライマリキー)を設定するのが通常です。
リンク先に一意となるユニークインデックスが無い場合は読取専用となってデータを更新することができません。

>1.主キーが存在するのに選択しなかった
主キーがあって[固有レコード識別子の選択]ダイアログが出るというのはデータソースの主キーを認識していない?認識できない?その辺の確認が必要ではないでしょうか。
リンク先のテーブル側に主キーを設定しておけば問題ないはずです。
>実際の主キーより多くのフィールドを選択した
多くのフィールドを設定してもSQLなどでレコードセットを取得し処理する場合などで余分なキーが多く存在するとレスポンスが悪くなるくらいです。大容量のレコードを処理する以外なら分からないかも。

QAccessの固有レコード識別子の選択

Accessでリンクテーブルを作る際に行う、固有レコード識別子の選択はなんのためにするものなのでしょうか?

Aベストアンサー

Accessからデータを制御する際
ローカルのテーブルであれば 表示はされませんが
内部的に 絶対番号が振られているので
全てのフィールドに同じ値が入っていても
ユーザーが任意のレコードを削除・編集を行えば
どのレコードに対して行われているのかがわかります。

しかし、SQLServerなどの 異なるデータベースの場合
Access側からはわからないので 一意なキーによって
レコードを識別するためです。

QAccessで別mdbのテーブルをコピー

VBで同じような質問をされている方はいたのですが、
ACCESS VBAでの方法がよくわからないので、教えてください。

別フォルダにあるmdbからテーブルをコピーしたいのですが、
どのようにしたらいいのでしょうか。

DoCmd.CopyObjectを使うと、コピー先を指定することはできるようですが、
コピー元を指定してコピーする方法を教えてください。

よろしくお願いします。

Aベストアンサー

DoCmd.TransferDatabase acImport, "Microsoft Access", "C:\元データ.mdb", acTable, "元テーブル名","新テーブル名"
みたいな方法でどうでしょうか?
詳しくはHelpを見てください。
p.s.
すでに同名のテーブルがある場合は、別名でインポートされるようです。
Access2000ではそうでした。

QAccess2003VBA リンクテーブル(パスワード付き)を作成するには?

Cドライブ直下に、A.mdbとB.mdbがあります。
また、B.mdbには、『テーブルX』があります。
A.mdbに、B.mdbの『テーブルX』をリンクさせたいのですが、
b.mdbは、パスワードで保護されています。
以下のコードは、b.mdbに、パスワードの設定が無い場合、使用可能ですが、b.mdbに、パスワードの設定がある場合、どうすればよいのでしょうか?色々ネットで検索したのですが、出てきません。><
急ぎなので、すみませんが、教えていただけませんでしょうか。

DoCmd.TransferDatabase acLink, "Microsoft Access", "C:\B.mdb", acTable, "テーブルX", "テーブルX", False

Aベストアンサー

ODBCでリンクする方法があるようです。

DoCmd.TransferDatabase acLink, "ODBC", "MS Access;DATABASE=C:\B.mdb;PWD=pass", acTable, "テーブルX", "テーブルX", False

ただ、主キーが設定してない場合は、ダイアログが出ますが・・・


人気Q&Aランキング

おすすめ情報