Accessの最近のブログ記事

例えば、テーブル名が全て "public_"で始まっている場合に "public_"を削除する方法。

以前に書いた記事「[WSH]VBSからAccessのアクションクエリを実行する方法 (ADO) 」では、アクセス側であらかじめ作っておいたアクションクエリをVBSから実行する方法を紹介しました。

Excel VBAで、Writeステートメントを使ってCSV出力すると、日付が #2008-01-01# のような形式になってしまいます。
このCSVをAccessにインポートするのは大変です。
以下のような自作関数を使って変換しましょう。

3桁の乱数のみで構成される簡易パスワードを、
Accessのクエリで発生させる方法です。

普通にrnd関数を使うと、同じような乱数系列が繰り返されてしまいうまく行きません。
(昨日出たのと同じ数字がまだ出てたりする)

Randomizeステートメントとかを駆使すると回避できるらしいですが、ヘルプを見てもよくわかりませんでした。

そこで、システム時刻をあらわすTime()関数と組み合わせたらとうまく行きました。

クエリのSQLビューで、以下のコードを書いて実行すればOK。

SELECT Right(CLng(Time()*10000000*Rnd()),3) AS 乱数; 


なお、時刻のコンマ何秒という数字は、それ自体が乱数のようなものなので、Rnd関数を省いても一応動きます。

SELECT Right(CLng(Time()*10000000),3) AS 乱数;

これを乱数と呼べるのかはわかりませんが。(^^;


前回でもちょこっと紹介しましたが、AccessのSQL (いわゆるJet SQL)で 1→001 に変換する方法を紹介します。

ついにやり方を発見!!
WSHでDBプログラムが書けるなんて夢のようです。

やり方


以下のファイルを作って、同じフォルダに置く。

  1. MDBファイル

  2. JSファイル


Accessで、数値の"1"を文字列の"001"に変換する方法を紹介します。
専門的にはゼロ埋め、ゼロパディングなどと言います。

access-query.JPG前回に続き、WSH(VBS)からAccessのクエリ(削除クエリや更新クエリ)を実行する方法を紹介します。





←実行したいアクションクエリ




access-query.JPGExcel VBAからAccessのクエリ(削除クエリや更新クエリ)を実行したい場合があります。
その場合も、前回の記事と同様にADOを使うと簡単に実現できます。

←実行したいアクションクエリ

VBAでゼロパディング(1→001に変換するやつ)のやり方を紹介します。
Excel, Access, Powerpoint等、Office製品の全てで共通に使えます。

1 を 001に変換してみる

Sub test()
MsgBox Right(1 + 10 ^ 3, 3)
End Sub

上記のように書くと、「それってAccessのエクスポート機能を使えばいいじゃん」と思われるかもしれません。
たしかにAccessを開いて、テーブルやクエリをエクセル形式でエクスポートするやり方もあります。

しかし、Excelファイルを開いた上で、そこからAccessのデータを取りに行くというのが必要なときもあります。

とある中小企業で、Accessを使った業務用DBシステムを作ることになりました。

その会社では現状、社内の共有フォルダにExcelでいろんな管理表ファイルが散在していて、それらがVlookupで紐づいて連携しています。

それらをAccessベースに移植するのが私の仕事です。


今まさに試行錯誤しながら作ってる途中です。

以下、これまでわかったこと。

 

1 Access(MDBファイル)は、ファイル共有で使うとぶっ壊れる。

 

いろんなサイトで言われてますが、これは本当です。

実際、私もすでに2回ほど壊れました。(><)

一回目は、ファイルが突然開かなくなりました。

二回目は、アクセス権がありませんみたいなエラーが出て、やはりファイルが開けなくなりました。


幸いバックアップをこまめに取ってたのですぐ復旧できました。

Access(MDBファイル)は、スタンドアロン(つまりPC一台の中だけで)の環境で使うためにできていて、ネットワーク共有には向いていないそうですね。

 

2 テーブルとそれ以外(クエリ、フォーム、レポート)を別ファイルに分離すべし


テーブルだけを格納したMDBファイルを共有フォルダに置きます。(仮にa.mdbファイルとする)

  • クエリ、フォーム、レポートを格納したMDBファイルを作ります。(仮にb.mdbファイルとする)
  • b.mdbから、リンクテーブルでa.mdbのテーブルにリンクします。
  • b.mdbを各ユーザに配布して、各自ローカルPCに保存して使ってもらいます。

こうすると、無駄なネットワークのトラフィックが減り、MDBファイルが安定するそうです。

 

ファイルの分割は、Accessのメニューで簡単にできます。

ツール > データベースユーティリティ > データベース分割ツール


もちろん手動でもできます。手動でやる場合は、

  • 空のmdbファイルを新規作成(Aファイルとする。これはテーブル専用。)
  • 元ファイルからAファイルにテーブルを全てコピー
  • 元ファイルのテーブルを全て削除
  • 元ファイルでリンクテーブルを作成し、Aファイルのテーブルへのリンクを作る

私はまさに今週、この手法でMDBファイルを分割してみました。

今のところ特にトラブルなくサクサク動いています。

あと1~2週間、このまま様子見しようと思います。

 

3 MSDEを使うと、無料でクラアント/サーバ型DBシステムを作れるらしい。


(ただしVistaで動かない)

MSDEとはSQL Serverの無料版です。

Googleでちょっと調べると、「MSDEは同時接続5人まで」と書かれているサイトがありますが、これは誤解だそうです。

MSDEとSQL Serverはパフォーマンスの差はほとんどなく、100人以上のユーザがMSDEを使っても動くらしいですね。


実際、ユーザが20人くらいいても、全く同時に5件アクセスが来る確立はかなり低いそうです。

例えて言うなら、東京都の人口が1千万人いても、全員が同時に電車に乗ることはないのと同じでしょうか。


参考:

その他、参考になったサイトをdel.icio.usにブックマークしておきました。

http://del.icio.us/da_k/msde

人気記事

このアーカイブについて

このページには、過去に書かれたブログ記事のうちAccessカテゴリに属しているものが含まれています。

前のカテゴリはExcelです。

次のカテゴリはVBAです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事