プロが教えるわが家の防犯対策術!

★はじめまして
会社でアクセスを使用している初心者です。
社員データーをアクセスファイルで管理しています。
10人が一つファイルを持って使用しています。
なので、ファイル数は10です。
フィールド(項目)数が128です。
全てのファイルは同じ項目です。

【問題】
(1)社員データーを検索する際に、全てのファイルを開いて検索すると非常に時間がかかります。
(2)社員データーをCSVでエクスポートして、EXCELで集計・分析する際に全てのファイルからエクスポートすると時間がかかります。

【対策】
(1)全てのファイルをまとめようと
まとめファイルを作成して
全てのテーブルをリンクして(10ファイル)
ユニオンクエリでまとめようと思いました。

【結果】
エラーです。
『定義されているフィールドが多すぎます』と表示されます。

【教えてください】
(1)フィールドが多すぎるとユニオンクエリは使用できないのですか?
(2)他に全てのファイルをまとめる方法はないのでしょうか?

ご教授お願いします。

A 回答 (5件)

以下の方法では、駄目ですか?



SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2
UNION
SELECT * FROM TABLE3
UNION
SELECT * FROM TABLE4
UNION
SELECT * FROM TABLE5
UNION
SELECT * FROM TABLE6
UNION
SELECT * FROM TABLE7
UNION
SELECT * FROM TABLE8
UNION
SELECT * FROM TABLE9
UNION
SELECT * FROM TABLE10
    • good
    • 0
この回答へのお礼

回答有難うございます。

教えていただいた方法で、試してみたのですが

エラーです。
『定義されているフィールドが多すぎます』と表示されます。

他に方法はありますか?

宜しくお願いします。

お礼日時:2007/10/26 12:27

そもそも、同じ構造のテーブルを10個使うなんて設計はしないでしょう。


列[所有者番号]などの列があれば統合できるんじゃないですか?
それに、少なくとも、バックエンドとフロントエンドで擬似的なC/Sシステムで開発。
サーバーにはワークステーションを採用。
そうしないと使えたもんじゃないでしょう。
以上の改変に要する日数は1、2日。1週間もあれば十分。
    • good
    • 0
この回答へのお礼

回答有難うございました。

ご教授お願いします。

『列[所有者番号]などの列があれば統合できるんじゃないですか?』は具体的にどのようにすればよろしいでしょうか

教えてください。宜しくお願いします。

お礼日時:2007/10/26 12:30

10個のテーブルの構造が同じという事なので、1つのテーブルにデータをまとめるのが良いのではないでしょうか?


その時、Mdbは別にして実行するMdbとはリンクテーブルにしておくと、良いと思います。
アクセスのデータベースは壊れる事もありますので、データMdbのバックアップを取るのも簡単になりますよ。
現状、わざわざ10個に分けている理由があれば(例えば支店毎にテーブルを分けているなどの場合)識別用のフィールドを追加する必要はあると思います。
後、集計をエクセルに出力しているそうですが、アクセスでやった方が簡単で早いのではないでしょうか?
KeyやIndexなども有効に貼っておかれるとアクセスでの検索の処理速度は早くなります。
外部のデータベースへのテーブル作成クエリーや追加クエリーの実行が可能ですのでデータMdbを作成して、そこへ現在使用しているMdbからデータを追加していけば簡単に出来ますよ。

この回答への補足

回答ありがとうございました。

アクセス初心者で申し訳ございません。
少し補足をさせていただきます。

【補足】
社員データーをアクセスファイルで管理しています。
10人が一つファイルを持って使用しています。
1ファイルあたりの社員データーは300名です。
合計3,000名のデーターです。
ファイルは各支店ごとに分けて使用しています。
フィールド(項目)数が128です。
全てのファイルは同じフィールド(項目)です。
作業内容は社員データーの新規入力・データーの変更(編集)・データーの削除の3つです。
社内サーバーを使用して、各支店で入力しています。
アクセス2003を使用しています。

【回答内容の確認】
確かに、現在の使用方法があまり良くないのではと感じています。
10ファイルのテーブルに300名のデーターを入力編集を行うより、1つのファイルをリンクして入力したほうが良いと思います。
ただ、先輩方が
『アクセスは同時入力ができない』
『同時入力・編集作業をするとデーターが壊れる』
『データーの要領が重くなり作業効率が悪くなる』と聞いているので

1つのファイルに3,000名のデーターが入った状態で
テーブルをリンクしたファイルを10作成して、
同時入力・編集・削除
作業スピード・データー破損は大丈夫でしょうか?

もう一度ご教授お願いします。

補足日時:2007/10/26 22:54
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

間違って、『この回答への補足』に入力してしまいました。

申し訳ございません。

お礼日時:2007/10/26 23:15

<tab_1>


ID___fld_1___fld_2
1____A_______あ
2____B_______い

<tab_2>
ID___fld_1___fld_2
1____C_______う
2____D_______え

この2つをフォームのイミディエイトウインドウで統合することにします。

<tab_new>
ID___owner__fld_1___fld_2

[イミディエイト]
? CnnExecute("INSERT INTO tab_new SELECT * FROM tab_1;")
True

これで、<tab_new>は次のようになります。

ID___owner___fld_1___fld_2
1___________0__A_______あ
2___________0__B_______い

次に、列[owner]の値を1に設定します。

[イミディエイト]
? CnnExecute("UPDATE tab_new Set owner=1;")
True

ID___owner___fld_1___fld_2
1___________1__A_______あ
2___________1__B_______い

同じ、要領で tab2 も tab_new へ追加。

[イミディエイト]
? CnnExecute("INSERT INTO tab_new SELECT * FROM tab_2;")
True

ID___owner___fld_1___fld_2
1___________1__A_______あ
1___________0__A_______あ
2___________1__B_______い
2___________0__B_______い

※[ID]は予め重複を許可!

今度の列[owner]の値を2に設定する要領は少し違います。

? CnnExecute("UPDATE tab_new Set owner=2 WHERE owner=0;")
True

ID___owner___fld_1___fld_2
1___________1__A_______あ
1___________2__A_______あ
2___________1__B_______い
2___________2__B_______い

最後に、

? CnnExecute("UPDATE tab_new Set ID=ID+Owner*10000;")
True

ID__________owner___fld_1___fld_2
10001___________1__A_______あ
10002___________1__B_______い
20001___________2__A_______あ
20002___________2__B_______い

と[ID]をユニークにして'主キー'宣言。

※[ID]を完全連番にしたい場合は、別に再質問されることにして、こんな感じです。
※各社員は、列[owner]が一致するレコードだけを参照するように制限。

こんな感じてよければ、肝心のCnnExecute関数を補足します。
クエリでやってもいいですが、間違った場合など実にヤヤコシイ。
イミディエイトウインドウでSQL文を打ち込むのが一番簡単です。
    • good
    • 0

#3です。


1つのテーブルを10名でリンクを貼って使用する事は実際可能です。
但し、テーブルへのデータ登録はどの様な方法を取られていますか?
直接テーブルを開いて書き込む方法や、フォームから入力していてもテーブルと直結しているような方法だと、おっしゃるように誰かがテーブルを開いていると使用中という事になってしまうかもしれませんね。
通常、3000名ものデータを扱っているのであればデータの保守メンテの面から言っても、直接テーブルに入力するような方法ではなく、1レコードずつ更新するようなフォームが用意されているのではないかと推測します。
(もしそうではない場合は、変更された方がいいと思います)
その場合であれば同じ社員データを別々の人が同時に更新しに行かない限り問題はありません。
アクセスでテーブルを作成する場合(ワークテーブル以外)は、ほとんどの場合このようにデータMdbとプログラムMdbを分けて作成していますが、今まで何ら問題が発生した事がありません。(150名くらいのユーザーで)
もちろんエラー発生時にはロールバックするような記述にしておくと、データは守られますので更に問題ないでしょう。
    • good
    • 0

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

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