出産前後の痔にはご注意!

ACCESSについて質問します。
アクセスのクエリーとかリレーションとかは理解できるレベルですが、
友人に頼まれて、簡単な会員管理システムを作ることになりました。

1度に要求するシステムを完成させるのではなく、
何度かに分けてバージョンアップしていく計画ですが、
その際に、アクセスの場合システムとデータが一つにまとまって
会員管理.MDBというファイルになってしまうと思います。

このような場合、一旦運用が始まってしまってある程度の
量のデータが入力され始めてしまった場合に、
システムのバージョンアップをするにはどのようにデータを
移行すればよろしいでしょうか?

因みに、アクセスでシステムを作成するのは初めてです。
よろしくお願いします。

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

A 回答 (3件)

s_husky です。



1、Access を起動し db1.mdb を作成する。
2、Table1 を作成する。
3、終了。
4、Access を起動し db2.mdb を作成する。
5、ファイル(F)-外部データの取り込み(G)-テーブルのリンク(L)
6、db1.mdb を選び、Table1 を選択する。

これで、db1のTable1は、db2のテーブルとして利用できます。
    • good
    • 0
この回答へのお礼

s_husky様へ
何度も丁寧なご回答ありがとうございます。
完全に理解できました。

お礼日時:2006/07/14 22:39

バージョンアップが前提ならば、バックエンドとフロントエンドに分離した方がいいです。


何、難しいことはありません。
テーブルのみのMDBとデータの入力・参照を行うクエリやフォーム等のMDBに分けるだけです。
リンクテーブルを利用します。
この場合、設計変更がなければ、フロントエンドを再配布すればよいだけです。

*****

ところで、テーブル設計を変更した場合の移行作業は、とても、ややこしいです。
ですから、段階を追って開発するにしろ、テーブル設計は万全でないと困ると思います。
    • good
    • 0
この回答へのお礼

またまた、速攻での回答ありがとうございます。

●「バックエンド」と「フロントエンド」の分離
それこそ、私の求めていたやり方です。
ACCESSのヘルプで調べましたが、「リンクテーブル」という
キーワードがありませんでした。
自分なりにもう少し調べて、MDBの分割保存が
出来るようにしたいと思います。

●「テーブルの設計変更」の件
ご忠告ありがとうございます。
頭ではテーブルの変更をする危険性について
分かっているのですが・・・・。
設計変更が発生しない様、じっくりと取組みたいと
おもいます。
ご指導ありがとうございました。

お礼日時:2006/07/14 17:31

こんにちは



単純に旧バージョンのデータを「エクスポート」して、
それを新バージョンのMDBへ「インポート」すればいいのでは?

私も今いつもそうやってバージョンを上げていっています(アクセスではありませんがデータはMDBを使っています)
    • good
    • 0
この回答へのお礼

速攻での回答ありがとうございます。

テーブルやクエリーは単独でエクスポート出来るのですね。
これなら私でも何とかできそうです。
ありがとうございました。

お礼日時:2006/07/14 17:25

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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

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

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

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

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

よろしくお願いします。

Aベストアンサー

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

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QAccessでテーブル名やクエリ名一覧の抜き出し

Accessでテーブルやクエリを沢山(100個以上?)使っております。

そこで、テーブル名やクエリ名の管理をしたいので、テーブル名(クエリ名)の一覧を抜き出したいのですが、どうすればいいのでしょうか?
または、そういうことは無理なのでしょうか??(;O;)

1個づつコピーペーストでテールブル名をエクセルに貼り付けて行こうかな?と思ったのですが、さすがに数が多すぎるので困っております。

できるだけ簡単な方法がいいのですが、もしなければVBAでもいいです。

おわかりの方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

・クエリを新規作成
・以下SQLを貼り付け
SELECT MSysObjects.Type, MSysObjects.Name, MSysObjects.Flags
FROM MSysObjects
ORDER BY MSysObjects.Type, MSysObjects.Name;
・デザインビューで表示
あとは、TypeとFlagsの条件を変えてあげれば一覧できます。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qアクセスのデータ型。数値型についてお聞きしたいのですが・・・

アクセスのデータ型。「数値型」ですが、「フィールドサイズ」に

(1)バイト型(0~255の範囲。小数点以下の数値は扱えない)
(2)整数型(-32,768~32,767の範囲。小数点以下は扱えない)
(3)長整数型(-2,147,483,648~2,147,483,647の範囲。小数点以下は扱えない)
(4)単精度浮動小数点型(-3.402823×10^38~3.402823×10^38の範囲。
            小数点以下の数値が扱える)
(5)倍精度浮動小数点型(-1.79769313486231×10^308~-1.79769313486231×
           10^308の範囲。少数点以下の数値が扱える)
(6)十進型(-10^28-1~10^28-1の範囲。小数点以下の数値が扱える)

と6種類決められますが、それぞれの「選び方の違い」と「その理由」を
教えてください。

たとえば、(1)~(3)くらいなら分かります。
扱える数値の桁数が違うということですよね?で、(1)~(3)を選ぶ時と(4)~(6)を
選ぶときで大きな違いというと、「小数点以下の数値が扱えるかどうか」
ですよね?そういう認識であっているか・・・ということと、上記の(1)~(6)を
「選び分ける必要がある場合」というのを教えてください。

なぜ、このような6種類に分かれているのか、人に説明しないとなりません。

よろしくお願い致します。m(_ _)m

アクセスのデータ型。「数値型」ですが、「フィールドサイズ」に

(1)バイト型(0~255の範囲。小数点以下の数値は扱えない)
(2)整数型(-32,768~32,767の範囲。小数点以下は扱えない)
(3)長整数型(-2,147,483,648~2,147,483,647の範囲。小数点以下は扱えない)
(4)単精度浮動小数点型(-3.402823×10^38~3.402823×10^38の範囲。
            小数点以下の数値が扱える)
(5)倍精度浮動小数点型(-1.79769313486231×10^308~-1.79769313486231×
           10^308の範囲。少...続きを読む

Aベストアンサー

整数型と浮動小数点型の大きな違いは、少数点以下の数字を扱えるかどうかで合っていると思います。
補足すると、浮動小数点型の方が整数型より大きい数字が扱えます。
長整数型なら21億くらいまでしか扱えませんが、浮動小数点型なら、兆、京・・・と非常に大きい数字が扱えるようになります。
有効数字として、どのくらいのケタを保持できるかが、精度になります。
倍精度は単精度の倍の精度です(当たり前ですが)

コンピュータが2進数で数字を表現していることはご存知のことだと思いますが、2進数で少数を表す場合、必ずしも10進数の少数と一対一に対応するわけではありません。2進数を10進数に直すのはnビットめの数字(0,1)*2のn乗の和ですが、少数の場合は-n乗になります。つまり1/2+1/4+1/8っていうような感じになります。0.75だったら、1/2+1/4で表現できますが、0.3とかになると1/4+1/32+・・・という感じできっちり表現しきれないので、0.299・・・という近似値になります。

それで問題があるようでしたら、十進型を使えば?ってことだと思います。

整数型と浮動小数点型の大きな違いは、少数点以下の数字を扱えるかどうかで合っていると思います。
補足すると、浮動小数点型の方が整数型より大きい数字が扱えます。
長整数型なら21億くらいまでしか扱えませんが、浮動小数点型なら、兆、京・・・と非常に大きい数字が扱えるようになります。
有効数字として、どのくらいのケタを保持できるかが、精度になります。
倍精度は単精度の倍の精度です(当たり前ですが)

コンピュータが2進数で数字を表現していることはご存知のことだと思いますが、2進数...続きを読む

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QAccessの構成をコピーしたい

こんにちは。
日報の入力にAccessを使用しています。
18年度に使用していたものを19年度も使いたいのですが
テーブル・クエリ・フォーム・レポートの
リレーションシップや構成はそのままで
データを消して、オートナンバーも1から始める
というようなことはできるのでしょうか?
データベースを作った人間が辞めてしまっているので
このような使いやすいデータベースをつくることが難しいのです。
お知恵ありましたら、どうぞ宜しくお願いします。

Aベストアンサー

新しいAccessデータベースを作成して、[ファイル]->[外部データの取り込み]->[インポート]で、コピー元のAccessデーターベースを指定します。
そして、「テーブル」「クエリ」…をそれぞれすべて選択してインポートします。
その時、オプションで「テーブルの構造のみ」を選択すればデータはインポートされません。

QAccessを開くと「排他モードじゃないので変更しても保存できない」との旨の表示が出てしまう。

「Access 2000」を使用して顧客管理用のデータベースを作成し、複数のパソコンで使用できるように原本を共有ドキュメントに入れて、ネットワーク上の他のパソコンではショートカットを作成し、それぞれがそのデータベースを開いたり編集したり出来るようにしています。

しかし、特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードでアクセスしていません。変更しても、後で保存できない可能性があります。」と表示され、中身を編集したり保存出来ないようになっています。

たしかに、「規定の開くモード」は「共有モード」になっており、排他モードにはしていないです。

この設定で会社の大多数のパソコンでは上記メッセージが出ることなくちゃんと編集ができるのに、どうして特定のパソコンだけこのようなメッセージが表示されて編集を保存できないのでしょうか?
現在の設定のまま使えるようにするための方法はありますでしょうか?

まだAccessを使い始めたばかりで、記載した情報も少ないかもしれませんが、何か分かりましたら教えてください。

「Access 2000」を使用して顧客管理用のデータベースを作成し、複数のパソコンで使用できるように原本を共有ドキュメントに入れて、ネットワーク上の他のパソコンではショートカットを作成し、それぞれがそのデータベースを開いたり編集したり出来るようにしています。

しかし、特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードでアクセスしていません。変更しても、後で保存できない可能性があります。」と表示され、中身を編集したり保存出来ないようになっています。

...続きを読む

Aベストアンサー

> 特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードで
> アクセスしていません。変更しても、後で保存できない可能性があります。」と表示

<可能性・1>
ご質問の「特定のパソコン」の『既定の開くモード』が「共有モード」で、「大多数のパソコン」では
「排他モード」になっているのだとすると、「現在の設定のまま」というのは難しいと思います。
(逆にいうと、ご質問の現象が『既定の開くモード』に起因したものなら、その設定の変更で対応
 できるはず、ということ)

なお、Accessの「排他モード」には、私が知る限り少なくとも2種類あります。
で、『既定の開くモード』で指定する「排他モード」であれば、Access2000では、実際には他の
人が使用中であっても、同じファイルを開くことができたと思いますので、まずはその設定を
変更することで問題が解決できないか、確認されてみてはいかがでしょうか。

2種類の排他モードについての参考として、以前の回答へのリンクを載せておきます:
http://oshiete1.goo.ne.jp/qa3688575.html
※念のため今回再試したところ、『既定の開くモード』の「排他モード」でも、重複起動させると
  「使用できませんでした」とのメッセージが返されました。(Access2003にて確認)
  もしかしたら、Office2003 SP2でこの辺りは修正が掛かったかもしれません。
  ただ、今回のご質問のAccess2000では、従来の動作のままのはずですので、試してみる
  価値はあるかと思います。


<可能性・2>
他の大多数のパソコンでも『既定の開くモード』が「共有モード」だとすると、上記の話は
成り立ちません。
・・・というより、同時に使用している場合、他のパソコンでも「後で保存できない可能性が」
とのメッセージが出るはずの状況です。(Accessの仕様として、そうなっているはず、と)

この場合は、念のため、他のパソコンのショートカットのリンク先が、本当にネットワーク上の
原本を開く形になっているか、確認してみてください。
というのは、Accessによるの運用方法として、「データを保存するテーブルのみのファイル」と
「フォームなど、テーブル以外のものからなるファイル」の二つを作成して、後者から前者に
テーブルのリンクを張る(リンクテーブル)、というものがあり、他のパソコンのショートカットが、
実は各パソコンにコピーされたファイル(フォームなど+リンクテーブル)にリンクしたもの、
という可能性が考えられるためです。
※これは、shocola_ttさん以外の方がそのデータベースを作成されたと想像しての回答です。

この構成の場合は、「特定のパソコン」にその原本のコピーを作成して、作業はこのファイル
で行う、という形にすれば、問題が解決すると思います。
(上記の通りなら、原本内にあるのはテーブルではなくリンクテーブルなので、入力/編集の
 対象となるデータ自体は共有されていることになります)

> 特定のパソコンだけそのデータベースを開く際に「現在、このデータベースは排他モードで
> アクセスしていません。変更しても、後で保存できない可能性があります。」と表示

<可能性・1>
ご質問の「特定のパソコン」の『既定の開くモード』が「共有モード」で、「大多数のパソコン」では
「排他モード」になっているのだとすると、「現在の設定のまま」というのは難しいと思います。
(逆にいうと、ご質問の現象が『既定の開くモード』に起因したものなら、その設定の変更で対応
 できるはず、というこ...続きを読む

Qテーブルデータのエクスポートについて

質問です。

VBAで、Access2003をSQL,DAOで操作しようとしています。

a.mdbのテーブルデータを、b.mdbのテーブルにエクスポートしたいのですが、やり方がわからず困っています。

ちなみに私はVBA未経験で、1週間前からVBAを使っています。
すみませんが、データを含めてエクスポートする方法を教えてください。

Aベストアンサー

必要な事
何と言うテーブルをエクスポートするか。
エクスポート先(b.mdb)のフルパス。
エクスポート先でのテーブル名(同じでもいいし変えることもできる)。
例)
テーブル1を"c:\b.mdb"の"テーブル2"と言う名前のテーブルにエクスポートする場合。
Sub sample()
DoCmd.TransferDatabase acExport, "Microsoft Access", "c:\b.mdb", acTable, "テーブル1", "テーブル2"
End Sub

もしも既にb.mdbにテーブル2がある場合は上書きされて消えてしまう。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング