【最大10000ポイント】当たる!!質問投稿キャンペーン!

以前、Microsoft Answers で下記の質問をしていましたが、良い回答がなかなかつかないので、あらためてこちらで質問させていただきます。
http://answers.microsoft.com/ja-jp/office/forum/ …

最初の回答にあるSP1のアップデートが出るのを待っていました。
先日、SP1のアップデートが出たので、さっそくインストールしました。
しかし、ほとんど改善されず、せっかく購入したのに使えない状態です。
Microsoft に問い合わせても、「データ量が多すぎるのが原因、それ以上のことはわかりません」といった答えしか返ってきません。

困っています。どなたかぜひお助け願います。

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

A 回答 (5件)

#1補足です。



http://code.google.com/p/cowares-excel-hello/sou …

ここの 1,353行目に、mdbファイルを開き、
CurrentDb 相当のものを取得する記述があります。
周辺を見れば Access Object との関連は理解できると
思います。

これは Excel VBA ですが、 VBScript でも同じです。
参照設定の代わりに CreateObject になるぐらいです。

これらのキーワードがわかれば、
検索すれば、もっと丁寧に説明したページも出てくると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
URL 参考にさせいてただいて、わかりにくいところがあればまた補足します。

お礼日時:2011/07/03 12:54

レジストリですが64bit上の32bitAPの場合


[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Debug]
"JETSHOWPLAN"="ON"

の可能性があります。

この回答への補足

レジストリキーのWow6432がなく、Wow6432Nodeとなっているのですが、それでよろしいのでしょうか。
また、Engines以下にDebugがないのですが、どうすればよろしいのでしょう。
レジストリキーなどふだんさわることがないので、まったくわかりません。

補足日時:2011/07/03 22:31
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
レジストリキーを一度よく調べて、わかりにくいところがあればまた補足します。

お礼日時:2011/07/03 12:25

500万件のうち何件ぐらい抽出しようとしているのでしょうか?


結構多いのが、大量のデータ抽出をインデックスを使ったランダムアクセスで行って、CPUは空いていてI/O WAITを起こしているパターンです。

レジストリをいじることになりますが、JETで実行されるSQLの実行計画をファイルに出力することが出来ます。

http://monado.dtiblog.com/blog-category-35.html

ace形式で取得できるかは確認していませんがMDB形式なら

windows7 access 2010 では
レジストリキー
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Debug]
"JETSHOWPLAN"="ON"

にセットすると\Users\ユーザ名\Documentsに「showplan.out」が出力されます。
これで実際にどんなアクセスをしているか確認してはどうでしょぅ。

この回答への補足

抽出するデータ件数は多いときで3000件強です。

補足日時:2011/07/03 22:22
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
参考URL、レジストリキー、一度よく調べて、わかりにくいところがあればまた補足します。
 

お礼日時:2011/07/03 12:24

テーブルの構造はどうなっているでしょう?



[テーブル名]tbl01
[ID] オートナンバー型 インデックス はい(重複なし)
[日付] 日付/時刻型  インデックス いいえ
[コード] 長整数型  インデックス いいえ

にて提示いただいた下記のコードを実行し500万行にてテストしました。

Sub CreateT()
Randomize
Dim db As Database, rs As Recordset, i As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("select * from tbl01")
For i = 1 To 5000000
rs.AddNew
rs("日付") = #1/1/2011# + Int(1000 * Rnd)
rs("コード") = Int((1000 * Rnd) + 1)
rs.Update
Next
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub 

選択クエリ内に於いて下記の様なSQLを実行しました。
概ね5秒程度で結果が返ってきます。

"SELECT * FROM テーブル名 WHERE コード = " & コード & " ORDER BY 日付 DESC;"

しかし、[コード]フィールドのインデックスをはい(重複あり)になっていると
結果が返ってくるまで時間がかかり且つ安定しません。

私は、AC2000のJET内のことなので、ACEで64bitの場合は他の影響があるかもしれません。

この回答への補足

テーブルの構造ですが
 テーブル名 DATATABL

フィールド
 DATE 日付/時刻型 インデックス はい (重複あり)
 CODE 数値型 整数型 インデックス はい (重複あり)
 以下データ 数値型 テキスト型等 いずれもインデックスなしです

DATE とCODEがともに同じレコードはありません。

補足日時:2011/07/03 12:05
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
テストまでしていただいて恐縮です。

お礼日時:2011/07/03 12:08

オフィス2010も64bit環境も持っていません。



そのため突っ込んだ手助けは出来ませんが、
リンク先を読み、まだ試すべきものがあると思い、
以下に挙げます。

1. VBScript と Excel VBA で試す。

VBScript で同種のコードを試すことにより、
オフィス2010に固有の現象かどうかを確認できます。

Excel VBA は、さらにそれが Access 2010 VBA のみの
現象かどうかを確認する目的です。

VBScript で問題が起きないなら、明確にオフィス2010 VBA の
障害でしょう。

2. 日本語のみのテーブルを作って試す。

これは、フィールド名やクエリ文に日本語があることが
影響しているかどうかの確認です。
日本語固有の問題は現地開発者が気づかないので、
無視されがちだからです。

これで明らかな違いが出れば、
Access 2010 VBA の日本語資源の扱いで起きた障害と断定できます。

3. OpenRecordset に書いたクエリを、Access 側に製作し、
そのクエリを開く。

これで違いが出るようなら、クエリのコンパイル回りで発生した
障害だと考えられます。

1,2,3 のいずれかで、「遅くならない」ものを見つけることができれば、
ハードウェアとは無関係な、 Microsoft 製品のみを原因とした障害です、
と報告できると思います。

この回答への補足

1.について
VBScript の使い方、及び Excel VBA で ACCESS のデータの呼び出し方がよくわかりません。
 もう少しくわしくご説明いただけませんでしょうか。
 無知で申し訳ありません。

2.について
 リンクURLのSQL文は、わかりやすくするために一部日本語で書いていますが、実際はすべて英文字です。
 コード・・・CODE、日付・・・DATEなど

3.について
 リンクURLの中には書いていませんが、クエリーのデザインビューで作ったクエリーを実行しても、同じくらい時間がかかっています。

補足日時:2011/07/02 21:46
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
VBScript の使い方及び Excel VBA で ACCESS のデータの呼び出し方がわかればためしてみたいと思います。

お礼日時:2011/07/02 21:50

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

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

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

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

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

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

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の処理速度を速めるためにテーブルとそれ以外を分割してもああまり速くならないのですが・・・

Access2003を使用しています。
メンテナンス後保存をしたり、検索をかけたときとても時間がかかるので、データベースからテーブルだけを切り離す方法を試みてみようかと考えています。
テーブルとそれ以外のデータベースオブジェクトを分割する方法です。
試しにコピーをとったファイルで行ってみましたがあまり速度が速まったように感じません。
参考書を読むと、「大量のデータを蓄積するデータベースに威力を発揮する」と書いてあり、見本は300Mバイトになっています。
私がメンテナンスをかけているファイルは65MB程度です。
これぐらいの大きさだと分割する効力は低いのでしょうか?
他の方法を試みたほうがいいのでしょうか?
ちなみにCPUはあまり高くありません。
どなたかこの方面にお詳しい方がいらっしゃいましたらご教示ください。
よろしくお願いいたします。

Aベストアンサー

>MDBファイルを全部上書きすることになっているために時間がかかっているのかもしれません。
「なっているため」という言葉遣いは正しくなかったかもしれません。
「なるのかもしれないので」位の意味でした。 申し訳ありません。

No6の回答は憶測で書いています。(何の根拠もありません。)
コンピュータやプログラミングの専門家でもありませんし、
私のアクセスの経験もかわいいものですので、(97から)
「こう考える素人がいる」というくらいにとってください。

ちょっと考えてみましたが、mdbのデータファイルの構造は以下のようになっているそうで、
http://www.mrdb.ne.jp/technic/se_guide/d_fkouzo.htm
最適化を行うと
・データ部分のブロックが減る
・インデックスによる順番付けがなされる
ので検索に対するパフォーマンスがあがるということには異論はないと思います。

問題はフォームやレポートをいかに保存しているかですが、
やはり決まった単位のブロックを用意して、オブジェクトを書き連ねているのかなと思います。 
(前言を撤回することになりますが)そうだとすると、データ部分を切り離すことと
フォームのサイズを小さくすることは関連性がないということになり、
フォームをセーブするときの時間も、データを切り離したところでフォームを最適化しないと、
あまり変わらないということにもなりそうです。
データ部分のみが最適化されたmdbと、すべてのオブジェクトが
最適化されたものの保存時間を比べてみればヒントはつかめそうですが、、、
そのような実験にあまり意義を感じません。(そこまでアクセスを愛していません。) 

いろんなDBがありますが利用する際は定期的に最適化を行わないといけないのではないかと思います。
アクセスも例外ではないということです。

>テーブルは必ず別mdbにして、「閉じるときに最適化」していますので
これを行っていれば、保存に関してこれ以上の効率化は難しいと思います。(コーディングを変えない限り)
逆にこの状況で何らかの問題があるなら、
・データ構造は適正か?
・データにどうアクセスするか?
・コードをどう記述するか?
・ハードウエア(通信環境含む)は適正か?
これと共に、
・DBは適正か?
を診断しなくてはいけないと思います。

質問者さんに対してのアドバイスは、
・実運用中のものを開発する際は、別ファイル(コピー)を作りそちらに手を加える。(実データで開発を行うことは望ましくないと思う。)
・手を加えたものをリリースする前に最適化をする。
・実運用中のものには定期的(期間はdbの更新頻度やつくりにもよる)に最適化を行う。
・データに関しては、何らかの形で定期的にバックアップをとる。
以上のような行為が必要で、
それを怠ると、いつかきっと痛い目にあう(かもしれません。)
データとその他の部分を切り離すと、
・データファイルが破損する可能性が低くなる。
・上記のようなメンテナンスが行いやすくなる。
・他のdbへの移行がやりやすくなる。
というメリットがあります。

>MDBファイルを全部上書きすることになっているために時間がかかっているのかもしれません。
「なっているため」という言葉遣いは正しくなかったかもしれません。
「なるのかもしれないので」位の意味でした。 申し訳ありません。

No6の回答は憶測で書いています。(何の根拠もありません。)
コンピュータやプログラミングの専門家でもありませんし、
私のアクセスの経験もかわいいものですので、(97から)
「こう考える素人がいる」というくらいにとってください。

ちょっと考えてみましたが、md...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

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"...続きを読む

QSQLの速度をあげるには・・・

テキストファイルからキーワードを拾って
SQLをなげています
SQLの質問になってしまうかもしれません
いまはADO接続でやっています

Open ファイル as input......

SQL = select * from tbl where name like '%キーワード%'
execute(SQL)

レコードセットの値で処理をいろいろ・・・
Loop

もともとのDBの件数がものすごくおおくてselect文に結構な時間が
かかってしまいます。速度をあげるほうほうってあるのでしょうか
私にはおもいつかなくて・・・

こういったほうほうは どう? ってのがありましたら
おしえていただきたいのですが よろしくおねがいします。

Aベストアンサー

確かに・・・Like演算子・・・あまり使いたくないですね・・・
文字列比較は処理を遅くさせるし、増してや「=」ではなくLikeですから、膨大な時間がかかる恐れが・・・

ちなみにぼく自身、DB系を多くしています。今の仕事もDB系なのですが、元となるホストは他の会社が行っており、それにあわせて作らなければなりません。
で、そのホスト連携部分に文字列を比較しなければならない部分があるんですよ・・・・
自分の会社ならまだしも、他の会社がすでに設計済みのDBだから変えようがないのです。。。

まぁ愚痴っても仕方ないか・・・


なのでぼくも(不本意ながら)Like演算子を使用しています。


長い前置きはさておき・・・

本題のSQLのスピードなのですが、
http://homepage2.nifty.com/inform/vbdb/addnew.htm
こちらに面白い記述がありました。

AddNewにかかるスピードの検証で
Access データベースの場合: AddNew のほうが INSERT INTO より5倍以上速い
SQL Server の場合: INSERT INTO のほうが AddNew より 1.4倍 くらい速い
とあります。


たぶんで物を言ってはいけないと思うけど、言っちゃいます。

(1)もしDBがアクセスで
 >レコードセットの値で処理をいろいろ・・・
 のところがUpdate用のSQL文で処理を行ってる場合

 Recordsetをして、処理を行う


(2)もしDBがアクセス以外で
 >レコードセットの値で処理をいろいろ・・・
 のところがRecordsetで処理を行ってる場合

 Recordsetをせずに、UPDATE用のSQLを実行する


未検証なのですが多分イメージとして、こういうパターンが各DBに適してるのかな?

すでにこのパターンなのであれば、意味ないですね(^^;)

参考URL:http://homepage2.nifty.com/inform/vbdb/addnew.htm

確かに・・・Like演算子・・・あまり使いたくないですね・・・
文字列比較は処理を遅くさせるし、増してや「=」ではなくLikeですから、膨大な時間がかかる恐れが・・・

ちなみにぼく自身、DB系を多くしています。今の仕事もDB系なのですが、元となるホストは他の会社が行っており、それにあわせて作らなければなりません。
で、そのホスト連携部分に文字列を比較しなければならない部分があるんですよ・・・・
自分の会社ならまだしも、他の会社がすでに設計済みのDBだから変えようがないのです。。。

...続きを読む

QAccess 2010動きが遅い

先日下記の質問をさせて頂きました。

http://oshiete.goo.ne.jp/qa/7952942.html

色々試しました。
Office2010が入っているWin7 Pro、でAdminユーザーを2つ作り(AとB)試しました。
AではAccessのレスポンス、動きが遅く、Bでは問題ないスピードで動きました。

友人がVBA7.0が怪しいと言ってくれたため、確認していくとレジストリHKey_CURRENT_User\Software\Microsoft\VBA\7.0\Commonのキーが違います。CltShowSelect, Dock, DsnShowSelected, FolderView, MainWindow, MdiMaximized, OBGroupMem.., PropertiesWind.., Tool, UIAccessだけのものの動きは非常に遅い(A)。
上記にAlignToGrid, AutoQuickTip2, AutoStatement2, AutoValueTips2, BackGroundCompile, backGraundProjectLoad, CollapseWindow, CompileOnDemand, DragDropInEditor, EndProcLine, FontCharSet, FontFace, FontHeight, GridHeight, GridWidth, RequireDeclaration, SaveBeforeRun, ShowGrid, ShowToolTips, UpgradeVBX(添付データ参照)が入っているものは問題なく動きます(B)。

いくつもAdminユーザーを作って試しましたが、動くものと動かないものができます。動かないもののレジストリキーを消して動かしていると再びCltShowSelect, Dock, DsnShowSelected, FolderView, MainWindow, MdiMaximized, OBGroupMem.., PropertiesWind.., Tool, UIAccessだけのものになり、動いたものは消しても元にもどります。
同じPCをですので入っているソフトウェアは同じです。なぜこのような事が起きるのでしょうか。どなたが経験者はいらっしゃいませんか。また動くレジストリに変更出来る方法はありますでしょうか。

先日下記の質問をさせて頂きました。

http://oshiete.goo.ne.jp/qa/7952942.html

色々試しました。
Office2010が入っているWin7 Pro、でAdminユーザーを2つ作り(AとB)試しました。
AではAccessのレスポンス、動きが遅く、Bでは問題ないスピードで動きました。

友人がVBA7.0が怪しいと言ってくれたため、確認していくとレジストリHKey_CURRENT_User\Software\Microsoft\VBA\7.0\Commonのキーが違います。CltShowSelect, Dock, DsnShowSelected, FolderView, MainWindow, MdiMaximized, OBGroupMem.., Properti...続きを読む

Aベストアンサー

新規ユーザーを作って試してみました。

Access(Office)を一回も開いていない状態
HKEY_CURRENT_USER\Software\Microsoft 下にVBA というキーは無し

Access を立ち上げてテーブルを一個だけ作成
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.0\Common まで出来て中味は↓だけ
名前 種類データ
(既定)REZ_SZ (値の設定なし)
Access閉じても変化なし

Access立ち上げて標準モジュールに MsgBox "" だけのSub Module作成
実行しても変化なし
Access終了後
(既定)、CtlsShowSelected、Dock、DsnShowSelected、FolderView、MainWindow
MdiMaximized、OGGroupMembers、PropertiesWindow、Tool、UIAccess
に増える。
(多分、モジュールの保存時に出来るものと思われるが確認漏れ)

Access立ち上げてVBEのツール→オプションで、『自動構文チェック』のチェックだけ
外す。直後に
(既定)、「AlignToGrid」、「AutoQuickTips2」、「AutoStatement2」、「AutoValueTips2」、
「BackGroundCompile」、「BackgroundProjectLoad」、「CollapseWindows」、「CompileOnDemand」、
CtlsShowSelected、Dock、「DragDropInEditor」、DsnShowSelected、「EndProcLine」、
FolderView、「GridHeight」、「GridWidth」、MainWindow、MdiMaximized、OGGroupMembers、
PropertiesWindow、「SaveBeforeRun」、「ShowGrid」、「ShowToolTips」、
「SyntaxChecking」、Tool、UIAccess、「UpgradeVBX」
に増える。(「」内は増えた分)
Accessを再起動しても名前をその数には変化なし。

なお、本番環境だともう少し設定を変えてあるので36個ありました。
(既定)、AutoValueTips2、AutoQuickTips2、AutoStatement2、DragDropInEditor
RequireDeclaration、EndProcLine、CompileOnDemand、BackGroundCompile
FontHeight、FontCharSet、FontFace、GridWidth
GridHeight、ShowGrid、AlignToGrid、SaveBeforeRun
ShowToolTips、CollapseWindows、UpgradeVBX、BackgroundProjectLoad
PropertiesWindow、MainWindow、MdiMaximized、Dock
FolderView、Tool、CtlsShowSelected、DsnShowSelected
UIAccess、OBGroupMembers、UI、SyntaxChecking
CodeForeColors、CodeBackColors、OBSearchHeight

数の多寡は関係ないような気がします。。。
(根拠はまったくありません)
何もしないのに数がちょこまかと増減したらマズイとは思いますけど。
それにしても解せない。
同一PC内でアカウントによって変わるなんて?
もしかして、アカウント名に日本語(全角文字)使ってるとか。
ミスリードが怖いので、少し回答を控えます。
明日は我が身かもしれないので、進展(解決)ありましたら教えてください。

最後に残念な苦言です。
困っていらっしゃるのは良く分かるのですが、
マルチポストは如何なものかと。
せめて、ここと、あそこと、あっちに同じ質問を立てています、
のようにしてください。
↓をご一読ください!
http://stakasaki.at.webry.info/200512/article_3.html

新規ユーザーを作って試してみました。

Access(Office)を一回も開いていない状態
HKEY_CURRENT_USER\Software\Microsoft 下にVBA というキーは無し

Access を立ち上げてテーブルを一個だけ作成
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.0\Common まで出来て中味は↓だけ
名前 種類データ
(既定)REZ_SZ (値の設定なし)
Access閉じても変化なし

Access立ち上げて標準モジュールに MsgBox "" だけのSub Module作成
実行しても変化なし
Access終了後
(既定)、CtlsShowSelected、Dock、DsnShowSelected、...続きを読む

QAccessで検索を高速化

顧客データの検索画面をAccessで作成しています。
テーブルの数は全部で9、各テーブルのレコード数は約1万、
各テーブルのフィールド数は多くて20くらいです。

テーブル用のAccessをサーバに置いておいて、
検索画面フォームのAccessはそれぞれの社員のローカルに置いています。
テーブルを参照している社員数は20弱です。

Accessのバージョンは2007や2010、Runtimeを使っている社員もいます。

氏名フリガナと電話番号で検索できるようになっていて、
下の□のなかに、各テーブルの該当のものが抽出されるようになっています。

この検索画面の動きが最近著しく悪いです。
もっとサクサク動くようにしたいです。
色々調べてはみたのですが
・テーブルをSQLサーバに置いてリンクしなおしてみたのですが
余計動きが遅くなりました。
・「ある程度絞り込んでから検索をかける」というのが高速化のポイントらしいですが
常に全件が検索対象なので、それができません。
・テーブルのレコードについては常に全社員が新規作成、変更等できる状態でなければならないです。

動きを高速化させる知恵はないでしょうか?
ご教授ください!

顧客データの検索画面をAccessで作成しています。
テーブルの数は全部で9、各テーブルのレコード数は約1万、
各テーブルのフィールド数は多くて20くらいです。

テーブル用のAccessをサーバに置いておいて、
検索画面フォームのAccessはそれぞれの社員のローカルに置いています。
テーブルを参照している社員数は20弱です。

Accessのバージョンは2007や2010、Runtimeを使っている社員もいます。

氏名フリガナと電話番号で検索できるようになっていて、
下の□のなかに、各テーブルの該当のものが抽出されるように...続きを読む

Aベストアンサー

ミスリードが怖いので今回限りとします。
バックエンドの顧客データファイルをローカルにおいて再リンク。
これで試した場合に
共有フォルダに置いた場合とさほど処理時間が変わらなければ
Accessでの処理が限界にきていると推察されます。
両者とも他に誰も使用していない状況で試す必要があります。
差が格段に大きければネットワーク上に置いてあるために
問題が発生していると考えても良いのではないかと思います。

じわじわと遅くなったのではなければ
昨年くらいからWindows Update でいろいろとOSにも修正が入っているので
MSさん何かまずい事していない?と疑いたくなります。

以下は随分と昔なのですが調べた中で関係ありそうなのをピックアップしました。

[ACC2003] 複数のユーザーでリンク テーブルにアクセスするとパフォーマンスが落ちる
http://support.microsoft.com/kb/838670/ja

ネットワーク共有上のファイルを開いたとき、開くのに時間がかかる、読み取
り専用で開く、あるいはエラー メッセージが表示される
http://support.microsoft.com/default.aspx?scid=kb;ja;814112

Windows Vista を実行しているコンピュータで Microsoft Office Access デ
ータベースを開いたとき、または使用しているときに発生することがある問題
http://support.microsoft.com/kb/935370/ja

あとは、アンチマルウェアが足を引っ張っているとか・・・。

いずれにしろ、常時20人弱が頻繁に更新・新規レコード作成を行うのですから
Accessには荷が重すぎるように思います。
デッドロックに乗り上げたりファイル破損の可能性が常に付きまとうので
念には念を入れて作りこまないと・・・。
それに9万レコードのデータがLANを流れるわけですから。
以上、ご参考まで。

ミスリードが怖いので今回限りとします。
バックエンドの顧客データファイルをローカルにおいて再リンク。
これで試した場合に
共有フォルダに置いた場合とさほど処理時間が変わらなければ
Accessでの処理が限界にきていると推察されます。
両者とも他に誰も使用していない状況で試す必要があります。
差が格段に大きければネットワーク上に置いてあるために
問題が発生していると考えても良いのではないかと思います。

じわじわと遅くなったのではなければ
昨年くらいからWindows Update でいろいろとOSにも修正...続きを読む

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

QAccessリンクの仕方によるフロント速度違い

 小規模の会社で、Accessによるデータベースとフロントシステムを作っています。
この度、Access2003から2013へ変更するにあたり、システムを再構築するので、今よりも利用頻度が増えても、快適に動くようにしたいと考えています。
 そこで、データベースにしたAccessからのリンクの仕方と速度に関係があるかの質問です。
 前提条件として、データベースにするAccessはServer上にあり、フロントのAccessはクライアントPCにあります。フロントのPCから、ベースAccessにリンクを張って使用するのですが、多様な業務から、複数のベースAccessが存在し、1つのフロントから、主たるベースAccessのほかに他業務のベースAccessにもリンクを張るようになります。
 このケースで、ベースAccess側で、リンクテーブルを作り、フロントAccessからは、1つの主たるAccessにリンクを張るほうが、フロントの速度が上がるのか、それとも、現在と同じように複数のベースAccessにリンクを張るほうが速度が上がるのか、リンクの張り方が速度に関係することが無いのかを知りたいと思っています。
 ご存知の方いらっしゃいましたら、教えてください。
 よろしくお願いします。

 小規模の会社で、Accessによるデータベースとフロントシステムを作っています。
この度、Access2003から2013へ変更するにあたり、システムを再構築するので、今よりも利用頻度が増えても、快適に動くようにしたいと考えています。
 そこで、データベースにしたAccessからのリンクの仕方と速度に関係があるかの質問です。
 前提条件として、データベースにするAccessはServer上にあり、フロントのAccessはクライアントPCにあります。フロントのPCから、ベースAccessにリンクを張って使用するのですが、多様な業...続きを読む

Aベストアンサー

やったことはないけど、間にリンクテーブルだけのmdbを置くことは、パフォーマンス向上にはつながらないと思う。 これまたやったことないけど、パフォーマンスがあがる可能性としてはリレーションを組まないでよいテーブルは別のサーバに置くことじゃないかな? 同じPCに複数MDBをおいても意味はないと思う。(テーブルを結合させたSQLを発行する場合は、テーブル同士が別サーバーにあるとローカル処理になるので、これは避けたいところ)

一般的な流れとしては、
・dbはなるべく一つとしておいたほうが、管理が簡単。 (スケールが小さい場合はサーバーを分散させるより、機能を高めたほうが費用がかからないことが多い。)
・パフォーマンスを向上させるには、ハードウエア(サーバー・クライアント)、DBシステム、ネットワーク、データベースの正しい設計を行なう、などなど。 これらは、ユーザー数やトランズアクション数をあらかじめ想定した上で、どれだけ費用をかけてどのようなものを作るか考えるべき。
・DBは定期的にメンテナンスを行なう。 (アクセスだと、レコードの削除がある場合は最適化など)
・アクセスはユーザー数とトランズアクション数によっては、時々変なことが起きるので、データベース部分は早めに他のDBに切り替える。(簡単にSQLサーバとかにアップスケールできたと思う。)

やったことはないけど、間にリンクテーブルだけのmdbを置くことは、パフォーマンス向上にはつながらないと思う。 これまたやったことないけど、パフォーマンスがあがる可能性としてはリレーションを組まないでよいテーブルは別のサーバに置くことじゃないかな? 同じPCに複数MDBをおいても意味はないと思う。(テーブルを結合させたSQLを発行する場合は、テーブル同士が別サーバーにあるとローカル処理になるので、これは避けたいところ)

一般的な流れとしては、
・dbはなるべく一つとしておいたほ...続きを読む

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。


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

人気Q&Aランキング