ちくのう症(蓄膿症)は「菌」が原因!?

Access2013で、フロントエンドとバックエンドにファイルを分割し、ネットワーク上にバックを配置して、最高三人ぐらいの人数で使用するような形をとろうかと考えています。

この場合、アクセスはこわれたりすることはありうるのでしょうか?
また、普段のアクセスのメンテナンスの仕方について
ACCESSは、データの最大許容量が2GBとありますが、これに対する対応として、どのようなやり方があるか知りたいです。(レコードを削除したりするのではなく違う方法で)

私が考えているのに、MS SQL Serverに移行するという手段があります。
その他の対応方法を知りたいです。

よろしくお願いします。

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

A 回答 (4件)

>何しろ、ITの担当が私だけですので。

1人で全部作っていますから。

私も、設計からプログラミング、導入時のレクチャーを一人で担当してきました。各種伝票のレイアウトに印刷発注、事務所と工場のレイアウトの設計、原価計算の仕組みから売上計算システムの改変。超片田舎なもんで地元のソフトハウスにも、この手の開発経験者はゼロ。まあ、でも、一人でもできました。質問者もできますよ。

Q、(1)(2)については、どのような設計をされていましたでしょうか?
A、生データの編集とインポートを行うプログラムで対応。

出力部門によって生データのどれとどれが必要なのかは大きく違ってきます。ですから、各担当部署は、生データ蓄積データベースから適当な時間を見計らって必要なデータを利用しやすい形に加工しつつインポート。加えて、独自に入力すべきデータの入力処理を行った後に、必要な演算と出力を行ってきたと記憶しています。なお、生データ蓄積PCと各部門PCとは、サーバーで共有すべきデータについても吐き出していたんじゃーないかと・・・。

>バッチのようなものを作り、それを深夜実行する。

これは、MS-DOS時代のやり方。今の時代、どんなに大量のデータであっても数十秒で加工しつつインポートすることができると思いますよ。

PS、できれば的を絞って再質問されて本当のプロからのアドバイスを!
    • good
    • 0
この回答へのお礼

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

回答者様も、ご自分で全部お作りになられていたのですね。関心させられました。

取り敢えず、今の段階では、受注から工事発注、一受注毎の生産、請求処理まで作りたいと思います。
その後、恐らく在庫管理システムを別DBでつくろうかなと。
その後・・・

今後共、よろしくお願いします。

お礼日時:2014/12/03 18:01

例えば、



1. 受注 + 見積 + 精算 + 請求(1受注単位)→テーブルと、フロントに分ける
2. 在庫管理 →テーブルと、フロントに分ける
3. 経理(月単位の入金確認、支払確認)→テーブルと、フロントに分ける

というふうに。

まあ、そういうことです。

が、分割・分散すれば、(その程度に応じて)それぞれのシステム間の相互参照、データ交換を必要に応じて必要なだけ実現するのか?という難題が生じます。それに、サーバーのみにデータベースを置くのでは必要とあらば幾つかの通常のWindowsマシンにもデータベースを配置することも視野に入れる必要があります。

私の場合は、MS-DOSデータベース⇒UNIXデータベース⇒Windows NT+Windows版データベースと3代を経ての分割・分散でしたから、割とスムーズに設計できました。が、質問者が、仮に初めてだとすると、最初から、SQL Serever での非分散・分割型が良いかもしれません。

なお、私は、プロのプログラマではありませんので・・・。全体に「ふーん!」程度で読み流されたがいいですよ。(決して、適当に回答している訳ではありませんが・・・)

この回答への補足

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

>>1. 受注 + 見積 + 精算 + 請求(1受注単位)→テーブルと、フロントに分ける
>>2. 在庫管理 →テーブルと、フロントに分ける
>>3. 経理(月単位の入金確認、支払確認)→テーブルと、フロントに分ける
>>というふうに。

>まあ、そういうことです。
>が、分割・分散すれば、(その程度に応じて)それぞれのシステム間の相互参照、
>データ交換を必要に応じて必要なだけ実現するのか?という難題が生じます。

個々で、私が考えたのは次の2点です。
1)データのやりとりの仕方
2)複数の分割されたDB間で、互いのテーブル情報をどのような形で参照するか

1)については
 a)バッチのようなものを作り、それを深夜実行する。
 b)アクセスで何か処理をした時に、他のDBに反映させる。
2)については
 a)必要なDBの必要なテーブルのリンクテーブルを作り使用する
 b)PGで、他のDBのデータを参照する

1)に関して
バッチの実行とエラーが発生した時のメンテナンスの作業などを考えると、非常に大変な気がします。何しろ、ITの担当が私だけですので。1人で全部作っていますから。
(b)も、反映漏れが出てくる可能性を考慮すると、やはりするならバッチかなと思いますが。
もしくは、分割はセずに、その後、SQL Serverに移行するのもありかと考えています。

2)については
 aのリンクテーブルを作ると、そのデータ容量分、ファイルの量が増えそうな気がしますが実際には、増えるのでしょうか?試してみなくてはいけませんが。

この(1)(2)については、f_a_007さんは、どのような設計をされていましたでしょうか。

よろしくお願いします。

補足日時:2014/12/03 09:23
    • good
    • 1

http://otndnld.oracle.co.jp/document/products/or …

いわゆる分散型データベースを模したということです。

1、営業・顧客よりの受注データベース。
2、工場への生産指示・売上管理データベース。
3、CAD・CAMのフロントデータベース。
4、在庫管理データベース。

UNIXデータベース⇒Windowsデータベースへの転換時に、いわゆる分散型データベースを模したということです。当時は、「WindowsやAccessは遅くて使い物にならない」と酷評されていました。でも、UNIXデータベースの後継システムは必要。分割・分散は苦肉の策ですた。

大雑把に言えば、

(1)生のデータを単純に蓄積するデータベース。
(2)生データからそれぞれに必要な部分をインポートし加工・出力するデータベース。

に分割したとも言えます。

この回答への補足

ご回答ありがとうございます。
ご指摘の1~4をみると、どうも、役目の違うテーブル自体を別々のDBにわけて、しかも、それぞれに、フロント + バックエンドを作るというように聞こえますが、そうしてもよろしいのでしょうか?

例えば、
1. 受注 + 見積 + 精算 + 請求(1受注単位)→テーブルと、フロントに分ける
2. 在庫管理 →テーブルと、フロントに分ける
3. 経理(月単位の入金確認、支払確認)→テーブルと、フロントに分ける

というふうに

ややこしいですが・・・

よろしくお願いします。

補足日時:2014/12/02 19:44
    • good
    • 0

Q1、この場合、アクセスはこわれたりすることはありうるのでしょうか?


A1、こわれた経験はありません。

が、こわれることあると思いますよ。
私が一番に重要視したのは、次の2点です。

1、不意の停電に備えてバックアップ電源を用意する。
2、夏冬の長期休み明けの再起動は室温が安定してから。

なお、バックエンドのPCのDBMは一日一回はバックアップしてクラッシュに備えていました。

Q2、ACCESSは、データの最大許容量の対応策。
A2、分割。

私の場合は、分割という対応を基本にしました。ですから、まず、一番に開発したのは、コントロールパネルと酷似したメニューシステム。そういうメニューの存在を Microsoft が、Windows アプリの基本要素だと言明していたので・・・。

>私が考えているのに、MS SQL Serverに移行するという手段があります。

これは、いいですね。経験では、52倍速で動きます。ただし、Access2013では、あのADPのサポートが中止されました。ですから、ODBC接続に戻せば少し遅くなるかも知れませんね。もちろん、ハードの進歩で帳消しかも・・・。

PS、最新のWindowsPCよりも350MZのNT機がサクサク動く!

SCシステムを構築する場合、やはり、重要なのはサーバー機の性能とOS。「最新のWindowsPCよりも350MZのNT機がサクサク動く!」ということもありえます。一応、サーバー機の性能とOSの検討の必要性も・・・。

この回答への補足

ご回答ありがとうございます。
すみませんが、この「A2、分割。」と書かれているのは、フロントとバックエンドに分割すると言う意味でしょうか。
データ容量が2GBの制限がある場合に、分割する方法とは、どのようなことなのでしょうか。

よろしくお願いします。

補足日時:2014/12/02 13:43
    • good
    • 0

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

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

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

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

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

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

QACCESSに同時アクセス(編集)をしたい

教えてください。
ACCESSのDBに複数のユーザが同時にアクセスして、
データを追加・編集したいのですが、
やはり、不可能でしょうか?

Aベストアンサー

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」

というのがありますから、最初に作ったdb1をたどり、リンクしたいテーブルを
選択します。

こうすることにより、db2にdb1のテーブルがリンクされ(リンクテーブルと
呼ばれます。アイコンが通常のテーブルと違います。)、db1に格納された
データをdb2で編集することができます。

db2で、db1からのリンクテーブルを元にクエリーを作成することもできます。
リンクテーブルに対してできないことはテーブル構造の変更くらいで
他のことはだいたいできると思っていいかと思います。

このような形をとれば、ローカルエリアネットワーク内の複数のコンピュータ
から同時に同じアクセスデータベースにアクセスすることは可能かと思います。

このやり方にはおそらく問題もあるだろうと思うのですが、昔私がやって
いた頃は、特段支障もなく業務を行なうことができました。問題は、これを
読んだ他の誰かが指摘してくださるかと思います。

同じレコードに複数ユーザが同じタイミングでアクセスするとややこしい
ことになります。これを回避するためには、db2にワークテーブルを備えておき、
リンクテーブルからレコードを一度db2に格納し、編集を終了したのちに
リンクテーブルのレコードを削除し、ワークテーブルで編集したレコードを
リンクテーブルに追加する、などのルーティンをマクロやVBAで構築するのが
よいかと思います。私はそのようにしていました。

他に、ADOを使う方法などもあります。方法はいくつかありますから、
少し研究してみるといいですよ。(^-^)

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」
...続きを読む

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

QAccessセキュリティ設定でのバックエンドデータ保護

 Accessを使ったアプリケーションによる社内業務改善、初挑戦の者です。

 Access2003で開発したアプリケーションを用いて社内LAN上でデータベース
を共有するため、セキュリティウィザードによって作成されるショートカットを
社内ユーザに配布して運用しています。
 ところが、配布したショートカットのプロパティはユーザが覗くことができ、
そこには実体ファイルの所在がフルパスで記述されている為、これをたどれば
ユーザが実体ファイルに直接アクセスすることができてしまうことに、きづき
ました。
 せっかくセキュリティ設定しても、改ざん(意図はなくても誤操作を含め)
や破壊のリスクがある為、なんとかしたいと考えています。
 回避する方法はないでしょうか?

 なお、アプリケーションファイルはテーブル以外のオブジェクトを含んだ
フロントエンドと、データベース本体(テーブル)のみを含むバックエンドに
分割しており、上記のセキュリティウィザードはフロントエンドに適用して
作成したものです。
 フロントおよびバックエンドのmdbファイル、およびセキュリティ設定の
mdwファイルはいずれも、関係ユーザのみがアクセス可能な社内LAN上の
特定フォルダに置いています。
 万一所在が知られても、セキュリティ設定されたフロントエンドファイルや
セキュリティ設定ファイルは開けないので良いのですが、バックエンドファイル
(データそのもの)が開かれて改ざんされてしまうことを危惧しています。
 つまりファイルが消されてしまう事故は気付くので良いのですが、データの
改ざんは、気付かずに運用継続されてしまう為、安心して運用ができません。

 回避方法のご教示を、どなたかよろしくお願い致します。
 
以上

 Accessを使ったアプリケーションによる社内業務改善、初挑戦の者です。

 Access2003で開発したアプリケーションを用いて社内LAN上でデータベース
を共有するため、セキュリティウィザードによって作成されるショートカットを
社内ユーザに配布して運用しています。
 ところが、配布したショートカットのプロパティはユーザが覗くことができ、
そこには実体ファイルの所在がフルパスで記述されている為、これをたどれば
ユーザが実体ファイルに直接アクセスすることができてしまうことに、きづき
まし...続きを読む

Aベストアンサー

遅くなりました、No.1~3のDexMachinaです。

> (注)2.2で、空のデータベースにインポートするという方法

すみません、職場で作成したデータベースでは、ワークグループ
管理をまだ適用しておらず、管理用のツールだけ先行作成した
状況で、その件は完全に忘れていました(汗)
大変失礼しました。


> 結果 ⇒ 別の他者は開けてしまった。
> つまり現状、開ける人と開けない人が出てきてしまいました。

こちらで確認した限りでは、新規データベースへのインポートにより、
セキュリティウィザードを適用した端末以外から開いた場合でも、
データベースに対する『開く/実行』の設定が正しく反映される
(=権限がない旨のメッセージが出て開けない)結果となりました。

念のため、こちらで行った操作を以下に記述します。
なお、前の回答ではショートカットを使用した起動方法をご紹介
しましたが、上記のテストは「既定のワークグループ情報ファイル
を変更」する形で行いました。
(No.3の冒頭と重複しますが、以下で改めて説明します)

1)Windowsのスタートメニュー等からAccessアプリケーションを起動
2)メニューで「ツール(T)→セキュリティ(T)→ワークグループ管理(G)」
 を選択して『ワークグループ管理者』ダイアログを開く
3)『参加(J)』ボタンをクリックして『ワークグループ情報ファイル』
 ダイアログを開く
4)『ワークグループ(W)』欄のアドレスを、メモ帳などに記録
 (後で元に戻すため)
5)『参照(B)』ボタンをクリックしてファイル選択ダイアログを開き、
  以前にセキュリティウィザードで作成したMDWファイルを開く
  ※一般ユーザーにデータベースを開く権限を与えていないもの。
6)「3)」のダイアログに戻ったら『OK』ボタンをクリック
 (ワークグループに参加したことを知らせるメッセージあり)
 ※これで、既定のワークグループ情報ファイルが変更されます。
7)「2)」のダイアログに戻ったら、『OK』ボタンをクリックした後、
 念のためAccessを一旦終了
8)Windowsのスタートメニュー等から、再度Accessを起動
9)『新規作成』ボタンをクリックするなどして、空のデータベースを
 作成
 →『新しいデータベース』ダイアログで『作成(C)』ボタンをクリック
  すると、『ログオン』ダイアログが開くので、管理権限を持つIDで
  ログオン
10)新規データベースが開いたら、既存のデータベースから適当に
  テーブルなどをインポートしたら、データベースを閉じる
11)「2)~6)」と同様の操作を行い、「4)」で記録しておいたワーク
  グループに設定を戻した後、新規作成したデータベースを開く
⇒【こちらでの確認結果】
  開く権限がない旨のメッセージが表示されることを確認
12)LAN上の適当なところに、新規作成したデータベース(MDB
 ファイル)をコピーし、他のユーザーの端末から開いてみてもらう
⇒【こちらでの確認結果】
  作成した端末以外に3機で確認した限り、どの端末でも開く
  権限がない旨のメッセージが表示されることを確認
  (いずれもWinXP・Pro&Access2003)


この手順を行えば、No.3の補足欄で引用されている英文の末尾で
触れられている通り、Accessの既定のユーザーID「管理者(Admin)」
に対する全ての権限の許可は解除されるはずなので、端末によって
結果が異なることは、理屈的にはなくなる、と思われるのですが・・・(汗)

こうなると、No.2の補足で説明のありました「セキュリティウィザードを
適用したことがないにもかかわらず、バックエンドファイルへのウィザード
適用でエラーとなった」ことが、ちょっと引っかかってきます。

殆どあてずっぽうのようで申し訳ないのですが(汗)、インストールされて
いるAccessのウィザードに何らかの不具合が発生している可能性を
考慮して、Accessを一旦アンインストールしてみるのも手かもしれません。

遅くなりました、No.1~3のDexMachinaです。

> (注)2.2で、空のデータベースにインポートするという方法

すみません、職場で作成したデータベースでは、ワークグループ
管理をまだ適用しておらず、管理用のツールだけ先行作成した
状況で、その件は完全に忘れていました(汗)
大変失礼しました。


> 結果 ⇒ 別の他者は開けてしまった。
> つまり現状、開ける人と開けない人が出てきてしまいました。

こちらで確認した限りでは、新規データベースへのインポートにより、
セキュリティウィ...続きを読む

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

QAccessのフォーム上にレコード数とレコード番号の表示

Accessでクエリを元に表示するフォーム上で、テキストボックス等に関数を使って、レコード数とレコード番号を表示する方法がありましたら教えてください。

フォームの書式設定で「移動ボタン」の表示をすれば目的の事は出来るのですが、表示の大きさが調整できない為、とても見難いのです。

以上よろしくお願いします。

Aベストアンサー

レコード番号のコントロールソースを
=[CurrentRecord]
レコード数のコントロールソースを
=Count("*")-[NewRecord]
としてみてください。

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QMS Accessを共有した際にファイルが壊れるのを回避する方法

ちょっとしたツールをAccessで開発したいのですが、
Accessファイルを共有するとファイルが頻繁に壊れると伺いました。

そこで以下のような回避策を考えてみたのですが、
効果はありますでしょうか。
これでは、あまり意味がないとか、他に注意したほうが良い点等ありましたら、アドバイスいただければと思います。

なお、ツールは、50名位が使用(同時アクセスは3名~4名程度)予定で、
サーバ上にメインのmdbファイル(以下「サーバmdb」)を、各クライアントにもそれと連携するmdbファイル(以下「クライアントmdb」)を置くことを想定しています。

(1) データは全てサーバmdbで保持する。クライアントmdbには、入力用のフォームと、サーバmdbから取得したデータを一時的に保持するテンポラリのテーブルを持つ。

(2) クライアントmdbからサーバmdbにアクセスし、必要なデータをクライアントmdbにインポートする。

(3) クライアントmdbで、取り込んでデータをもとに、データの追加・修正を行い、当該データをサーバの所定のディレクトリにCSVで出力する

(4) サーバmdbは、日次で、所定のディレクトに配置された、クライアントmdbから出力されたファイルを読み込み、データを更新する

(5) (4)の読込み・更新作業中は、クライアントmdbからサーバmdbにはアクセスしない(外部ファイルで制御)

以上です。
要は、クライアントmdbが、直接サーバmdbを更新しないようにし、参照のみにするということです。

よろしくお願いします。

ちょっとしたツールをAccessで開発したいのですが、
Accessファイルを共有するとファイルが頻繁に壊れると伺いました。

そこで以下のような回避策を考えてみたのですが、
効果はありますでしょうか。
これでは、あまり意味がないとか、他に注意したほうが良い点等ありましたら、アドバイスいただければと思います。

なお、ツールは、50名位が使用(同時アクセスは3名~4名程度)予定で、
サーバ上にメインのmdbファイル(以下「サーバmdb」)を、各クライアントにもそれと連携するmdbファイル(以下「ク...続きを読む

Aベストアンサー

No.1です。
「同時アクセス」という言葉は実にあやふやな言葉です。おそらく質問者さんやNo2さんのいう「同時アクセス」は同時に複数人がそのシステムを使用しているという程度の同時アクセスだと思います。
ところが世の中は広くて通常同時アクセスは、同時にデータベースの更新をする人の数を言います。通常データベースの更新は0.1秒とかで終わりますのでその0.1秒を同時に複数人がいくような状況を言います。

No2さんのシステムでは、「クエリ(実際にはDoCmd.RunSQL)で更新」が同時におこる状況を言います。
これが、たまたまであれ同時におこるとやばいわけです。No2さんのシステムはおそらく同時に更新は起こらないシステムなのではないでしょうか?

「数台で同時に入力が発生するテーブルについては 入力用の作業テーブルをクライアント側のプログラム用のMDB内に持たせました。」まぁそれでもいいですけど、.NETアーキテクチャはこんな感じですよね。私はこれはとっても嫌いです。本気で複数人がデータを入力したければ、1行ずつを瞬間瞬間でINSERTしていくべきだと私は考えてます。つまりテーブルあるいはデータベースをロックする時間はセッションを越えてはありえないと思っています。理由は、入力用の作業テーブルを作るとその内容を他人によってすでに変更されてるかもしれないからです。こういう事態についてマイクロソフトは、エラーとして対処せよと言ってますが、そんなことできるわけないですよね。面倒ですもの。

No.1です。
「同時アクセス」という言葉は実にあやふやな言葉です。おそらく質問者さんやNo2さんのいう「同時アクセス」は同時に複数人がそのシステムを使用しているという程度の同時アクセスだと思います。
ところが世の中は広くて通常同時アクセスは、同時にデータベースの更新をする人の数を言います。通常データベースの更新は0.1秒とかで終わりますのでその0.1秒を同時に複数人がいくような状況を言います。

No2さんのシステムでは、「クエリ(実際にはDoCmd.RunSQL)で更新」が同時におこる状況を...続きを読む

Qaccess マクロでのフィルタの解除の方法

フィルタをかける時は、

***************************
アクション:フィルタの実行
フィルタ名:なし
Where条件式:[フィールド1]="あ"
***************************

で、できますが、
フィルタを解除する時はどのようなマクロを作ればいいのでしょうか?

VBAでやるなら、
Me.Form.FilterOn = False
をマクロでやりたいです。

アドバイスよろしくお願いします。

Aベストアンサー

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、マクロの『条件』欄に「~.FilterOn = True」の記述が必要、と)
  また、フォームのプロパティシートの『データ』タブにある『フィルタ』欄(VBAでの
  Me.Form.Filterに相当)に設定された文字列も削除されます。


b)フィルタの適用/解除を交互に切り替える場合
***************************
アクション:コマンドの実行
コマンド:フィルタの実行/解除
***************************
※当該フォームにフィルタが設定されていない場合、エラーとなります。
 (フォームのプロパティシートの『データ』タブにある『フィルタ』欄に
  フィルタとなる文字列が設定されていればOk:)
 (フィルタが適用済みなら解除、解除済みなら適用、となります)


因みに、マクロのデザインビューで、『デザイン』リボンの『表示/非表示』グループ
内にある『すべてのアクションを表示』をオンにしてもよいのでしたら、以下の
方法もあります。
(VBAでの方法をご存知の上でマクロで対応ということは、勤務先のセキュリティ
 方針によるものかと思いますので、この方法も不可かもしれませんが(汗))

***************************
アクション:値の代入
アイテム:Forms!フォーム名.Form.FilterOn
式:False
***************************

※サブフォームの場合の『アイテム』は以下のようになります:
 Forms!フォーム名!サブフォームコントロール名.Form.FilterOn

> VBAでやるなら、
> Me.Form.FilterOn = False
> をマクロでやりたいです。

ご質問の趣旨が「並べ替えは維持した状態で、フィルタだけ解除したい」という
ことでしたら、以下の方法で対応できます。


a)フィルタの解除専用の場合
***************************
アクション:コマンドの実行
コマンド:フィルタをすべて解除
***************************
※フィルタが適用されていない状態で実行するとエラーになります。
  (コマンドボタンで実行させる場合、フィルタ未適用時はボタンを使用不可
  にするか、...続きを読む

QAccessとSQL Serverの連携について

現在Accessで組まれているデータベースがあるのですが、複数人で入力をする必要が出てきたため、SQL Serverへ移行したいと思っています。
ただ、まだデータベースの内容が完全にFIXしておらず、項目に変更や追加が発生する可能性があります。

そこで、
●Accessを管理画面として使い、
●Access上で内容を変更したら、システム全体もその通り変わる
ような仕組みを作りたいのですが、可能でしょうか。
(完全にSQL Serverへ移行するのではなく、AccessとSQL Serverを連携させる?)

よき方法がありましたら教えて頂けましたら幸いです。
ちなみにコストはあまり大きくはかけられません・・。
どうぞよろしくお願いします。

(※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。なお、説明がおかしなこともあるかと思いますがご容赦ください。)

Aベストアンサー

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテーブルを(1)のSQL Serverに作成。
(3)ここからはPC側の作業
(4)ODBC接続を作成
(5)現行のAccessに(4)を使ってリンクテーブル作成。
(6)(5)のAccess内のクエリ、フォーム、レポートなどを必要に応じた修正を行う。
(7)動作確認
(8)各PCにODBC接続を設定&Accessファイルを配布。

概要はここまでです。如何でしょう、ご自分でできそうですか?

作業の概要はこの通りなんですが、サーバー機の選定とか"細かい"作業はかなり省略…というか書いてません書けません。特に(6)は実際にAccessファイルを見ないときっちりアドバイスはできませんし、作業ボリュームや難易度も見えてきません。…ということで(業者への発注は想定外のようですがw)業者も見積には難渋するでしょう。さくっと見積もりが出てくることもあるでしょうけど、かなりバッファをとった高額なお見積りかと。正直、見積もり作るのにお金がほしい内容です。

どうしてこんなことをグチグチ書いているかというと、大変申し上げにくいのですが、自称素人の方には難易度高め。業者に任せるか、類似のパッケージを探された方が、不具合などのリスクも軽減され、業務への影響も少ないかと。

ご健闘をお祈りしております。

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテー...続きを読む

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む


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

人気Q&Aランキング