例えば、テーブル名が全て "public_"で始まっている場合に "public_"を削除する方法。
Accessの最近のブログ記事
以前に書いた記事「[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プログラムが書けるなんて夢のようです。
やり方
以下のファイルを作って、同じフォルダに置く。
- MDBファイル
- JSファイル
Accessで、数値の"1"を文字列の"001"に変換する方法を紹介します。
専門的にはゼロ埋め、ゼロパディングなどと言います。
VBAでゼロパディング(1→001に変換するやつ)のやり方を紹介します。
Excel, Access, Powerpoint等、Office製品の全てで共通に使えます。
1 を 001に変換してみる
Sub test()
MsgBox Right(1 + 10 ^ 3, 3)
End Subたしかに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にブックマークしておきました。
