• 締切済み

テーブルリンク方法を教えてください

業務用アプリケーションをACCESSで運用していますが、 近々クライアント数が増えるのでACCESS+MSDEでバージョンアップを試みているところです。 が、初心者なのでうまく出来ずエラーになり、どうして良いのか色々な書籍を見ているのですが、よくわかりません。 どなたか教えてください、よろしくお願いします。 開発環境 Win XP Home Edition SP2 Access 2002 MSDE2000A 旧業務用アプリケーション .mdbはテーブルとフォーム・レポート等は別々にして稼動時に.iniファイルでリンク 新業務用アプリケーション 1.旧業務用アプリケーション同様、.adpは分けました。 2.テーブルは新規に作成 3.フォーム・モジュールは旧よりインポート  (テーブルリンク方法は旧と同じ)

みんなの回答

  • t2hayashi
  • ベストアンサー率46% (102/219)
回答No.4

やはり参照設定が怪しいとしか・・・・ あるいは単純にwithの書き方とか・・・ 私の環境下では以下のコードは問題ありませんでした。 すでにMSDEにテーブルは移行されていて そのリンクを都度張りなおすってことですよね。 リンクしたまま配布してはダメなんですか?

yszk0518
質問者

お礼

貴重な時間をありがとうございました。 adp化する前のmdbはテーブルと他を分けて作成されていて、 複数に配布できるようになっており、それに準じてadp化に改修したのですが。 残念です、再考します。 また、質問したときはよろしくお願いいたします。

  • t2hayashi
  • ベストアンサー率46% (102/219)
回答No.3

以下のエラーはすでにODBCと関係ないような気がします・・・・ モジュール上で「参照設定」をチェックして MS DAO3.6 にチェックがはいっているか見て下さい。 また「参照不可:」となっているものはありませんか? またDAOを使うにしても Dim tbl As DAO.TableDef Dim CDB As Database と書くなどDAOを明示的に書いてあげたほうがいいと思います。 しかしこのコードを見るとテーブルオブジェクトの数が 5以上だと抜ける、というものですよね・・・・ 利用用途がイメージできません。

yszk0518
質問者

お礼

>しかしこのコードを見るとテーブルオブジェクトの数が 5以上だと抜ける、というものですよね・・・・ 利用用途がイメージできません。 クライアント側にインストールしたときは、テーブルをリンクされていない状態であり、クライアント側で最初に稼動したときにテーブルをリンクするようにしています。(1テーブル) 参照設定について MS DAO3.6はチェックしてあります。

  • t2hayashi
  • ベストアンサー率46% (102/219)
回答No.2

no1で回答したものです。 こちらにわかりやすい説明が。http://www.atmarkit.co.jp/fwin2k/win2ktips/404accessmsde/accessmsde.html ACCESSとMSDEをつなぐ構築には二種類あるようです。 (1)MSDE+.adp (2)MSDE+(ODBC)+.mdb どうも質問者は(1)でやられようとしているのではないでしょうか。 現アプリケーションがすでにmdbであるのであれば恐らく(2)のほうが 簡単です。 まず、現在のデータとフロントに分けているmdbを 単一のファイル(hoge.mdb)にして下さい。 次にこのhoge.mdbのアップサイジングウィザードを使い ODBCドライバ経由でMSDEにテーブルをアップします。 「ファイルデータソース」を使ってアップサイズ、テーブルリンク すれば他のマシンでも使えるmdbになります。 念のため最終的にmdeにして配布したほうがいいですね。 ※ちなみにC/S環境で5人以上同時に使う、あるいはデータの総量が2GBを超えるような場合はSQLサーバーにする必要があります。

yszk0518
質問者

お礼

t2hayashiさん有難うございます。 (2)の方法でやったつもりですが、下記の箇所でエラーが出てしまいました。 「エラー箇所」 Public Function LinkTable(MdbName As String) Dim tbl As TableDef Dim CDB As Database Set CDB = CurrentDb If CDB.TableDefs.Count > 5 Then ←ここで Exit Function End If 「エラー内容」 オブジェクト変数またはWithブロック変数が設定されていません

  • t2hayashi
  • ベストアンサー率46% (102/219)
回答No.1

アップサイジングウィザードじゃダメなんですか? また、「adpは分けました」という意味がわかりません。 単純にテーブルをMSDE上に移したいということであればプロジェクトにする必要がありません。まず単一のファイルにした後、1つづつテーブルをエキスポートしていくのが地味ですが確実です。 エキスポートにエラーが出るのであればテーブル構造に問題があります。

yszk0518
質問者

お礼

お礼が遅れてすいませんでした。 adpを分けたのは、「mdbでテーブルと他を分けて作成し、テーブルは サーバー側に起き、他はクライアント側でマルチユーザが使用する」 という考えで開発されているのでそれに準じた考えで分けました。 ご指摘の通り、「アップサイジングウィザード」でやってみます。

yszk0518
質問者

補足

質問の仕方が悪くてすいませんでした。 ご指摘の通り、「アップサイジングウィザード」でやってみて、テーブルはmdbよりインポートできました。 しかし、フォーム等のmdbを起動しますと、「データベースの形式'C:\販売管理\販売管理TBL.adp'を認識できません。」のエラーが発生します。

関連するQ&A

  • 「テーブルリンク」なのか「インポート」なのか?

    アプリケーション(1).mdb アプリケーション(2).mdb アプリケーション(3).mdb と3つの空のデータベースを用意しました。 (1).mdbに新規テーブルを作成し、保存します。 (2).mdbを開いて、「テーブルのリンク」で(1).mdbのテーブルをリンクしました。 (3).mdbを開いて、「テーブルのリンク」で(2).mdbを接続した時に、先ほどリンクしたテーブル(1→2)は表示されません。 しかし、「インポート」にすると(2).mdbの(1→2)へリンクしているテーブルを(2→3)へリンクすることができました。 結果的にはこれは、「インポート」ではなく「テーブルリンク」ですよね? (1).mdbでテーブルのデータを追加して保存し、(3).mdbで確認すると、ちゃんとデータが更新されています。 よくわからなくなってきました。 これは「インポート」なのでしょうか? 「テーブルリンク」なのでしょうか? よろしくお願いします。

  • リンクテーブルで繋げているテーブルがいきなり入力・変更ができなくなった!

    ○○.mdbと○○_be.mdbのファイルがあり、○○_be.mdbはテーブルのみで、 ○○.mdbには○○_be.mdbのテーブルのコピー(リンクテーブル)があります。 なぜか今リンクテーブルで繋げている○○.mdbファイルのテーブルが 入力できなってしまいました。 このAccessファイル(○○.mdb)で作成したテーブルは変更可能です。 リンクテーブルのみ、 値の変更も新規レコードの追加もできなくなったのですが なぜでしょうか!!?? Accessを一度落として、 ファイルを開く→「開く」で再起動しても変わりません。 リンクテーブルのもとは(○○_be.mdb)変更可能です。 しかしフォームなどは○○.mdbファイルにある為、 ○○.mdbのリンクテーブルでのデータを変更したいのですができません! 何かわかる方よろしくお願い致します!!!!! (オフィス2003です)

  • ADPのテーブルの場所

    MSDEに接続して新規Microsoft Access プロジェクト (*.adp) を作成しました。 そこで作成したテーブルは、OSQLでMSDEを覗けばテーブルが見れるものと思っていましたが見れません。 ADPのデザインビューで作ったテーブルはMSDE上ではなく、ADP上にあるのでしょうか?。

  • Accessアップサイジング後の入力一時テーブル

    MDBよりADPにアップサイジング中。access2007+sqlserver2005にて構築中です。 MDBのときはserver側にテープルすべて移動させリンクにて運用し始めたが、Dataテーブルを直接参照させ開かせると他の処理に影響があるので、入力一時ファイルを作成しておき入力フォームで入力後入力完了ボタンで、更新、追加、削除させDataテーブルに書き込ませていました。 この時server側にこの一時入力テーブルを作ると、レコードが混ざってしまうのでクライアントのMDB 上にこのテープルだけ持たしていました。 ADPにするとこの手法はとれないので(ADPにはテーブル、クエリ等持てない)どのようにすればいいのでしょうか。 くぐったりすると、ローカル一時ファイルを作るようにあるのですが具体的には理解できません。 その入力フォームが出てくるのは、親子リンクで子側のテータテープルとして使用しています(発注フォームの商品明細部分) よろしくお願いします。

  • Accessのテーブルへのリンク

    いま、ASPのDBとして使っているAccessのファイル A.mdbがあります その中の一つのテーブルを別のAccessファイル B.mdbにリンクして、参照したいと思っています。 しかし、B.mdbからリンクするときに インポートすると、A.mdbの変更が反映されず、 リンクすると、B.mdbで変更したものがA.mdbにも反映されて困っています. やりたいことはB.mdbから安全に(変更なしで)A.mdbのテーブルを 閲覧したいのです. ・A.mdbの変更をB.mdbに反映したい ・B.mdbのテーブルの変更はA.mdbに影響がない と言うことです. どうかお力添えを よろしくお願いします.

  • リンクテーブルについて・・・

    Access97で仕事関連のシステムを開発しています。 実データはテーブルだけのMDBファイルに格納して、 リンクテーブルとしています。 自宅ではアプリケーションMDBファイル、実データMDB ファイル共、ローカルディスクに入れていますが、 仕事場では実データMDBファイルはネットワーク上の サーバに有ります。 その為、アプリ変更の都度「リンクテーブルマネー ジャー」を行わないといけないのですが、これが結構 やっかいです。 自宅の環境では、数十テーブルのリンクに関して、 1回だけリンク先のMDBファイルを指定してやれば、 全てのテーブルリンクが完了しますが、仕事場では 各テーブル毎に1件づつリンク先を指定しないと いけません・・・なんで? あと、2つのリンク環境を一発で更新するとか、 出来ませんかネェ?

  • ACCESS MSDE フォーム上からのデータ更新による競合

    いつもお世話になっております。 WINDOWS XP ACCESS 2002,2003 を使用しております。 既存のMDBファイルを MSDEを使用するADPファイルに置き換え、 なおかつ複数端末による運用が可能なようにシステムを変更しております。(元々複数端末で使用しています) 以下の手順でadpファイルを作って運用使用とする場合に疑問があるのですが。 (1)MSDEデータベースに接続したadpファイルを作成。 (2)フォームのレコードソースをMSDEデータベースのテーブル、 テキストボックスのコントロールソースに、そのテーブルに存在するフィールドを設定。 (3)このadpファイルを複数マシンに置き、同時に起動。 (4)作成したフォームで同一のレコードを同時に修正。 この場合に、後のほうで更新した時に 「データの競合」ダイアログが表示され、データを反映するか、先に更新されたほうを優先するか 選択できるますが、 mdbでも同様の運用が可能ですが、この運用を続けるとデータ破損の温床になるようですので控えておりました。 MSDEを使ったadpファイルでも同様のことが言えるのでしょうか? また、もしこの運用に問題があるとすれば、非連結のテキストボックスを設けて「更新」ボタンでADOによる 更新を行わなければならないのでしょうか。 レコードをリスト形式で表示しているので出来ればそれはさけたいのですが。 どなたかご教授のほど、何卒よろしくお願いいたします。

  • Accessのセキュリティ対策

    現在Accessで業務用のアプリケーションを開発しています。 一応サーバがある環境なのですが、Accessで作成したmdbは サーバの誰でもアクセスできるフォルダに置き、みんなが利用 できるようになっています。 しかし、これでは悪意のある者がmdbのあるフォルダにアクセスし mdbをそのままコピーして持っていってしまうことができます。 又、削除してしまうこともできます。 そこで、mdbのテーブル部分をMSDEを利用して、アップサイジングし 各クライアントにはadpファイルを設置しようかと思っています。 これであれば、データはサーバのSQLサーバ(MSDE)の中なので 心配ないと思っていますが、どうでしょうか。 それほど知識のない者でも、データを取り出せたり するのでしょうか。 宜しくお願いします。

  • クライアントサーバの運用方法

    (今朝、別なカテゴリに投稿したのですが・・・再質問させていただきます。) 1台のPCで業務システム(Access2000)を運用していますが、2台増え3台で運用することになりました。また、それとは別にサーバ機(Windows2000Server)があります。 最終的にはMSDEに置き換えるつもりなのですが、時間がかかりそうなので、とりあえずテーブルのみをMSDEにアップサイズし、クエリー、フォーム、レポートをMDBのままODBCでテーブルに接続し運用しようと考えています。 そこで質問なのですが・・・ ・この方法でクライアント/サーバ型になるのでしょうか? ・そもそもこの方法で良いのでしょうか? ・テーブルのみのMDBをサーバに置き3台のPCで共有する方法と大差ないのでしょうか? *速度アップは望んでいません。今までと大差なければ問題ありません。 以上よろしくお願いします。

  • Accessの有効なメンテナンス方法は

    現在Accessで会社の業務アプリケーションを作成しています。 ファイルサーバのフォルダに作成したmdbファイルを置き、各クライアントには、デスクトップにmdbのショートカットを配置してあります。 しかし、最近mdbのサイズが大きくなり、たまにファイルが破損するという現象が起きるようになりました。 そこで、mdbをテーブルとそれ以外に分け、テーブルのみのmdbをサーバに置き、テーブル以外のmdbをそれぞれのクライアントにコピーしました。 これで少しは改善すると思うのですが、この業務用アプリケーションはかなり頻繁に改良/修正が行われます。今までは、サーバに置いてあるmdbを修正するだけで良かったのですが、今回各クライアント(20台)にテーブル以外(クエリ・フォーム・レポート等)のmdbをコピーして運用しているので、一度修正が発生すると、この各クライアントのmdbを更新しなければなりません。 これはかなり手間がかかってしまうので、なんとか違う運用方法がないか、いろいろ検討しています。 実際に作業するのは私一人です。 一人でも20台のクライアントのmdbを簡単に更新できる方法はないでしょうか。 宜しくお願いします。